1

Я пытаюсь выделить пользовательский язык в TextMate. Однако следующее определение не выделяет вставки PHP:

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

В чем может быть причина?


Обновить

Ну, я был слишком наивен, чтобы ожидать, что приведенное выше определение будет ссылаться на определение языка PHP.По-видимому, чтобы выделить вставки PHP, необходимо скопировать значительную часть правил языка PHP на новый язык. И если я хотел бы также использовать вставки Ruby, то это становится действительно грязным.

Итак, я хотел бы спросить, если можно сослаться (не копировать!) Определения PHP или Ruby из моего нового определения языка (змея). Это сделало бы это понятным и уменьшило бы дублирование.


Update2

По-видимому, это проблема только 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'; },
    );
}

1 ответ1

0

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

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

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

W http://wiki.macromates.com/ Устранение неполадок/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'; },
    );
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .