在ACE overview on creating syntax highlighters的“定义状态&#39”部分下,令牌定义包含参数merge: true
。但我无法找到解释这是什么的解释。它的目的是什么?
摘自示例:
this.$rules = {
"start" : [ {
token : "text",
merge : true,
regex : "<\\!\\[CDATA\\[",
next : "cdata"
},
"cdata" : [ {
token : "text",
regex : "\\]\\]>",
next : "start"
}, {
token : "text",
merge : true,
regex : "\\s+"
}, {
token : "text",
merge : true,
regex : ".+"
} ]
};
答案 0 :(得分:3)
通过反复试验找出:在令牌中将merge
属性设置为true
将导致令牌与跟随令牌合并,两者都在令牌中在内存中列出并在UI DOM中作为呈现的span
列出,但仅当以下标记也评估为相同的标记类型时。我使用它来合并复合SQL令牌IS NULL
和IS NOT NULL
:
在以下规则中,3个令牌[is
+(空格)+ null
]或5个令牌[is
+(空格)+ not
+ (空格)+ null
]将合并为单个标记。如果is
后跟not
或null
之外的其他内容,那么该内容将被标记为无效。它不会被合并,因为即使前一个标记仍处于merge
模式,下一个标记的结果标记类(invalid
)也不同。
this.$rules = {
"start": [{
token : "keyword.operator",
regex: "[iI][sS]\\b",
merge: true,
next: "is_keyword"
}],
"is_keyword": [
{
token: "keyword.operator",
regex: "\\s+",
merge: true
}, {
token: "keyword.operator",
regex: "[nN][oO][tT]\\b",
merge: true
}, {
token: "keyword.operator",
regex: "[nN][uU][lL][lL]\\b",
next: "start"
}, {
token: "invalid",
regex: ".+",
next: "start"
}
]
};