自定义语法突出显示 gedit 中的不当行为

自定义语法突出显示 gedit 中的不当行为

对于 gedit,我正在为类似标记的语言创建一个自定义语法荧光笔,我创建该语言是为了完成一些自然语言操作,所以我想我应该从简单的关键字开始,因为我不需要来为他们准备正则表达式。

我在 XML 中定义了以下内容:

<language id="foo" _name="Foo" version="2.0" _section="Source">
  <metadata>
    <property name="mimetypes">text/x-c;text/x-csrc;image/x-xpixmap</property>
    <property name="globs">*.foo</property>
  </metadata>

  <styles>
    <style id="operator" _name="Operator" map-to="def:keyword" />
    <style id="member" _name="Member" map-to="def:type" />
  </styles>

  <definitions>

    <context id="members" style-ref="member">
      <keyword>ref</keyword>
      <keyword>alt</keyword>
      <keyword>pos</keyword>
      <keyword>num</keyword>
    </context>

    <context id="operators" style-ref="operator">
      <keyword>#</keyword>
      <keyword>$</keyword>
      <keyword>@</keyword>
      <keyword>[</keyword>
      <keyword>]</keyword>
      <keyword>:</keyword>
      <keyword>=</keyword>
      <keyword>:?</keyword>
      <keyword>&amp;</keyword>
    </context>

    <!--Main context-->
    <context id="opal" class="no-spell-check">
      <include>
        <context ref="members" />
        <context ref="operators" />
      </include>
    </context>

  </definitions>
</language>

语法确实会突出显示,但仅限于某些奇怪的条件。具体来说,上下文中的任何关键字operators前后都必须有非关键字字符,以免无法突出显示。

屏幕截图

我应该使用正则表达式来处理这些问题还是我只是搞砸了 XML?另外,为什么members关键字突出显示没有问题?

相关内容