Ok, so there seems to be some interdependency of features that i am not aware of.

When I do put the below mentioned pattern into my plist (and i tested it before it matches lot's of stuff quite nicely, i will need to modify it further, but this was just for testing) file, and restart BBEdit, nothing changes.

Maybe my expectations are wrong? If i have a "matching" expression for functions, i would expect:

a) that the symbol popup shows something
b) that i get code folding on the function lvl
c) that those things that are matched by <function_name> get syntax coloring

None of that happens. Actually the .cs files behave the same as without that change (so i know parsing works, because if i put something bad in there, i get no syntax coloring at all), also console.log shows no errors.

Are my expectations wrong? Or are some options mutually exclusive in the plist file?

Frank


On Nov 16, 2006, at 5:05 PM, Seth Dillingham wrote:

Frank,

These are all questions that I've been meaning to address in an update to my little tutorial, but paying work (whee!) has limited my time. Anyway, brief answers follow...

On 11/16/2006, Frank Mantek said:

a) I could not find anything in the docs about how to best test a named subpattern. i know how to test an unnamed numbered pattern, but to make sure the P<function_name> pattern works, i would really like to test it...

My guess is that by "numbered pattern" you mean "groups" (a.k.a. captures), and you're testing them by putting a \1 (or whatever) in the replace pattern.

You can't do that with "named subpatterns," unfortunately. BBEdit's replace field doesn't understand the names.

The only way to test it (that I know of) is to build your pattern piece by piece. I write the pattern in a separate text file with the file type set to "Grep Search" so that I get the syntax coloring.

The "function" pattern is usually the biggest one in the .plist file, and mine are usually made up of a set of smaller "named groups." For example, the function pattern often needs to understand strings and comments, so I build those patterns first. Then for a C-like language I have a subpattern that describes identifiers (variable names, types, classes, functions, etc.). I put that identfiier in the first place that it's needed, and then refer to it later wherever I might need it later.

Every time you add another piece, test it.

Sometimes the patterns start growing a bit out of control, especially when they become recursive (self-referential, where the contents of a named sub-pattern includes a reference to itself). This makes testing even harder... I burned a few hours trying to figure one of these out for someone else on this list, around the time I wrote that tutorial. My form of testing was to run the search and then sit there for a few minutes and examine every character (of the document being searched) to figure out what went wrong. :-)

That's another tip: start out with really simple test cases. The simpler the better. You'll need to make sure it works with more complicated stuff too, but make it work with childishly-simple samples first.

b) i know how to match the function line etc, but as my terminating char for the Name is the opening paranthesis, what i want to do is: find beginning of line, search for opening paranthesis, and now create a subpattern by going backwards and match an identifier name... How do i do that? Is that even possible?

If you're sure that an open parenthesis is all it takes to define a function, then it would be something like this:

^[ \t]*(?P<function_name>(?P<identifier>[a-z][a-z0-9_]*)(?:[ \t]+(? P>identifier))*)[ \t]*\(

Isn't that purdy? ;-)

(Watch out for line wrap. That's all one line.)

c) If i don't use the CDATA trick, i need to html encode all special chars inside the string? or just open/close <> ?

You should use the CDATA trick, or (as John suggests) the older form of the plist file. I have templates for both styles linked at the bottom of the tutorial. I can't think of any reason not to use one of those formats.

However, the answer to your question is that if you don't use the "CDATA trick," then you only need to encode the angle brackets, nothing else.

Oh, anyone else found documentation about this, beside the very brief part of the manual (i downloaded the SDK, to my suprise there is nothing on CLMs in there). And yes, i looked through Seth's excellent tutorial.

There hasn't been any other documentation released yet, that I'm aware of.

Seth


--
------------------------------------------------------------------
Have a feature request? Not sure the software's working correctly?
If so, please send mail to <[EMAIL PROTECTED]>, not to the list.
List FAQ: <http://www.barebones.com/support/lists/bbedit_talk.shtml>
List archives: <http://www.listsearch.com/BBEditTalk.lasso>
To unsubscribe, send mail to:  <[EMAIL PROTECTED]>



--
------------------------------------------------------------------
Have a feature request? Not sure the software's working correctly?
If so, please send mail to <[EMAIL PROTECTED]>, not to the list.
List FAQ: <http://www.barebones.com/support/lists/bbedit_talk.shtml>
List archives: <http://www.listsearch.com/BBEditTalk.lasso>
To unsubscribe, send mail to:  <[EMAIL PROTECTED]>

Reply via email to