2010-06-03 6 views
0

J'essaie de mettre en évidence une langue personnalisée dans TextMate. Cependant, la définition suivante ne met pas en évidence des insertions PHP (je sélectionner pour mes fichiers * .serpent):Impossible de mettre en surbrillance la syntaxe personnalisée dans TextMate

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

Si je sélectionne le langage PHP, alors les parties PHP sont mises en évidence.

Quelle peut être la raison? Cela devrait-il fonctionner? Je considérais également les insertions ruby ​​avec <%%> délimiteurs, mais cela ne fonctionne pas avec la configuration la plus simple.


Mise à jour

Apparemment, il est une question de PHP uniquement. La définition de langue suivante met en évidence les langues Ruby et Serpent dans mon texte, mais pas les insertions PHP! Quel est le problème ici?

{ 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'; }, 
    ); 
} 

Je l'ai fait travailler en remplaçant source.php aveC#language dans mes motifs et en copiant le référentiel du langage PHP.

Répondre

0

Le ven 9 Jul 2010 à 08:02, Allan Odgaard a écrit:

Nous avons fait la grammaire PHP lui-même correspond la construction, donc avec votre grammaire , ces bits ont été consommé par la grammaire incluse, et la grammaire PHP incluse sera donc un no-op.

La raison pour laquelle nous l'avons fait de cette façon était si que la grammaire PHP peut trier du travail lorsqu'il est utilisé comme la grammaire racine, car beaucoup d'utilisateurs insistent pour utiliser cette façon, en dépit de notre efforts¹ pour éduquer ;)

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

Avec l'aide de Dieu, je compris mon erreur et a pu faire un travail (au moins mise en évidence) la définition:

{ 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'; }, 
    ); 
} 
+0

Il y avait un code qui ne fonctionnait pas pendant un moment, mais il a été corrigé. – Andrei

Questions connexes