Modificando um arquivo de destaque de sintaxe do gedit


9

Estou tentando alterar um arquivo de destaque do Gedit. Modifiquei o arquivo /usr/share/gtksourceview-3.0/language-specs/fortran.lang porque quero alterar os casos em que o editor faz uma declaração como comentário. O problema que tenho é que, quando escolho o novo esquema de destaque, nada destaca, ele permanece como texto simples.

O arquivo fortran.lang foi aberto com permissões su e apenas copiei tudo em um novo arquivo do Gedit e depois salvei como fortran_enhanced.lang na mesma pasta. As alterações que fiz no arquivo original são estas:

Arquivo fortran.lang original:

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

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

Eu li esta pergunta [ Destaque personalizado da sintaxe do gedit para manequins? ] e tentei tornar o novo arquivo fortran_enhanced.lang legível com

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

mas não fez nenhuma diferença.

Devo dizer que nunca fiz algo assim antes e nem sequer entendo a maior parte do arquivo de idiomas, por isso estou aberto a todas as críticas, pois fui guiado puramente pela intuição.

Agradeço antecipadamente!


No final da sua postagem, você disse cd /usr/share/gtksourceview-3.0/language-specs. Esse é o comando que você executou? Se for, você só precisa mover o arquivo para /usr/local/share/gtksourceview-3.0/language-specs.
evan.bovie

@ emb1995 Copiei a pasta gtksourceview-3.0 para / usr / local / share como você sugeriu (digo copiada porque a pasta estava localizada em / usr / share / no meu computador). De qualquer forma, isso não parece trabalhar para mim, eu ainda recebo texto simples quando escolher o novo arquivo de destaque no gedit :(
Oscar Saleta Reig

Respostas:


4

Acho que descobri o que deu errado para você:

Solução

É bom e correto que você alterou o id(e _name) na <language ...>tag. Afinal, é um novo esquema de destaque que você cria.

No entanto, você também precisará alterar o outro local no arquivo em que esse ID é usado. Mais abaixo na definição de idioma (omitida na citação na pergunta), você encontra o seguinte:

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

Aparentemente, você precisa ter um contexto com o mesmo ID da sua linguagem, incluindo / fazendo referência a todas as definições de contexto usadas, para que o gedit / GtkSourceView o use quando um esquema específico for escolhido.

Como eu o encontrei

Não sou especialista nisso. Toda a minha qualificação é que eu já vi arquivos XML antes;) Então, eu só podia fazer suposições "educadas".

O que me deu uma dica foi um aviso exibido ao iniciar o gedit a partir de uma janela do terminal

(gedit: 6786): GtkSourceView-WARNING **: falha ao carregar '/usr/local/share/gtksourceview-3.0/language-specs/frtrn.lang': falta de definição de idioma principal (id = "frtrn".)

(Eu usei " frtrn " como id, nome e extensão de arquivo durante o teste, você deve receber o mesmo aviso com " fortran_enhanced ")

Isso me deixou desconfiado o suficiente para procurar o ID original no restante do arquivo. Depois de experimentar a solução acima, também encontrei a seguinte linha para apoiar minha explicação:

[definições] Aqui devemos definir um contexto principal, o que inserimos no início do arquivo: para isso, usamos a tag, com um id igual ao id do elemento [...]

É do tutorial do arquivo de definição de idioma na documentação do GtkSourceView.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.