I would find this feature very useful as well.
+1

regards,
Peter


--- Nikolai Weibull <[EMAIL PROTECTED]> wrote:

> I'm a firm believer in the nextgroup directive for defining syntaxes.
> It allows you to define grammars, which I really enjoy doing.
> However, one problem is that many languages allow things to appear in
> their input that's not part of the language's grammar.  For example,
> many languages allow comments to appear almost anywhere in the input,
> which are stripped out of the input while lexing the input into tokens
> that are then fed to the actual parser.  Now comments could be a part
> of the grammar, simply being thrown away at that point in the process,
> but it forces you to provide for the possibility of a comment
> appearing basically anywhere between terminals/non-terminals.
> 
> Anyway, what I'm actually suggesting is a way to get around this issue
> by adding a new directive to the :syntax command that can be used
> alongside nextgroup to skip certain syntax groups before trying the
> groups defined by nextgroup.  This is much like skipwhite, skipnl, and
> skipempty, but for arbitrary syntax groups.
> 
> Here's an example of what I intend for it to do:
> 
> syn keyword tocTodo
>       \ contained
>       \ TODO
>       \ FIXME
>       \ XXX
>       \ NOTE
> 
> syn match   tocComment
>       \ contains=tocTodo,@Spell
>       \ '//.*$'
> 
> syn keyword tocHeaderKeyword
>       \ nextgroup=tocCatalogNumber
>       \ skip=tocComment
>       \ skipwhite
>       \ skipempty
>       \ CATALOG
> 
> syn match   tocCatalogNumber
>       \ contained
>       \ '"\d\{13\}"'
> 
> This is a partial grammar that matches comments and the CATALOG
> keyword in the header part of a cdrdao(1) TOC file (yes, I'm writing a
> grammar for such files).  Comments begin with a set of slashes and can
> appear anywhere in the file.  The CATALOG keyword is followed by a
> (optional, but let's keep it simple for this example) catalog number.
> The idea here is that the skip=tocComment directive to
> tocHeaderKeyword will tell the syntax highlighting engine that it
> should skip any matches to tocComment that follow tocHeaderKeyword,
> just as the skipwhite and skipempty pair tells it to skip whitespace
> and empty lines (before and after any tocComments) before it tries to
> match a tocCatalogNumber.
> 
> I have no idea how hard this would be to implement, but I'm thinking
> that it can't be too difficult.  It should "only" be to add some
> handling around the code that handles skipwhite/skipnl/skipempty to go
> through a list of syntax groups and try to match them, highlighting
> them, and then trying to highlight whatever is in nextgroup
> afterwards.
> 
> I'm sure there are edge cases to consider, but I can't think that it
> should be impossible.  I sadly don't have any understanding of the Vim
> syntax highlighter, so someone with more knowledge will have to help
> me out.
> 
> Comments?  Patches?  Complaints?
> 
>   nikolai
> 
> P.S.
> Yes, I know that this can be solved by keeping track of the context by
> adding a tocXComment for each and every :syntax ... X ... definition
> (production) that keeps track of what the nextgroup of the production
> in question was and adding the tocXComment production to that
> productions nextgroup, but that doubles the number of productions and
> makes it a lot harder to change it later on.
> 
> Here's an example of what that looks like for the grammar above:
> 
> syn keyword tocTodo
>       \ contained
>       \ TODO
>       \ FIXME
>       \ XXX
>       \ NOTE
> 
> syn match   tocComment
>       \ contains=tocTodo,@Spell
>       \ '//.*$'
> 
> syn keyword tocHeaderKeyword
>       \ nextgroup=
>       \   tocCatalogNumberComment,
>       \   tocCatalogNumber
>       \ skipwhite
>       \ skipempty
>       \ CATALOG
> 
> syn match   tocCatalogNumberComment
>       \ nextgroup=tocCatalogNumber
>       \ skipwhite
>       \ skipempty
>       \ contains=tocTodo,@Spell
>       \ contained
>       \ '//.*$'
> 
> syn match   tocCatalogNumber
>       \ contained
>       \ '"\d\{13\}"'
> 
> Of course, all those additional groups can be automatically generated,
> given a grammar, but again, it makes it harder to follow, harder to
> change, and more memory-hungry than what a grammar using the (still
> fictional) skip directive.
> D.S.
> 


Send instant messages to your online friends http://au.messenger.yahoo.com 

Reply via email to