我正在尝试创建自己的语言定义,并将其用于突出显示我的应用程序中的语法。
我遇到的问题是,当尝试从我的应用程序的数据文件夹 ( /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.dtd
:language.rng
和language2.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”,我已经通过调试进行了检查。