向 Gedit 添加新语言

向 Gedit 添加新语言

我需要在 Gedit 中添加一种新语言。问题是,它现在包含在Gedit的语言菜单中,但它的语法没有突出显示,并且Gedit无法仅从文件后缀识别语言。

我创建了 .lang 文件和描述 MIME-TYPE 的 XML 文件。

LANG file - /usr/share/gtksourceview-3.0/language-specs/test.lang
MIME-TYPE file - /usr/share/mime/packages/test.xml

创建它们后,我更新了 mime 数据库。

sudo update-mime-database /usr/share/mime

下一步尝试

1)我什至尝试过将test.xml文件复制到/usr/share/mime/applications文件夹而不是/usr/share/mime/packages,但没有效果。

2)我尝试将 mime 类型放入/etc/mime.typesas

text/x-test test

它也没有效果。


测试语言

<?xml version="1.0" encoding="UTF-8"?>
<language id="test" _name="Test" version="1.0" _section="Source">
    <metadata>
        <property name="mimetypes">text/x-test</property>
        <property name="globs">*.test</property>
        <property name="line-comment-start">//</property>
        <property name="block-comment-start">/*</property>
        <property name="block-comment-end">*/</property>
    </metadata>

    <styles>
       <style id="comment" _name="Comment" map-to="def:comment"/>
       <style id="keyword" _name="Keyword" map-to="def:keyword"/>
    </styles>

    <definitions>
        <context id="if0-comment" style-ref="comment">
          <start>\%{preproc-start}if\b\s*0\b</start>
          <end>\%{preproc-start}(endif|else|elif)\b</end>
          <include>
            <context id="if-in-if0">
              <start>\%{preproc-start}if(n?def)?\b</start>
              <end>\%{preproc-start}endif\b</end>
              <include>
                <context ref="if-in-if0"/>
                <context ref="def:in-comment"/>
              </include>
            </context>
            <context ref="def:in-comment"/>
          </include>
        </context>

        <context id="keywords" style-ref="keyword">
            <keyword>hello</keyword>
            <keyword>hi</keyword>
        </context>

        <!--Main context-->
        <context id="test">
            <include>
                <context ref="if0-comment"/>
                <context ref="keywords"/>
            </include>
        </context>

    </definitions>
</language>

测试.xml

<?xml version="1.0" encoding="utf-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info" >
  <mime-type type="text/x-test">
    <sub-class-of type="text/plain"/>
    <comment xml:lang="en">TEST language document</comment>
    <comment xml:lang="cs">Dokument v jazyce TEST</comment>
    <glob pattern="*.test"/>
  </mime-type>
</mime-info>

答案1

终于我想通了。根据GTK 语言参考 version标签中的属性<language>应该是2.0.它确实有效。

所以,正确的<language>标签是这样的:

<language id="test" _name="Test" version="2.0" _section="Source">

相关内容