2014-07-13 20 views
1

我讀「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"; 
} 

回答

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到底。