1

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

我遇到的问题是,当尝试从我的应用程序的数据文件夹 ( /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”,我已经通过调试进行了检查。

4

1 回答 1

2

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

于 2017-07-10T03:30:36.157 回答