2012-07-09 62 views
2

我正在为改进emacs主模式UnrealScript而努力。一项所述的(多)怪异的是,它允许语法像这样在虚幻编辑指定工具提示:是否可以根据上下文更改emacs语法表?

var() int MyEditorVar <Foo=Bar|Tooltip=My tooltip text isn't quoted>; 

变量声明后的尖括号表示键=值的元数据对一个管分隔的列表,并元数据未被引用,但可以包含引号 - 管道(|)或右尖括号(>)表示结束。

有没有一种方法可以让emacs语法表以一种有用的方式识别这种依赖于上下文的语法?我希望除了管道和右尖括号之外的所有内容都以某种方式在这些可变元数据声明中突出显示,但保留其正常高亮显示。

现在,单引号字符被设置为引号分隔符(语法标识符"),所以font-lock-mode将这样的引用解释为引用一个带引号的字符串,它不在这个特定的实例中,所以它一切都很好,直到找到另一个可能匹配的单引号。

+0

你使用什么主要模式? – Thomas 2012-07-11 05:46:43

+0

@Thomas:[This major mode](http://badbyteblues.blogspot.com/2010/12/unrealscript-mode-for-emacs-reloaded.html),以及一些修改(额外的关键字等)。 – 2012-07-17 13:32:58

回答

2

您需要设置一个syntax-propertize-function,它允许您将不同的语法指示符应用于缓冲区中的不同字符,具体取决于其上下文。

Grep for syntax-propertize-function在Emacs的lisp目录中看到各种示例(从简单到非常复杂的示例)。

您可能希望在您的“Foo”之后和“Tooltip”之后将“=”字符标记为“通用字符串分隔符”,然后执行相应的终止“|”和“>”。另一种方法是将“>”之前的字符标记为(关闭)通用字符串分隔符,以便您可以将“<”和“>”标记为开放的&关闭元素。

相关问题