Как изменить параметры форматирования для одного < ключевого слова > в определении подсветки синтаксиса для GEdit?

Что я сделал

Я сделал следующее определение языка для GEdit, диалекта XML, предназначенного для ведения журнала измерений. Я сделал это как модификацию определения языка 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">&lt;!--</property>
    <property name="block-comment-end">--&gt;</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 .

Затем я сделал определение подсветки синтаксиса, как модификацию общедоступного файла.

Файл: militaryargreen.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 > фраза первая / lt; / b & gt ;, тогда как оператор

<i>phrase two</i>

в GEdit должно появиться & it; фраза 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">&lt;!--</property>
    <property name="block-comment-end">--&gt;</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>&lt;i&gt;.*&lt;/i&gt;</match>
    </context>

    <context id="bold-keyword" once-only="true" style-ref="bold-keyword">
      <match>&lt;b&gt;.*&lt;/b&gt;</match>
    </context>

    <context id="dimmed-keyword" once-only="true" style-ref="dimmed-keyword">
      <match>&lt;X&gt;.*&lt;/X&gt;</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>&lt;i&gt;.*&lt;/i&gt;</match>
</context>

<context id="bold-keyword" once-only="true" style-ref="bold-keyword">
  <match>&lt;b&gt;.*&lt;/b&gt;</match>
</context>

<context id="dimmed-keyword" once-only="true" style-ref="dimmed-keyword">
  <match>&lt;X&gt;.*&lt;/X&gt;</match>
</context>

Затем я отредактировал файл синтаксиса следующим образом:

Файл: militaryargreen.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"/>

, но это не работает.

Где это может быть моя вина?

0
задан 24 August 2019 в 18:52

0 ответов

Другие вопросы по тегам:

Похожие вопросы: