我正在为CodeMirror编写一个无上下文的解析器,它一次解析一个字符的代码,并根据所采用的状态转换输出一个样式。代码使用换行符\ n来触发状态转换,但CodeMirror似乎从输入文本中删除它们(console.log(char ==='\ n')总是返回false)
是否有配置CodeMirror以将\ n作为输入?文档似乎没有提到这个问题。
我的状态对象格式如下
{
state1: {
active: true,
edges: {
'\n': 'state2'
}
},
state2: {
active: false,
edges: {
'#': 'state1'
}
}
}
如果需要任何其他信息或说明,请告诉我
答案 0 :(得分:2)
让console.log (char === '\n')
始终返回false
并不一定意味着CodeMirror会删除换行符 - 文本按原样传递,即\n
将作为两个字符传递 - {{1} }和\
。
尝试并使用模式中的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
这尚未经过测试,但我怀疑这样做是足够的。请告诉我你是怎么回事。