Modificando um arquivo de realce de sintaxe do gedit

9

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

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

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

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 [ Custom gedit Syntax Highlighting for Dummies? ] e eu tentei fazer 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 diferença alguma.

Eu tenho que dizer que eu nunca fiz uma coisa assim antes e eu nem entendo a maior parte do arquivo de linguagem, então estou aberto a todas as críticas, já que eu fui guiado apenas pela intuição.

Obrigado em adiantado!

    
por Oscar Saleta Reig 11.11.2011 / 17:51

1 resposta

4

Acho que descobri o que deu errado para você:

Solução

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

No entanto, você terá que alterar também o outro local no arquivo onde esse id é usado. Mais abaixo na definição da linguagem (omitido na citação da pergunta) você encontra isto:

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

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

Como eu encontrei

Eu não sou de todo um especialista nisso. Toda a minha qualificação é que eu vi arquivos XML antes;) Então eu só poderia fazer palpites "educados".

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

(gedit:6786): GtkSourceView-WARNING **: Failed to load '/usr/local/share/gtksourceview-3.0/language-specs/frtrn.lang': Missing main language definition (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:

[definitions] Here we should define a main context, the one we enter at the beginning of the file: to do so we use the tag, with an id equal to the id of the element [...]

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

    
por 09.04.2012 / 01:31