如何在 Gtk SourceView 中使用自定义语言高亮语法?

How to use custom language highlight syntax in Gtk SourceView?

我正在尝试创建自己的语言定义,并用它来突出显示我的应用程序中的语法。

我遇到的问题是,当尝试从我的应用程序的数据文件夹 (/usr/share/myapp/) 访问语言定义时,即使使用从 /usr/share/gtksourceview-3.0/language-specs/ 复制的 c.lang 文件,也只是为了测试,我在 运行 时间收到此错误:

GtkSourceView-WARNING **: Failed to load '/usr/share/myapp/c.lang': could not find the RelaxNG schema file

所以它要求一些架构文件?所以我继续并从 language-specs 文件夹中复制了每个不是 lang 文件的文件,其中包括:language.dtdlanguage.rnglanguage2.rng

现在,当我再次 运行 时,我得到了这些错误:

GtkSourceView-WARNING **: in file /usr/share/com.github.aleksandar-stefanovic.urmsimulator/c.lang: style 'def:comment' not defined

GtkSourceView-WARNING **: Failed to load '/usr/share/com.github.aleksandar-stefanovic.urmsimulator/c.lang': unable to resolve language 'def'

这到底是什么意思?那是与名称空间相关的东西吗?这是非常奇特的,因为完全相同的文件在 gtksourceview 文件夹中时工作完美。

有线索吗?这些 "RelaxNG" 文件是否只能在其原始目录中工作?如果是这样,我该如何改变呢?我查看了这些文件,但未能找到对其原始文件夹的任何引用...

这是与问题相关的源代码(在 Vala 中):

var manager = Gtk.SourceLanguageManager.get_default ();
string search_paths[] = {"/usr/share/myapp", null};
manager.set_search_path (search_paths);
var buffer = new Gtk.SourceBuffer.with_language (manager.get_language ("c"));

应用程序确实找到了语言 "c",我已经通过调试进行了检查。

添加自己的搜索路径时,必须保留 Gtk.SourceLanguageManager 的原始搜索路径。追加而不是替换它。