Geditからハイライトファイルを変更しようとしています。エディターがステートメントをコメントとして受け取るケースを変更したいので、ファイル/usr/share/gtksourceview-3.0/language-specs/fortran.langを変更しました。私が抱えている問題は、新しい強調表示スキームを選択しても、何も強調表示されず、プレーンテキストのままになることです。
ファイルfortran.langはsu権限で開かれ、すべてを新しいGeditファイルにコピーして貼り付け、後で同じフォルダーにfortran_enhanced.langとして保存しました。元のファイルに加えた変更は次のとおりです。
元の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>
(...)
変更されたfortran_enhanced.langファイル:
<!-- 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>
(...)
私はこの質問を読みました[ ダミーのためのカスタムgedit構文の強調表示? ]そして私は新しいfortran_enhanced.langファイルをで読めるようにしようとしました
$ cd /usr/share/gtksourceview-3.0/language-specs
$ Sudo chmod 0644 fortran_enhanced.lang
しかし、それは何の違いもありませんでした。
私はこれまでこのようなことをしたことがなく、言語ファイルのほとんども理解していないと言わざるを得ないので、純粋に直感に導かれているので、あらゆる批判を受け入れます。
よろしくお願いします!
私はあなたにとって何が悪かったのかを見つけたと思います:
id
(および_name
) の中に <language ...>
鬼ごっこ。結局のところ、それはあなたが作成する新しいハイライトスキームです。
ただし、このIDが使用されているファイル内の他の場所も変更する必要があります。言語定義のさらに下(質問の引用では省略)では、次のことがわかります。
<context id="fortran" class="no-spell-check">
どうやら、特定のスキームが選択されたときにgedit/GtkSourceViewがそれを使用するように、使用されているすべてのコンテキスト定義を含む/参照する言語と同じIDのコンテキストが必要です。
私はこれの専門家ではありません。私の資格はすべて、以前にXMLファイルを見たことがあるということです;)したがって、「知識に基づいた」推測しかできませんでした。
私をひっくり返したのは、ターミナルウィンドウからgeditを開始したときに表示される警告でした
(gedit:6786):GtkSourceView-警告**: '/ usr/local/share/gtksourceview-3.0/language-specs/frtrn.lang'の読み込みに失敗しました:メイン言語の定義がありません(id = "frtrn")。
(テスト中にID、名前、ファイル拡張子として「frtrn」を使用しました。「fortran_enhanced」と同じ警告が表示されるはずです。 )
これにより、ファイルの残りの部分で元のIDを検索するのに十分な疑いがありました。上記の解決策を試した後、私の説明を裏付ける次の行も見つかりました。
[定義]ここでは、ファイルの先頭に入力するメインコンテキストを定義する必要があります。そのためには、要素のIDと等しいIDを持つタグを使用します[...]
これは、GtkSourceViewドキュメントの 言語定義ファイルチュートリアル からのものです。