Hi Tim,
Good to know it worked.
Here is the commented regular expression.
(?P<function> (?# FUNCTION NAMED CAPTURE GROUP used by BBEdit for FOLDS.
)
\h* (?# Zero or more horizontal whitespace.
)
\n (?# One linefeed.
)
( (?# LINE GROUP.
)
\d+ (?# One or more digits.
)
\h (?# One horizontal space. Important: means line is
in function body. )
.+ (?# Rest of the line. By default, dot is not
allowed to match EOL. )
( (?# EOL options group. See comment below.
)
\n (?# One linefeed.
)
| (?# or
)
\z (?# EOF. Needed for catching the last line.
)
) (?# End of LINE GROUP.
)
)* (?# Zero or more LINEs.
)
(?# A Mandatory last LINE.
)
\d+ (?# One or more digits.
)
\h (?# One horizontal space. Important: means line is in
function body. )
.+ (?# Rest of the line. Not including EOL.
)
) (?# The FOLD should end before the optional next linefeed
as it is the functions separator.)
The secret sauce is in catching only lines that start by digits followed by
a space as they are function body lines.
Rethinking it, the `EOL options group` is overkill, a single "\n" will
suffice as those lines are never the last line of the file.
(?P<function>
\h*\n
(\d+\h.+\n)*
\d+\h.+
)
Regards,
Jean
On Monday, May 16, 2022 at 1:37:30 AM UTC+2 Tim Gray wrote:
> Thank you! This is great.
>
> Can I bother you for an explanation for the folding part of the pattern?
> I assume this is the second part of the function pattern (the part named
> ‘function’).
>
> On Sun, May 15, 2022, at 5:11 AM, jj wrote:
>
> Hi Tim,
>
> Here is an attempt for you special case CLM.
>
> Save it as ~/Library/Application\ Support/BBEdit/Language\
> Modules/free42.plist
> and restart BBEdit.
>
> You should now have a 'Free42' language module that highlights files with
> the .free42 extension.
>
> HTH,
>
> Jean Jourdain
>
> --
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "
> http://www.apple.com/DTDs/PropertyList-1.0.dtd">
> <plist version="1.0">
> <dict>
> <key>BBEditDocumentType</key>
> <string>CodelessLanguageModule</string>
> <key>BBLMColorsSyntax</key>
> <true/>
> <key>BBLMIsCaseSensitive</key>
> <true/>
> <key>BBLMSupportsTextCompletion</key>
> <true/>
> <key>BBLMKeywordList</key>
> <array>
> <string>GTO</string>
> <string>RTN</string>
> <string>LSTO</string>
> <string>RCL</string>
> <string>END</string>
> <string>SIGN</string>
> <string>R</string>
> <string>XEQ</string>
> </array>
> <key>BBLMLanguageCode</key>
> <string>FR42</string>
> <key>BBLMLanguageDisplayName</key>
> <string>Free42</string>
> <key>BBLMScansFunctions</key>
> <true/>
> <key>BBLMFunctionScannerDoesFoldsToo</key>
> <true/>
> <key>BBLMSuffixMap</key>
> <array>
> <dict>
> <key>BBLMLanguageSuffix</key>
> <string>.free42</string>
> </dict>
> </array>
> <key>Language Features</key>
> <dict>
> <key>Close Block Comments</key>
> <false/>
> <key>Close Statement Blocks</key>
> <false/>
> <key>End-of-line Ends Strings 1</key>
> <false/>
> <key>End-of-line Ends Strings 2</key>
> <false/>
> <key>Escape Char in Strings 1</key>
> <string>\</string>
> <key>Escape Char in Strings 2</key>
> <string>\</string>
> <key>Identifier and Keyword Character Class</key>
> <string>\p{Xwd}</string>
> <key>Open Block Comments</key>
> <false/>
> <key>Open Line Comments</key>
> <false/>
> <key>Open Statement Blocks</key>
> <false/>
> <key>Close Strings 1</key>
> <false/>
> <key>Close Strings 2</key>
> <false/>
> <key>Open Strings 1</key>
> <false/>
> <key>Open Strings 2</key>
> <false/>
> <key>String Pattern</key>
> <string><![CDATA[(?x)
> ^\d+
> ]]></string>
> <key>Function Pattern</key>
> <string><![CDATA[(?x)(?n)
> ^\d+▸LBL\h
> (?P<function_name>
> (
> "[^"]+?"
> |
> \d+
> )
> )
> (?P<function>
> \h*\n
> (\d+\h.+(\n|\z))*
> \d+\h.+
> )
> ]]></string>
> </dict>
> </dict>
> </plist>
> --
> On Saturday, May 14, 2022 at 10:36:49 PM UTC+2 Tim Gray wrote:
>
> I'm trying to write a codeless language module for an obscure 'language' -
> keystroke program listings for an HP42S calculator (or the Free42 program
> as the case may be). I think I've got all the keywords and special
> characters figured out but am struggling with two things. First, here's a
> sample program listing:
>
> 00 { 37-Byte Prgm }
> 01▸LBL "FAC"
> 02 X≠0?
> 03 GTO 00
> 04 SIGN
> 05 RTN
> 06▸LBL 00
> 07 R↑
> 08 LSTO "T"
> 09 R↓
> 10 LSTO "N"
> 11 1
> 12 -
> 13 XEQ "FAC"
> 14 RCL "N"
> 15 ×
> 16 RCL "T"
> 17 R↓
> 18 END
>
> I'd like to have the 'LBL' lines show up in the function popup with the
> correct label ("FAC" or "00"). Code folding for each section would be nice,
> but not necessary. I'm not sure the best way to implement this - I tried
> "Prefix for Functions" but I'm assuming I need "Function Pattern" instead.
>
> My second question pertains to the line numbers. The line numbers are
> often part of a listing, but are not actually part of the program. I'd like
> some way to highlight those if possible. Is that doable in a CLM? The regex
> is easy: '^\d+( |▸)' but I don't know if there is anyway to implement it...
>
> Thanks,
> Tim
>
>
> --
> This is the BBEdit Talk public discussion group. If you have a feature
> request or need technical support, please email "[email protected]"
> rather than posting here. Follow @bbedit on Twitter: <
> https://twitter.com/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/1796707b-1847-485a-93ce-b948255fb795n%40googlegroups.com
>
> <https://groups.google.com/d/msgid/bbedit/1796707b-1847-485a-93ce-b948255fb795n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
>
--
This is the BBEdit Talk public discussion group. If you have a feature request
or need technical support, please email "[email protected]" rather than
posting here. Follow @bbedit on Twitter: <https://twitter.com/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/920c071b-2401-453c-8e80-f1f1bcf2bf9dn%40googlegroups.com.