我正致力于改进UnrealScript的emacs主要模式。其中一个(很多)怪癖是它允许这样的语法在虚幻编辑器中指定工具提示:
var() int MyEditorVar <Foo=Bar|Tooltip=My tooltip text isn't quoted>;
变量声明后的尖括号表示以管道分隔的Key = Value元数据对列表,并且元数据未引用但可以包含引号 - 管道(|
)或右尖括号( >
)表示结束。
有没有办法让emacs语法表以有用的方式识别这种依赖于上下文的语法?我希望除了管道和直角括号之外的所有内容都以某种方式在这些可变元数据声明中突出显示,但在其他方面保留它们的正常突出显示。
现在,单引号字符被设置为引用分隔符(语法指示符"
),因此font-lock-mode将这样的引用解释为启动引用的字符串,它不在此处特定的实例,所以它会发现所有内容,直到找到另一个所谓的匹配单引号。
答案 0 :(得分:2)
您需要设置一个syntax-propertize-function
,它允许您将不同的语法指示符应用于缓冲区中的不同字符,具体取决于其上下文。
在Emacs的lisp目录中为syntax-propertize-function
grep查看各种示例(从简单到非常复杂的示例)。
您可能希望在“Foo”之后和“Tooltip”之后标记“=”字符作为“通用字符串分隔符”,然后对相应的终止“|”执行相同操作和“&gt;”。另一种方法是在“&gt;”之前标记字符。作为(结束)通用字符串分隔符,以便您可以标记“&lt;”和“&gt;”作为开放和封闭的parens。