[TxMt] language grammars

Allan Odgaard throw-away-1 at macromates.com
Mon Oct 9 17:03:13 UTC 2006


On 9. Oct 2006, at 18:39, sam aaron wrote:

>> This is not how the parser works. When one rule has matched a portion
>> of the text, no other rules can match that text.
> ok, so only one scope can be applied to each character of the  
> document?

Only one rule can assign a scope to a particular character, yes. But  
scopes nest, so if you use a begin/end rule, everything matching  
inside this, will inherit the scope of the begin/end rule.

>> but it appears to me that
>> what you want is for the different rules to overlap, i.e. match the
>> same characters in the document.
>
> yes, for some reason i thought that this was possible. For example,
> consider the following line:
>
> * this is part of a list _here i want italics_
>
> I thought it was possible to have the characters between the
> underscores to belong to an 'italic scope' and also a 'list item
> scope'.  I guess you kind of achieve this by naming the italics scope
> as an extention of the list scope: list.italics or is it recommended
> to just use an italics scope, losing its relationship with the list?

You nest the rules, e.g.:

    { name = 'markup.list';
      begin = '^ \* '; // simplified list item start
      end = '$';       // end list item at end-of-line
      patterns = (
          { name = 'markup.italic';
            begin = '_'; end = '_';
          }
      );
    }

> My next question (which I think I already know the answer to), so if I
> want to have the equivalent of an underscore italics rule, i have to
> declare it as an internal pattern to all the patterns I want itallic
> behaviour inside? I guess this is where you'd use the grammar
> repository?

Yes.






More information about the textmate mailing list