Невозможно настроить подсветку пользовательского синтаксиса в TextMate

Я пытаюсь выделить пользовательский язык в TextMate. Однако следующее определение не выделяет вставки PHP (я выбираю его для своих файлов *.serpent):

{ scopeName = 'source.serpent';
 fileTypes = ( 'serpent' );
 patterns = (
  { begin = '<\?';
   end = '\?>';
   patterns = ( { include = 'source.php'; } );
  },
 );
}

Если я выбираю язык PHP, то выделяются части PHP.

Что может быть причиной? Должно ли это работать?

Я также рассматривал рубиновые вставки с разделителями ‹% %>, но это не работает с самой простой настройкой.


Обновить

Судя по всему, это проблема только PHP. Следующее определение языка выделяет в моем тексте языки Ruby и Serpent, но не вставки PHP! Что здесь не так?

{   scopeName = 'source.phpruby.serpent';
    fileTypes = ( 'serpent', 'serpent.php', 'serpent.erb' );
    patterns = (
        {   begin = '<\?(php|=)?';
            end = '\?>';
            patterns = ( { include = 'source.php'; } );
        },
        {   begin = '<%';
            end = '%>';
            patterns = ( { include = 'source.ruby'; } );
        },
        {   include = 'source.serpent'; },
    );
}

Я заставил его работать, заменив source.php на #language в своих шаблонах и скопировав репозиторий с языка PHP.


person Andrei    schedule 03.06.2010    source источник


Ответы (1)


В пятницу, 9 июля 2010 г., в 08:02, Аллан Одгаард написал:

Мы сделали так, чтобы сама грамматика PHP соответствовала конструкции, поэтому с вашей грамматикой эти биты были использованы включающей грамматикой, и поэтому включенная грамматика PHP не будет работать.

Причина, по которой мы сделали это таким образом, заключалась в том, что грамматика PHP может работать при использовании в качестве корневой грамматики, поскольку многие пользователи настаивают на ее использовании таким образом, несмотря на наши усилия¹ по обучению ;)

¹ http://wiki.macromates.com/Troubleshooting/PHPSyntaxHighlight

С божьей помощью я понял свою ошибку и смог составить рабочее (хотя бы подчеркивающее!) определение:

{   scopeName = 'source.phpruby.serpent';
    fileTypes = ( 'serpent', 'serpent.php', 'serpent.erb' );
    patterns = (
        {   begin = '<\?(php|=|)';
            end = '\?>';
            include = 'source.php';
        },
        {   begin = '<%';
            end = '%>';
            patterns = ( { include = 'source.ruby'; } );
        },
        {   include = 'source.serpent'; },
    );
}
person Andrei    schedule 09.07.2010
comment
Некоторое время был нерабочий код, но потом его починили. - person Andrei; 09.07.2010