Modifica di un file di evidenziazione della sintassi gedit


9

Sto cercando di cambiare un file di evidenziazione da Gedit. Ho modificato il file /usr/share/gtksourceview-3.0/language-specs/fortran.lang perché voglio cambiare i casi in cui l'editor prende una dichiarazione come commento. Il problema che ho è che quando scelgo il nuovo schema di evidenziazione nulla evidenzia, rimane solo come testo semplice.

Il file fortran.lang è stato aperto con le autorizzazioni su e ho appena copiato e incollato tutto in un nuovo file Gedit e successivamente salvato come fortran_enhanced.lang nella stessa cartella. Le modifiche che ho apportato al file originale sono queste:

File originale fortran.lang:

<language id="fortran" _name="Fortran 95" version="2.0" _section="Sources">
  <metadata>
    <property name="mimetypes">text/x-fortran</property>
    <property name="globs">*.f;*.f90;*.f95;*.for</property>
    <property name="line-comment-start">!</property>
  </metadata>
  <styles>
    <style id="comment" _name="Comment" map-to="def:comment"/>
    <style id="floating-point" _name="Floating Point" map-to="def:floating-point"/>
    <style id="keyword" _name="Keyword" map-to="def:keyword"/>
    <style id="intrinsic" _name="Intrinsic function" map-to="def:builtin"/>
    <style id="boz-literal" _name="BOZ Literal" map-to="def:base-n-integer"/>
    <style id="decimal" _name="Decimal" map-to="def:decimal"/>
    <style id="type" _name="Data Type" map-to="def:type"/>
  </styles>
  <default-regex-options case-sensitive="false"/>
  <definitions>
    <!-- Note: contains an hack to avoid considering ^COMMON a comment -->
    <context id="line-comment" style-ref="comment" end-at-line-end="true" class="comment" class-disabled="no-spell-check">
      <start>!|(^[Cc](\b|[^OoAaYy]))</start>
      <include>
        <context ref="def:escape"/>
        <context ref="def:in-line-comment"/>
      </include>
    </context>
(...)

File fortran_enhanced.lang modificato:

                     <!-- Note: changed language id and name -->
<language id="fortran_enhanced" _name="Fortran 95 2.0" version="2.0" _section="Sources">
  <metadata>
    <property name="mimetypes">text/x-fortran</property>
                     <!-- Note: removed *.f and *.for from file extensions -->
    <property name="globs">*.f90;*.f95;</property>
    <property name="line-comment-start">!</property>
  </metadata>
  <styles>
    <style id="comment" _name="Comment" map-to="def:comment"/>
    <style id="floating-point" _name="Floating Point" map-to="def:floating-point"/>
    <style id="keyword" _name="Keyword" map-to="def:keyword"/>
    <style id="intrinsic" _name="Intrinsic function" map-to="def:builtin"/>
    <style id="boz-literal" _name="BOZ Literal" map-to="def:base-n-integer"/>
    <style id="decimal" _name="Decimal" map-to="def:decimal"/>
    <style id="type" _name="Data Type" map-to="def:type"/>
  </styles>
  <default-regex-options case-sensitive="false"/>
  <definitions>
                     <!-- Note: I want comments only beginning with !, not C -->
    <context id="line-comment" style-ref="comment" end-at-line-end="true" class="comment" class-disabled="no-spell-check">
      <start>!</start>
      <include>
        <context ref="def:escape"/>
        <context ref="def:in-line-comment"/>
      </include>
    </context>
(...)

Ho letto questa domanda [ Evidenziazione della sintassi gedit personalizzata per i manichini? ] e ho provato a rendere leggibile il nuovo file fortran_enhanced.lang con

$ cd /usr/share/gtksourceview-3.0/language-specs
$ sudo chmod 0644 fortran_enhanced.lang

ma non ha fatto alcuna differenza.

Devo dire che non ho mai fatto una cosa del genere prima e non capisco nemmeno la maggior parte del file della lingua, quindi sono aperto a tutte le critiche, poiché sono stato guidato esclusivamente dall'intuizione.

Grazie in anticipo!


In fondo al tuo post hai detto cd /usr/share/gtksourceview-3.0/language-specs. È questo il vero comando che hai eseguito? In tal caso, è sufficiente spostare il file in /usr/local/share/gtksourceview-3.0/language-specs.
evan.bovie,

@ emb1995 Ho copiato la cartella gtksourceview-3.0 in / usr / local / share come mi hai suggerito (dico copiato perché la cartella si trovava in / usr / share / nel mio computer). Ad ogni modo, ciò non sembrava funzionare per me, ricevo ancora testo in chiaro quando scelgo il nuovo file di evidenziazione in gedit :(
Oscar Saleta Reig,

Risposte:


4

Penso di aver scoperto cosa è andato storto per te:

Soluzione

È buono e giusto, che hai cambiato il id(e _name) nel <language ...>tag. Dopotutto è un nuovo schema di evidenziazione che crei.

Tuttavia, è necessario modificare anche l'altra posizione nel file in cui viene utilizzato questo ID. Più in basso nella definizione della lingua (omessa nella citazione nella domanda) trovi questo:

<context id="fortran" class="no-spell-check">

Apparentemente, devi avere un contesto con lo stesso ID della tua lingua che includa / riferisca tutte le definizioni di contesto utilizzate, in modo che gedit / GtkSourceView lo usi quando viene scelto uno schema specifico.

Come l'ho trovato

Non sono affatto un esperto in questo. Tutta la mia qualifica è che ho visto prima i file XML;) Quindi ho potuto solo fare ipotesi "istruite".

Ciò che mi ha lasciato fuori è stato un avvertimento mostrato all'avvio di gedit da una finestra del terminale

(gedit: 6786): GtkSourceView-WARNING **: Impossibile caricare '/usr/local/share/gtksourceview-3.0/language-specs/frtrn.lang': Definizione lingua principale mancante (id = "frtrn").

(Ho usato " frtrn " come id, nome ed estensione del file durante il test, dovresti ricevere lo stesso avviso con " fortran_enhanced ")

Questo mi ha reso abbastanza sospettoso da cercare l'ID originale nel resto del file. Dopo aver provato la soluzione sopra ho anche trovato la seguente riga per supportare la mia spiegazione:

[definizioni] Qui dovremmo definire un contesto principale, quello che inseriamo all'inizio del file: per fare ciò usiamo il tag, con un id uguale all'id dell'elemento [...]

Viene dal tutorial del file di definizione della lingua nella documentazione di GtkSourceView.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.