On 10/31/06, Виктор Кожухаров <[EMAIL PROTECTED]> wrote:
Hello,
I'm working on a syntax file for .edc files. The problem before me is
that I want to use a different syntax file for a "script" part. I've
created the syntax file for the script syntax, and I've read how yto use
"syn include".
The real problem is, that in the .edc files, scripts are located within:
script {
SCRIPT HERE
}
,however, the scripts themselves can also have {} braces. I've written
the following, but it only uncludes the script syntax upto the first "}"
brace, and I have no idea how to make it end on the _matching_ "}" brace
instead:
-----------------------------------------------------------------------
syn include @edcEmbryo syntax/embryo.vim
unlet b:current_syntax
syn region edcScript start="\<script\>\s*\n*\s*{" end="}"
[EMAIL PROTECTED],edcScriptTag
syn keyword edcScriptTag contained script
-----------------------------------------------------------------------
So the question is, if I have:
script {
if (foo) {
bar;
} else {
baz;
}
}
how do I make vim use the script syntax all the way up to the closing }
brace for the "script"?
1. Maybe this can fix the problem: namely, using this inclusion method
mentioned in ':help syn-include' :
:runtime! syntax/embryo.vim
:unlet b:current_syntax
, instead of using 'syn include'. Does this help ?
If this won't help, how about two less probably possiblities:
2. Just for the sake of experiment, does the problem go away
when you modify the 'syn region' to this:
syn region edcScript start="\<script\>\s*\n*\s*{" end="^}" ...
I realise this is not the proper final fix, but just to see what makes the
problem. Without (1) and (2), I think vim
has egg-and-chicken problem trying to determine where
@edcEmbryo ends.
3. Does something change if you comment out the 'syn keyword ... script'
statement ?
One less probably suspicion is that that 'keyword script' badly interacts with
pattern containing 'script' with 'region ... start="\<script\>...
This seems less probale because you say that beginning of edcScript
region matches correctly.
Yakov