On 10/4/2006, at 1:02, Dirk van Oosterbosch, IR labs wrote:
[...] I have my bundle recognize cheetah placeholders (or 'variables'), which look like this: $placeholder or $placeholder.argument. But when I also have { include = 'text.html.basic'; } in my patterns the placeholders which are inside html tags (e.g. as arguments or values), are no longer recognized and become just 'string.quotes.double.html'. The text outside html tags stays unaffected, and thus placeholder.
Yes -- the rules you declare are at the root level. So when the (included) HTML grammar starts a sub-context, your rules will not be applied.
A better approach would be to duplicate the existing HTML grammar and locate the “ embedded-code” rule. Here add another rule to include cheetah. The HTML grammar re-uses this “embedded-code” rule in most of the contexts where embedded code makes sense.
You will then have to select this (duplicated and modified) HTML grammar for your cheetah files, instead of selecting cheetah.
Long term I plan to do something akin to activate the scope selector text field for language grammars (and allow UTI’s/file types to be targeted by scope selectors). Then one would be able to set a scope selector for a language grammar, which would basically be where this grammar should be “injected” (which could be in multiple places/for different file types.) But this is post 2.0, so for now one is stuck with just editing the language grammar in which the injection should take place.