我读了“Creating a new Edit Mode”。但是在某些模式下,我可以看到使用push: 'something'
和next: 'pop'
的代码,这些代码似乎没有在那里记录。示例(来自another answer的代码):
{ token: 'string.begin.vcl', regex: '\\[', push: "string" },
{ token: 'string.end.vcl', regex: '\\]', next: 'pop' },
是否有push
/ pop
周围的任何文档?
push: "string"
是否等同于以下代码?
onMatch: function(_, state, stack) {
stack.unshift("string");
this.next = "string";
}
答案 0 :(得分:3)
AFAIK他们没有在任何地方记录。推送相当于
next: function(currentState, stack) {
if (currentState != "start" || stack.length)
stack.unshift(this.nextState, currentState);
return this.nextState;
}
并弹出
next: function(currentState, stack) {
stack.shift();
return stack.shift() || "start";
};
https://github.com/ajaxorg/ace/blob/v1.1.4/lib/ace/mode/text_highlight_rules.js#L112-L121 https://github.com/ajaxorg/ace/blob/v1.1.4/lib/ace/mode/text_highlight_rules.js#L164
在您的示例中,onMatch最终需要return this.token
。