Modificación de un archivo de resaltado de sintaxis gedit

9

Estoy tratando de cambiar un archivo de resaltado de Gedit. He modificado el archivo /usr/share/gtksourceview-3.0/language-specs/fortran.lang porque quiero cambiar los casos en los que el editor toma una declaración como comentario. El problema que tengo es que cuando elijo el nuevo esquema de resaltado, nada destaca, simplemente permanece como texto sin formato.

El archivo fortran.lang se abrió con permisos su y simplemente copié y pegué todo en un nuevo archivo Gedit y luego lo guardé como fortran_enhanced.lang en la misma carpeta. Los cambios que he realizado en el archivo original son estos:

Archivo original 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>
(...)

Archivo fortran_enhanced.lang modificado:

                     <!-- 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>
(...)

He leído esta pregunta [ resaltado de sintaxis gedit personalizado para tontos? ] e intenté hacer que el nuevo archivo fortran_enhanced.lang sea legible con

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

Pero no hizo ninguna diferencia.

Tengo que decir que nunca antes había hecho algo como esto y ni siquiera entiendo la mayor parte del archivo de idioma, por lo que estoy abierto a todas las críticas, ya que me ha guiado puramente la intuición.

¡Gracias por adelantado!

Oscar Saleta Reig
fuente
Abajo en la parte inferior de tu publicación que dijiste cd /usr/share/gtksourceview-3.0/language-specs. ¿Es ese el comando real que ejecutaste? Si es así, solo necesita mover el archivo a /usr/local/share/gtksourceview-3.0/language-specs.
evan.bovie
@ emb1995 He copiado la carpeta gtksourceview-3.0 a / usr / local / share como usted sugirió (digo copiado porque la carpeta estaba ubicada en / usr / share / en mi computadora). De todos modos, eso no pareció funcionar para mí, todavía recibo texto sin formato cuando elijo el nuevo archivo de resaltado en gedit :(
Oscar Saleta Reig

Respuestas:

4

Creo que descubrí lo que salió mal para ti:

Solución

Es bueno y correcto que haya cambiado el id(y _name) en la <language ...>etiqueta. Después de todo, es un nuevo esquema de resaltado que creas.

Sin embargo, debe cambiar también el otro lugar del archivo donde se usa esta identificación. Más abajo en la definición del lenguaje (omitido en la cita de la pregunta) encontrará esto:

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

Aparentemente, debe tener un contexto con la misma identificación que su idioma que incluye / hace referencia a todas las definiciones de contexto utilizadas, para que gedit / GtkSourceView lo use cuando se elija un esquema específico.

Como lo encontre

No soy en absoluto un experto en esto. Toda mi calificación es que he visto archivos XML antes;) Así que solo pude hacer conjeturas "educadas".

Lo que me avisó fue una advertencia que se muestra al iniciar gedit desde una ventana de terminal

(gedit: 6786): GtkSourceView-WARNING **: Error al cargar '/usr/local/share/gtksourceview-3.0/language-specs/frtrn.lang': Falta la definición del idioma principal (id = "frtrn".)

(Utilicé " frtrn " como id, nombre y extensión de archivo durante las pruebas, debería recibir la misma advertencia con " fortran_enhanced ")

Esto me hizo sospechar lo suficiente como para buscar la identificación original en el resto del archivo. Después de probar la solución anterior, también encontré la siguiente línea para respaldar mi explicación:

[definiciones] Aquí deberíamos definir un contexto principal, el que ingresamos al principio del archivo: para ello usamos la etiqueta, con una identificación igual a la identificación del elemento [...]

Es del tutorial del archivo de definición de idioma en la documentación de GtkSourceView.

zpea
fuente