令牌的merge参数有什么作用?

时间:2014-04-15 13:38:27

标签: ace-editor

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 : ".+"
    } ]
}; 

1 个答案:

答案 0 :(得分:3)

通过反复试验找出:在令牌中将merge属性设置为true将导致令牌与跟随令牌合并,两者都在令牌中在内存中列出并在UI DOM中作为呈现的span列出,但仅当以下标记也评估为相同的标记类型时。我使用它来合并复合SQL令牌IS NULLIS NOT NULL

在以下规则中,3个令牌[is +(空格)+ null]或5个令牌[is +(空格)+ not + (空格)+ null]将合并为单个标记。如果is后跟notnull之外的其他内容,那么该内容将被标记为无效。它不会被合并,因为即使前一个标记仍处于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"
        }
    ]
};