[Lazarus] Regex and Syntax Highlighting

Mattias Gärtner nc-gaertnma at netcologne.de
Wed May 26 14:24:19 CEST 2010


Zitat von Graeme Geldenhuys <graemeg.lists at gmail.com>:

> 2010/5/26 Zaher Dirkey :
>>
>> I meant the mechanism of SynEdit not SynEdit it self, Let us call "Line
>> Feeding Highlighting", LFH if you like :P

LFH normally comes with a line state (some booleans or counters). Same  
as synedit. But synedit supports arbitrary states (the default  
implementation implements one stack). You need a stack for different  
keyword sets. For example for the method modifiers. This is not fully  
used in the synedit pascal highlighter, because IMO highlighting some  
variables as keywords is not a big deal and because IFDEFs and macros  
make it hard to implement fully.
For example:

procedure DoIt(
   {$IFNDEF FPC} );
   {$ELSE} i: integer = 0); inline; macro_modifier;
   {$ENDIF}


>> RegEx used on whale file in memory, but that LFH do it line by line, you can
>> generate the colored and syntax online without load it in memory, just line
>> by line.

That's good for logs and csv files.
That does not work well for sources, where blocks span many lines. You  
need the line state.


> [...]
> Like I said in my first post, I don't know how they currently
> integrate regex with a syntax highlighter - that's the whole point of
> the exercise, to find out how. You can very easily run a regex on a
> line by line basis, but I doubt that is the best way of doing it,
> because it will also produce problems with things like comment blocks.

AFAIK they do. Because regex can not count nor save states, you need a  
state machine, which selects which set of regex to use.


>> http://www.hvge.sk/scripts/fshl/
>> http://code.google.com/p/fshl/

Their configs are php. I think the gtksourceview (gedit) syntax is  
easier to understand. As far as I can see it is powerful enough. It is  
not as fast and flexible as synedit, but it is enough to highlight  
even blocks.

Graeme, when you start implementing a highlighting machine, you might  
want to consider code folding too.


Mattias







More information about the Lazarus mailing list