Problema ao criar um realce de sintaxe personalizado no TextMate. Socorro!

1

Estou tentando destacar um idioma personalizado no TextMate. No entanto, a seguinte definição não destaca as inserções do PHP:

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

Qual pode ser o motivo?

Atualizar

Bem, eu era ingênuo demais para esperar que a definição acima se referisse à definição da linguagem PHP. Aparentemente, para destacar inserções do PHP, é preciso copiar uma parte significativa das regras da linguagem PHP para a nova língua. E se eu gostaria de usar inserções Ruby também, então fica muito confuso.

Então, eu gostaria de perguntar se é possível REFERIR (NÃO copiar!) definições de PHP ou Ruby da minha nova definição de linguagem (serpent). Isso deixaria claro e reduziria a duplicação.

Update2

Aparentemente, é apenas uma questão do PHP. A seguinte definição de idioma destaca as linguagens Ruby e Serpent no meu texto, mas não as inserções do PHP! O que diabos está errado aqui?

{   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'; },
    );
}
    
por Andrei 29.06.2010 / 14:33

1 resposta

0

On Fri, Jul 9, 2010 at 08:02, Allan Odgaard wrote:

We made the PHP grammar itself match the construct, so with your grammar, those bits have been consumed by the including grammar, and the included PHP grammar will therefor be a no-op.

The reason we made it this way was so that the PHP grammar can sort of work when used as the root grammar, since lots of users insist on using it that way, despite our efforts¹ to educate ;)

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

Com a ajuda de Deus, entendi meu erro e consegui fazer uma definição de trabalho (pelo menos destacando!):

{   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'; },
    );
}
    
por 09.07.2010 / 20:28