On 10 January 2016 at 23:37, Allan Odgaard mailinglist@textmate.org wrote:
On 8 Jan 2016, at 9:18, Martin Kühl wrote:
Thinking about this more, I believe this is a bug. The `L:` prefix seems to cause the injected begin matcher to match even before its own end matcher can,
The `L:` prefix means “inject the rules before the current context’s rules”.
What happens here is that we inject a begin/end match, each for `~~~`.
Once we match `~~~` we start a new context, in this new context, the injection grammar is once again injected, so once we see the ending `~~~` it is actually matched by a new instance of the injection grammar, because we inject it before the current context’s rules (in which we find the rule to match the ending `~~~`).
I guess my assumption was that the injection scope would refer to a piece of a grammar, analogous to what `include` refers to.
Am I understanding correctly then that an injection scope: * refers to (and is compared to) a scope in the active document? * is valid for the whole (injected) grammar
Is there a way to inject different rules into different scopes or would one create multiple injected grammars for that?
Now to help me understand…
Let's assume our position is inside some scope S opened by a `begin`/`end` rule. Let's call its `end` matcher END and its included rules INC. TM would try matching END, then INC, right? Let's abbreviate that as [ENC, INC].
There is another grammar supposed to inject rules into the current scope, let's call its rules INJ. If I understand correctly, injecting into scope "S" would result in trying [END, INC, INJ], while injecting into "L:S" would result in trying [INJ, END, INC], right?
What do the R and B prefixes do? I can imagine R being useful for lowering priority in the face of several injected grammars, is that the intended purpose?
Is there a way to inject the grammar such that TM would try [END, INJ, INC]?
Thanks for your patience, Martin