web-dev-qa-db-fra.com

Comment ajouter une nouvelle définition de langage pour la coloration syntaxique dans Gedit?

J'ai essayé de créer un nouveau fichier .lang pour que Gedit reconnaisse le langage de programmation Julia . J'ai lu le tutoriel , le document de référence et la page wiki Gedit/NewLanguage , et je crois que le fichier est correct. Cependant, lors du redémarrage de gedit après avoir copié le nouveau fichier Julia.lang dans /usr/share/gtksourceview-3.0/language-specs/, , un fichier .jl est effectivement reconnu et le menu de coloration syntaxique est défini sur Julia, mais non. la surbrillance réelle se produit.

Pensant que j'aurais peut-être mal agi, j'ai plutôt essayé d'utiliser un fichier de langue existant, pour une langue similaire ( Matlab ), et je n'ai modifié que les métadonnées d'en-tête:

<language id="Julia" _name="Julia" version="2.0" _section="Scientific">
  <metadata>
    <property name="mimetypes">text/x-Julia;application/x-Julia</property>
    <property name="globs">*.jl</property>
    <property name="line-comment-start">#</property>
  </metadata>

Tout le reste a été conservé tel quel, et j'ai enregistré le fichier sous le nom Julia.lang. Néanmoins, lors de la réouverture de gedit, le même problème se produit. De plus, si je sélectionne l'entrée Matlab dans le menu de coloration syntaxique, le formatage est effectué correctement (selon les règles de Matlab), même si matlab.lang et Julia.lang ont exactement les mêmes définitions de syntaxe!

Que pourrais-je faire de mal? Ce gars semblait avoir le même problème, mais il n'a jamais été révélé dans ce fil comment il l'a résolu (s'il l'avait jamais fait). Des idées?


Mise à jour : mon erreur était de ne pas changer l'identificateur de contexte, comme l'a souligné @carandraug dans sa réponse. Cependant, j’ai eu d’autres problèmes que je mentionnerai ici au cas où ils aideraient quelqu'un:

  1. J'ai réutilisé la définition "Shell-like-comment" de def.lang pour les commentaires monolignes de Julia, mais cela me rapportait beaucoup d'erreurs. Il s'avère que lorsqu'un contexte de référence est utilisé, l'attribut id ne peut pas être défini. En passant de <context id="comment" ref="def:Shell-like-comment" /> à <context ref="def:Shell-like-comment" />, les erreurs ont disparu. Je pense que le document de référence (ainsi que le didacticiel) devrait mentionner cette mise en garde. J'ai édité le page wiki pour le signaler.
  2. Avant de comprendre le problème avec le contexte des commentaires, j'ai commenté sa définition, mais j'ai commencé à obtenir une erreur "style 'def: string' non définie". Lorsque j'ai décommenté la définition, cette erreur a disparu. Je ne suis pas sûr de ce qui l’a causé au départ (étant donné qu’un <style id="string"> a bien été défini dans def.lang). Toutes les clarifications à ce sujet sont les bienvenues dans les commentaires :-)

Une dernière suggestion à tous ceux qui développent de nouvelles langues surlignent les définitions de gedit: n'oubliez pas de lancer gedit depuis la ligne de commande et de regarder la sortie de la console!

4
waldyrious

Je ne sais pas pourquoi votre fichier Julia.lang original ne fonctionne pas car vous ne montrez pas le code source, mais celui sur lequel vous vous êtes fondé matlab.lang ne fonctionnera pas car il n'y a pas de contexte à l'intérieur de <definitions> avec le même id que vous avez mentionné pour <language>.

Fondamentalement, vous dites que la id de ce langage est Julia, mais il n'y a pas de contexte dans lequel cette id est définie. Recherchez donc <context id="matlab" ( ligne 149 du HEAD actuel ) et remplacez-le par Julia.

Un fichier lang est généralement organisé en un ensemble de contextes individuels pour les fonctionnalités de langage mises en surbrillance, qui sont ensuite regroupés dans un bloc principal avec le même id que le langage et des références aux autres contextes.

2
carandraug