測定のログを保持することを目的とした XML の方言である GEdit の言語定義を次のように作成しました。DocBook 言語定義の修正として作成しました。
ファイル: lcs.lang
<?xml version='1.0' encoding='utf-8'?>
<language id="lcs" _name="LCs" version="2.0" _section="Markup">
<metadata>
<property name="mimetypes">application/lcs+xml</property>
<property name="globs">*.lcs</property>
<property name="block-comment-start"><!--</property>
<property name="block-comment-end">--></property>
</metadata>
<styles>
<style id="header-elements" _name="Header Elements" map-to="def:keyword"/>
<style id="formatting-elements" _name="Formatting Elements" map-to="def:keyword"/>
<style id="structural-elements" _name="Structural Elements" map-to="def:keyword"/>
</styles>
<definitions>
<context id="header-elements" once-only="true" style-ref="header-elements">
<keyword>mt</keyword>
<keyword>la</keyword>
<keyword>ti</keyword>
<keyword>sd</keyword>
<keyword>cd</keyword>
</context>
<context id="formatting-elements" once-only="true" style-ref="formatting-elements">
<keyword>p</keyword>
<keyword>b</keyword>
<keyword>i</keyword>
<keyword>br</keyword>
<keyword>X</keyword>
<keyword>ol</keyword>
<keyword>ul</keyword>
<keyword>li</keyword>
<keyword>h1</keyword>
<keyword>h2</keyword>
<keyword>h3</keyword>
</context>
<context id="structural-elements" once-only="true" style-ref="structural-elements">
<keyword>lcs</keyword>
<keyword>cc</keyword>
<keyword>ls</keyword>
<keyword>le</keyword>
<keyword>da</keyword>
<keyword>un</keyword>
<keyword>re</keyword>
<keyword>co</keyword>
<keyword>ex</keyword>
<keyword>no</keyword>
</context>
<context id="lcs-tags">
<include>
<context ref="header-elements"/>
<context ref="formatting-elements"/>
<context ref="structural-elements"/>
<context ref="xml:element-name" original="true"/>
</include>
</context>
<replace id="xml:element-name" ref="lcs-tags"/>
<context id="lcs">
<include>
<context ref="xml:xml"/>
</include>
</context>
</definitions>
</language>
ご覧のとおり、formatting-elementsという名前のコンテキストがあります。
次に、よく知られている公開ファイルの変更として、構文の強調表示の定義を作成しました。
ファイル: militargreen.xml
<?xml version="1.0" encoding="UTF-8"?>
<style-scheme id="militargreen" _name="MilitarGreen" version="1.0">
<author>Joe Bordello</author>
<_description>Good for XML/PHP at night</_description>
<color name="White" value="#FFFFFF"/>
<color name="BrightGrey" value="#DDDDDD"/>
<color name="Grey" value="#BBBBBB"/>
<color name="Black" value="#000000"/>
<color name="PetrolGrey" value="#669988"/>
<color name="GreenBlack" value="#223322"/>
<color name="GreenGrey" value="#334433"/>
<color name="Green" value="#99EE00"/>
<color name="GreenYellow" value="#CCFF88"/>
<color name="Yellow" value="#FFFF00"/>
<color name="DarkYellow" value="#EEEE66"/>
<color name="Orange" value="#FFCC00"/>
<color name="Blue" value="#99CCFF"/>
<color name="Red" value="#DD2200"/>
<color name="LightRed" value="#EE5533"/>
<color name="BrightRed" value="#EE7766"/>
<color name="Purple" value="#EE99FF"/>
<color name="DeepPurple" value="#DD66EE"/>
<color name="unknown" value="#FF88FF"/>
<style name="text" foreground="White" background="GreenBlack"/>
<style name="selection" foreground="Black" background="Orange"/>
<style name="cursor" foreground="White"/>
<style name="current-line" background="Black"/>
<style name="line-numbers" foreground="Black" background="Grey"/>
<style name="right-margin" background="BrightGrey"/>
<style name="bracket-match" foreground="White" background="Red" bold="true"/>
<style name="search-match" foreground="Black" background="Blue"/>
<style name="def:comment" foreground="BrightGrey" background="GreenGrey" italic="true"/>
<style name="def:note" foreground="LightRed" bold="true" italic="false"/>
<style name="def:preprocessor" foreground="Purple"/>
<style name="def:error" foreground="Yellow" background="Red" bold="true"/>
<style name="def:underlined" underline="false"/>
<style name="def:decimal" foreground="Purple" bold="true"/>
<style name="def:floating-point" foreground="Purple" bold="true"/>
<style name="def:boolean" foreground="Purple" bold="true"/>
<style name="def:base-n-integer" foreground="Blue" bold="true"/>
<style name="def:string" foreground="Green"/>
<style name="def:special-char" foreground="BrightRed" bold="true"/>
<style name="def:identifier" foreground="Blue"/>
<style name="def:keyword" foreground="Orange" bold="true"/>
<style name="def:type" foreground="Orange"/>
<style name="def:statement" foreground="DarkYellow"/>
<style name="def:function" foreground="Blue"/>
<style name="def:shebang" foreground="BrightRed" bold="true"/>
<style name="def:builtin" foreground="Blue" italic="true"/>
<style name="def:constant" foreground="BrightRed" bold="true" italic="true"/>
<style name="def:special-constant" foreground="Blue" italic="true"/>
<style name="bracket-mismatch" background="unknown" italic="true"/>
<style name="def:doc-comment-element" background="unknown" italic="true"/>
<style name="def:complex" background="unknown" italic="true"/>
<style name="def:character" background="unknown" italic="true"/>
</style-scheme>
すべてが期待どおりに機能します。
ここで、「formatting-elements」コンテキストのキーワードで囲まれた文字列 (キーワード自体ではない) が特別な方法でフォーマットされるように、構文定義を変更したいと考えています。
<b>phrase one</b>
GEdit では <b>フレーズ 1 </b> が表示されますが、ステートメントは
<i>phrase two</i>
GEdit では <i>フレーズ 2 </i>が表示されるはずです
このような変更を設定するにはどうすればよいですか?
アップデート
次の方法でファイルを変更しました。
ファイル: lcs.lang
<?xml version='1.0' encoding='utf-8'?>
<language id="lcs" _name="LCs" version="2.0" _section="Markup">
<metadata>
<property name="mimetypes">application/lcs+xml</property>
<property name="globs">*.lcs</property>
<property name="block-comment-start"><!--</property>
<property name="block-comment-end">--></property>
</metadata>
<styles>
<style id="header-elements" _name="Header Elements" map-to="def:keyword"/>
<style id="formatting-elements" _name="Formatting Elements" map-to="def:keyword"/>
<style id="structural-elements" _name="Structural Elements" map-to="def:keyword"/>
<style id="italic-keyword" _name="Italic Keyword" map-to="def:keyword"/>
<style id="bold-keyword" _name="Bold Keyword" map-to="def:keyword"/>
<style id="dimmed-keyword" _name="Dimmed Keyword" map-to="def:keyword"/>
<style id="attrib-name" _name="Attribute Name" map-to="xml:attribute-name"/>
<style id="attrib-value" _name="Attribute Value" map-to="xml:attribute-value"/>
</styles>
<definitions>
<context id="header-elements" once-only="true" style-ref="header-elements">
<keyword>me</keyword>
<keyword>la</keyword>
<keyword>ti</keyword>
<keyword>sd</keyword>
<keyword>cd</keyword>
</context>
<context id="formatting-elements" once-only="true" style-ref="formatting-elements">
<keyword>b</keyword>
<keyword>i</keyword>
<keyword>X</keyword>
<keyword>p</keyword>
<keyword>br</keyword>
<keyword>ol</keyword>
<keyword>ul</keyword>
<keyword>li</keyword>
<keyword>h1</keyword>
<keyword>h2</keyword>
<keyword>h3</keyword>
</context>
<context id="italic-keyword" once-only="true" style-ref="italic-keyword">
<match><i>.*</i></match>
</context>
<context id="bold-keyword" once-only="true" style-ref="bold-keyword">
<match><b>.*</b></match>
</context>
<context id="dimmed-keyword" once-only="true" style-ref="dimmed-keyword">
<match><X>.*</X></match>
</context>
<context id="structural-elements" once-only="true" style-ref="structural-elements">
<keyword>lcs</keyword>
<keyword>co</keyword>
<keyword>le</keyword>
<keyword>le</keyword>
<keyword>da</keyword>
<keyword>un</keyword>
<keyword>re</keyword>
<keyword>co</keyword>
<keyword>ex</keyword>
<keyword>no</keyword>
</context>
<context id="lcs-tags">
<include>
<context ref="header-elements"/>
<context ref="formatting-elements"/>
<context ref="italic-keyword"/>
<context ref="bold-keyword"/>
<context ref="dimmed-keyword"/>
<context ref="structural-elements"/>
<context ref="xml:element-name" original="true"/>
<context ref="xml:attribute-name" original="true"/>
<context ref="xml:attribute-value" original="true"/>
</include>
</context>
<replace id="xml:element-name" ref="lcs-tags"/>
<context id="lcs">
<include>
<context ref="xml:xml"/>
</include>
</context>
</definitions>
</language>
言い換えれば、コンテキストを追加しました:
<context id="italic-keyword" once-only="true" style-ref="italic-keyword">
<match><i>.*</i></match>
</context>
<context id="bold-keyword" once-only="true" style-ref="bold-keyword">
<match><b>.*</b></match>
</context>
<context id="dimmed-keyword" once-only="true" style-ref="dimmed-keyword">
<match><X>.*</X></match>
</context>
次に、構文ファイルを次のように編集しました。
ファイル: militargreen.xml
<?xml version="1.0" encoding="UTF-8"?>
<style-scheme id="militargreen" _name="MilitarGreen" version="1.0">
<author>Joe Bordello</author>
<_description>Good for XML/PHP at night</_description>
<color name="White" value="#FFFFFF"/> <!-- 255 255 255 -->
<color name="BrightGrey" value="#DDDDDD"/> <!-- 221 221 221 -->
<color name="Grey" value="#BBBBBB"/> <!-- 187 187 187 -->
<color name="Black" value="#000000"/> <!-- 0 0 0 -->
<color name="PetrolGrey" value="#669988"/> <!-- 102 153 136 -->
<color name="GreenBlack" value="#223322"/> <!-- 34 51 34 -->
<color name="GreenGrey" value="#334433"/> <!-- 51 68 51 -->
<color name="Green" value="#99EE00"/> <!-- 153 238 0 -->
<color name="GreenYellow" value="#CCFF88"/> <!-- 204 255 136 -->
<color name="Yellow" value="#FFFF00"/> <!-- 255 255 0 -->
<color name="DarkYellow" value="#EEEE66"/> <!-- 238 238 102 -->
<color name="Orange" value="#FFCC00"/> <!-- 255 204 0 -->
<color name="Blue" value="#99CCFF"/> <!-- 153 204 255 -->
<color name="Red" value="#DD2200"/> <!-- 221 34 0 -->
<color name="LightRed" value="#EE5533"/> <!-- 238 85 51 -->
<color name="BrightRed" value="#EE7766"/> <!-- 238 119 102 -->
<color name="Purple" value="#EE99FF"/> <!-- 238 153 255 -->
<color name="DeepPurple" value="#DD66EE"/> <!-- 221 102 238 -->
<color name="unknown" value="#FF88FF"/> <!-- 255 136 255 -->
<style name="text" foreground="White" background="GreenBlack"/>
<style name="selection" foreground="Black" background="Orange"/>
<style name="cursor" foreground="White"/>
<style name="current-line" background="Black"/>
<style name="line-numbers" foreground="Black" background="Grey"/>
<style name="right-margin" background="BrightGrey"/>
<style name="bracket-match" foreground="White" background="Red" bold="true"/>
<style name="search-match" foreground="Black" background="Blue"/>
<style name="def:comment" foreground="BrightGrey" background="GreenGrey" italic="true"/>
<style name="def:note" foreground="LightRed" bold="true" italic="false"/>
<style name="def:preprocessor" foreground="Purple"/>
<style name="def:error" foreground="Yellow" background="Red" bold="true"/>
<style name="def:underlined" underline="false"/>
<style name="def:decimal" foreground="Purple" bold="true"/>
<style name="def:floating-point" foreground="Purple" bold="true"/>
<style name="def:boolean" foreground="Purple" bold="true"/>
<style name="def:base-n-integer" foreground="Blue" bold="true"/>
<style name="def:string" foreground="Green"/>
<style name="def:special-char" foreground="BrightRed" bold="true"/>
<style name="def:identifier" foreground="Blue"/>
<style name="def:keyword" foreground="Orange" bold="true"/>
<!-- LCs specific -->
<style name="lcs:italic-keyword" foreground="Orange" italic="true"/>
<style name="lcs:bold-keyword" foreground="Orange" bold="true"/>
<style name="lcs:dimmed-keyword" foreground="Grey"/>
<style name="def:type" foreground="Orange"/>
<style name="def:statement" foreground="DarkYellow"/>
<style name="def:function" foreground="Blue"/>
<style name="def:shebang" foreground="BrightRed" bold="true"/>
<style name="def:builtin" foreground="Blue" italic="true"/>
<style name="def:constant" foreground="BrightRed" bold="true" italic="true"/>
<style name="def:special-constant" foreground="Blue" italic="true"/>
<style name="bracket-mismatch" background="unknown" italic="true"/>
<style name="def:doc-comment-element" background="unknown" italic="true"/>
<style name="def:complex" background="unknown" italic="true"/>
<style name="def:character" background="unknown" italic="true"/>
</style-scheme>
つまり、スタイル定義を追加しました
<!-- LCs specific -->
<style name="lcs:italic-keyword" foreground="Orange" italic="true"/>
<style name="lcs:bold-keyword" foreground="Orange" bold="true"/>
<style name="lcs:dimmed-keyword" foreground="Grey"/>
しかし、うまくいきません。
どこが私のせいですか?