2013-04-13 67 views
0

我正在爲CodeMirror編寫一個上下文無關的分析器,該解析器一次解析代碼一個字符,並根據所採用的狀態轉換輸出樣式。該代碼使用換行符\ n來觸發狀態轉換,但CodeMirror似乎將這些從輸入文本中去除(console.log(char ==='\ n')總是返回false)CodeMirror中的換行符

無論如何,配置CodeMirror給我\ n的輸入?文件似乎沒有提到這個問題。

我的狀態對象的格式如下

{ 
    state1: { 
     active: true, 
     edges: { 
      '\n': 'state2' 
     } 
    }, 
    state2: { 
     active: false, 
     edges: { 
      '#': 'state1' 
     } 
    } 
} 

如果需要任何額外的信息或澄清,讓我知道

回答

2

console.log (char === '\n')總是返回false並不一定意味着CodeMirror條換行符 - 文本按原樣傳遞,即\n將作爲兩個字符傳遞 - \n

嘗試和利用token方法在你的方式來檢測\n流中:

var newLine = '\\n'; 

token : function(stream) { 

    var next = stream.next(); 
    var tokenName = null; 

    if ('\\' === next) { 
     var match = stream.match(new RegExp(newLine.charAt(1))); 
     match && (tokenName = 'some-style' || null); 
    } 
    return tokenName; 
} 

您也可以推廣這種做法與任何序列工作,而不僅僅是\n

var sequence = 'some-sequence'; 

token : function(stream) { 

    var next = stream.next(); 
    var tokenName = null; 

    var ch = sequence.charAt(0); 
    // search for the first letter 
    if (next === ch) { 
     // try to match the rest of the sequence 
     var match = stream.match(new RegExp(sequence.substring(1))); 
     match && (tokenName = 'some-style' || null); 
    } 
    return tokenName; 
} 

這還沒有經過測試,但我懷疑是足夠的伎倆。請讓我知道它是如何爲你。