Javascript CodeMirror:生成令牌的原子范围
我正在实现CodeMirror,用作需要一些语法突出显示的特殊文件的编辑器。我为它编写了自己的解析器,但现在我面临以下问题:有一种特定类型的令牌,我总是想标记为原子范围(使用Javascript CodeMirror:生成令牌的原子范围,javascript,codemirror,Javascript,Codemirror,我正在实现CodeMirror,用作需要一些语法突出显示的特殊文件的编辑器。我为它编写了自己的解析器,但现在我面临以下问题:有一种特定类型的令牌,我总是想标记为原子范围(使用doc.markText) 我原以为在解析令牌时会存在一些事件处理程序,包含{line,ch}对象作为其开始和结束位置。通过阅读文档,这似乎不存在,因此我将编写自己的文档,但问题是似乎没有办法获得与解析器相关的任何类型的位置数据 最好的办法是什么?有一些非常粗糙的方法,比如注册更改处理程序或每隔几秒钟迭代整个内容,但当然应该
doc.markText
)
我原以为在解析令牌时会存在一些事件处理程序,包含{line,ch}
对象作为其开始和结束位置。通过阅读文档,这似乎不存在,因此我将编写自己的文档,但问题是似乎没有办法获得与解析器相关的任何类型的位置数据
最好的办法是什么?有一些非常粗糙的方法,比如注册更改处理程序或每隔几秒钟迭代整个内容,但当然应该避免这种情况。我已经分叉了CodeMirror github repo,并创建了一个事件,在解析令牌时触发该事件 语法如下:
"tokenParsed" (instance: CodeMirror, start: {ch, line}, end: {ch, line}, style: String, text: String)
然后我按如下方式处理它:
myCodeMirror.on("tokenParsed", function(instance, start, end, style, text) {
if(!instance.findMarksAt(end).length) { //check if the mark doesn't exist yet
if(style && style.indexOf("param") > -1) {
instance.markText(start, end, {atomic: true});
}
}
});
如果有人想要这个