我正在为UnrealScript改进emacs主模式。其中一个(许多)怪癖是,它允许在虚幻编辑器中指定工具提示的语法如下:
var() int MyEditorVar <Foo=Bar|Tooltip=My tooltip text isn't quoted>;
变量声明后的尖括号表示Key=Value元数据对的管道分隔列表,元数据不带引号,但可以包含引号——管道(|
)或直角括号(>
)表示结束。
有没有一种方法可以让emacs语法表以一种有用的方式识别这种依赖上下文的语法?我希望除了管道和直角括号之外的所有内容都能在这些变量元数据声明中以某种方式突出显示,但在其他方面保持正常的突出显示。
现在,单引号字符被设置为引号分隔符(语法指示符"
),因此字体锁定模式将这样的引号解释为开始一个带引号的字符串,而这在这个非常特定的实例中并不存在,因此它会错误地高亮显示所有内容,直到找到另一个据称匹配的单引号。
您需要设置一个syntax-propertize-function
,它允许您根据上下文将不同的语法指示符应用于缓冲区中的不同字符。
在Emacs的lisp目录中为syntax-propertize-function
进行Grep,以查看各种示例(从简单到相当复杂的示例)。
您可能希望将"Foo"one_answers"Tooltip"之后的"="字符标记为"通用字符串分隔符",然后对相应的终止"|"one_answers">"执行相同操作。另一种选择是将">"之前的字符标记为(结束)通用字符串分隔符,这样您就可以将"<"one_answers">"标记为open&关闭parens。