【发布时间】:2013-08-08 00:15:45
【问题描述】:
我正在尝试为主要模式设置字体锁定。下面是一些示例代码:
USING: foo bar bar ;
IN: fuelcolors
TUPLE: font < super-class
name
size
bold?
italic?
{ foreground initial: COLOR: black }
{ background initial: COLOR: white } ;
TUPLE: rgb red green blue ;
: foobar ( seq -- seq )
hello there { 1 2 3 } ;
以下符号应该用一些面孔突出显示(没关系,我的问题是匹配部分):名称,大小,粗体?,斜体?,前景,背景,红色,绿色,蓝色。它们代表元组中槽的名称。
我知道正则表达式不会这样做,因为匹配的区域不是连续的。斜体?和前景应该匹配,但 不是 这些符号之间的 { 字符。因此,我认为我可以编写一个字体锁定匹配器功能,类似于 Dmitri 在这里提供的功能:Context-sensitive font-locking in emacs 用于非常相似的问题。
但是,他的解决方案利用了这样一个事实,即要突出显示的项目的“序列”在括号内,而这里不是这种情况。
Font-lock 在此类情况下会遇到麻烦 (Unknown number of matches in regex and font-lock),但我仍然希望有一些“足够好”的解决方案,即使它需要破解 font-lock 内部结构。
【问题讨论】:
-
我不明白应该遵循什么规则。例如。为什么不
bar,foo,fuelcolors,...? -
只有
TUPLE: .... ;表达式中的单词应该被突出显示。
标签: regex emacs elisp syntax-highlighting font-lock