3

我正在努力改进UnrealScript的 emacs 主要模式。(许多)怪癖之一是它允许使用这样的语法在虚幻编辑器中指定工具提示:

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

变量声明后的尖括号表示以管道分隔的 Key=Value 元数据对列表,元数据不加引号但可以包含引号——管道 ( |) 或右尖括号 ( >) 表示结束。

有没有办法让emacs语法表以一种有用的方式识别这种上下文相关的语法?我希望在这些变量元数据声明中以某种方式突出显示除了管道和直角括号之外的所有内容,但保留它们的正常突出显示。

现在,单引号字符被设置为引号分隔符(语法指示符"),因此 font-lock-mode 将这样的引号解释为开始一个带引号的字符串,它不在这个非常具体的实例中,所以它会错误地突出显示所有内容,直到它找到另一个据称匹配的单引号。

4

1 回答 1

2

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

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

您可能希望将“Foo”和“Tooltip”之后的“=”字符标记为“通用字符串分隔符”,然后对相应的终止符“|”执行相同操作 和“>”。另一种方法是将“>”之前的字符标记为(关闭)通用字符串分隔符,这样您就可以将“<”和“>”标记为打开和关闭括号。

于 2013-01-22T19:56:10.610 回答