[TxMt] Re: Grammar injection. Main grammar taking priority?
Daniel Rodríguez Troitiño
notzcoolx at yahoo.es
Wed Jun 1 07:39:12 UTC 2016
Thanks. The recommendations worked. Adding L:(…) around all the injections selector does the trick. I don’t know why it didn’t work for me then, but probably because of the second problem. Simplifying the other selectors and not trying to follow the ERB syntax makes everything a little bit easier to understand (and correctly syntax highlight both languages in the same file).
Thanks a lot for the help!
El lunes, 30 de mayo de 2016 a las 14:36, textmate-request at lists.macromates.com (mailto:textmate-request at lists.macromates.com) escribió:
> On 16 May 2016, at 17:29, Daniel Rodr?guez Troiti?o wrote:
>
> > A simple version of my grammar looks like this:
> > [?]
> > 'source.swift.gyb - (meta.embedded.block.gyb)' = {
> The injection scope selector should use L:(?) so your injected rules
> go before Swift?s (as you also write yourself).
>
> > { begin = '(^|\s*)(?=%\{(?![^\}]*\}%))';
> This seems to be the problem, this rule doesn?t actually match
> anything as it?s a ?begin of line? assertion and then a ?look
> ahead? assertion.
>
> So while the rule ?matches? when you have `%{` at the beginning of a
> line, no characters are consumed, so we descend into the rule?s
> patterns, but here we also have the Swift rules, and the L:(?) only
> affects the priority of the root rules injected (not their children), so
> the Swift rule will consume the `%` character because it was not
> consumed by the parent rule?s begin pattern.
>
> A minimal version of your grammar that works would be this:
>
> { injections = {
> 'L:(source.swift.gyb - meta.embedded.block.gyb)' = {
> patterns = (
> { name = 'meta.embedded.block.gyb';
> begin = '%\{';
> end = '\}%';
> contentName = 'source.python';
> patterns = ( { include = 'source.python'; } );
> },
> );
> };
> };
> patterns = ( { include = 'source.swift'; } );
> }
>
> I understand you wanted to scope the leading/trailing whitespace and
> then re-use the actual matching of %{ and %}, but I don?t think this
> is possible, though I think it will be simpler to add optional matches
> like this:
>
> begin = '(^\s*)?%\{';
> end = '\}%(\s*$)?';
>
> Then name these captures for
> `punctuation.whitespace.embedded.[leading|trailing].gyb`.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macromates.com/textmate/attachments/20160601/cc46e251/attachment.html>
More information about the textmate
mailing list