我试图为主要模式设置字体锁定。这是一些示例代码:
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 for a very similar question。
但是事实上,他的解决方案利用了要突出显示的项目的“序列”在括号内的事实,而这里不是这种情况。
字体锁定在此类情况下存在问题(正则表达式和字体锁定中的匹配数未知),但我仍然希望有一些“足够好”的解决方案,即使它需要破解字体锁定内部结构。