It turns out that it is wrong, in a grammar, to put a "patterns" section inside a "name/match" section.
But it isn't _forbidden_. It just makes everything behave wrong. I lost an entire day over this, because none of the documentation made this sufficiently clear, but mostly because TextMate did not complain. I am suggesting that it should do so.
Here is an extremely silly example to illustrate. Start with this:
{ patterns = ( { name = 'punctuation.test'; match = 'this.*?test'; }, ); }
It successfully matches the phrase "this is a test" in the middle of a longer sentence such as "I tell you that this is a test of everything".
Now introduce an embedded pattern:
{ patterns = ( { name = 'punctuation.test'; match = 'this.*test'; patterns = ( { name = 'constant.character.escape.untitled'; match = '\.'; }, ); }, ); }
(I told you it was silly!) The result is that "punctuation.test" now wrongly matches the entire document starting with "this is a test". Evidently, TextMate didn't like that. But what I'm saying is, if TextMate doesn't like that, TextMate should forbid it. The lovely dialog that says that this is not a valid property list, for example, might be used to tell me that this is not a valid grammar and will mess things up as we go along.
m.
-- matt neuburg, phd = matt@tidbits.com, http://www.apeth.net/matt/ pantes anthropoi tou eidenai oregontai phusei Programming iOS 7! http://shop.oreilly.com/product/0636920031017.do iOS 7 Fundamentals! http://shop.oreilly.com/product/0636920032465.do RubyFrontier! http://www.apeth.com/RubyFrontierDocs/default.html TidBITS, Mac news and reviews since 1990, http://www.tidbits.com