I just implemented the perl filter. It works perfectly.
Thanks, GP.
On Monday, April 22, 2024 at 6:19:46 PM UTC-5 Doug Pinkerton wrote:
> I think I can make the perl work. Thanks very much to both of you.
>
> On Monday, April 22, 2024 at 3:06:58 PM UTC-5 GP wrote:
>
>> For a human generated solution...
>>
>> Since simple grep search and replace can't easily handle generating
>> variable length strings whose length is determined by the length of a found
>> text group, something like a simple perl text filter is an easier way to
>> handle it.
>>
>> A simple perl text filter like:
>>
>> #!/usr/bin/perl -w
>> use strict;
>>
>> # set up the underline character for heading levels
>> my $ulCharL1 = "=";
>> my $ulCharL2 = "-";
>>
>> #for each line check for and reformat level 1 and level 2 headings
>> while (<>) {
>> chomp;
>> if ($_ =~ /^## (.+)$/){
>> print $1, "\n", $ulCharL2 x length($1), "\n";
>> } elsif ($_ =~ /^# (.+)$/){
>> print $1, "\n", $ulCharL1 x length($1), "\n";
>> } else {
>> print $_, "\n";
>> }
>> }
>>
>> will quickly do the job.
>>
>> I saved it as "underline_headings.pl in in BBEdit's Text Filters support
>> folder. (If desired, you can assign a keyboard short cut for in the Text
>> Filters pallet.)
>>
>> Then you can apply the text filter to either the frontmost whole
>> file/text window or just to selected text in the frontmost file/text window.
>>
>> In the match patterns for heading lines, I'm assuming heading lines will
>> always start at the beginning of a line with # or ## followed by just one
>> space character followed by the rest of the heading line text to the end of
>> that line. If those assumptions don't hold with the level headings forms
>> found in your real world text, you'll need to modify the match grep
>> expressions.
>>
>> Also, if you have additional levels of heading besides the two, to handle
>> those just declare the underline character for that heading level and add
>> another elsif clause to find/match that heading level and print the
>> reformatted heading text with the underline text line.
>>
>> On Monday, April 22, 2024 at 10:31:18 AM UTC-7 Doug Pinkerton wrote:
>>
>>> I would like to create a text factory to change each instance of
>>>
>>> # This is a level 1 heading
>>> to
>>> This is a level 1 heading
>>> =========================
>>>
>>> And I would like to change each instance of
>>>
>>> ## This is a level 2 heading
>>> to
>>> This is a level 2 heading
>>> -------------------------
>>>
>>> My grep skills are rudimentary. I’m using this.
>>>
>>> Find: ^## ([A-Za-z: ,]+)\r
>>> Replace: \1\r----------
>>>
>>> It works as desired, almost. But instead of ten hardcoded dashes, I
>>> would like for the number of dashes to equal the number of characters in
>>> the previous line (once the initial hashmarks are removed). I’m in over my
>>> head. Can someone help?
>>>
>>> Thanks.
>>>
>>
--
This is the BBEdit Talk public discussion group. If you have a feature request
or believe that the application isn't working correctly, please email
"[email protected]" rather than posting here. Follow @bbedit on Mastodon:
<https://mastodon.social/@bbedit>
---
You received this message because you are subscribed to the Google Groups
"BBEdit Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/bbedit/73e77beb-0287-4478-9898-2d72b8cf8445n%40googlegroups.com.