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

时间:2017-07-05 14:16:40

标签: gtk gtk3 gtksourceview

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

我遇到的问题是,尝试从我应用的数据文件夹(/usr/share/myapp/)访问语言定义时,甚至使用从c.lang复制的/usr/share/gtksourceview-3.0/language-specs/文件,只是为了测试,我在运行时得到这个错误:

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",我已通过调试进行检查。

1 个答案:

答案 0 :(得分:2)

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