Ilya Bobir wrote:

> I've already posted about this bug in syntax matching code.  But now I 
> have a fix.
> 
> Test case
> =========
> Having following syntax rules
> 
> :syn cluster Top contains=Block,String,Identifier
> :syn region Block start=+{+ end=+}+ keepend extend [EMAIL PROTECTED]
> :syn region String start=+"+ end=+"+ contains=Identifier
> :syn region Identifier start=+\${+ end=+}+ extend
> 
> and the following buffer is matched incorrectly
> 
> { "string ${var} string" }
> 
> on current vim version (7.0.109) I'm getting following syntax groups:
> 
> { "string ${var} string" }
> BBBBBBBBBBBBBBBBBBBBBBBBBB
>   SSSSSSSSSSSSSS       SS
>           IIIIII
> 
> Where B means Block region, S - String region and I - Identifier region.
> 
> While I'm expecting to see the following picture:
> 
> { "string ${var} string" }
> BBBBBBBBBBBBBBBBBBBBBBBBBB
>   SSSSSSSSSSSSSSSSSSSSSS
>           IIIIII
> 
> Bug description
> ===============
> Bug appears, when one have an extend region inside a normal region 
> inside a keepend region.  Currently, when any extend region ends vim 
> checks all the outer keepend regions to see, if theirs ends should be 
> "extended", but it does not checks intermediate normal (non keepend) 
> regions and theirs ends should also be checked otherwise one could end 
> up with a normal region been forcefully ended by enclosing keepend 
> region and this keepend region later be extended by a containing extend 
> region.
> 
> Just as it is seen in the first picture in the test case.  Block region 
> ends String region on a first '}'.  But later when Identifier region 
> consumes that first '}' Block region is extended, while String region is 
> not.
> 
> Solution
> ========
> Test intermediate normal region ends along with keepend region ends when 
> an extend region ends.
> 
> Here is a patch for syntax.c that does this check.  I'm getting correct 
> behavior with this patch for my test case.

Complicated stuff.  I'm glad you managed to find a solution.  But we
need to check for side effects.  I'll include it and try it out for a
while before sending out an official patch.

-- 
SOLDIER: What?  Ridden on a horse?
ARTHUR:  Yes!
SOLDIER: You're using coconuts!
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

Reply via email to