【问题标题】:CodeMirror: make atomic range of tokenCodeMirror:制作令牌的原子范围
【发布时间】:2013-04-29 08:15:09
【问题描述】:

我正在实现 CodeMirror 以用作需要一些语法突出显示的特殊文件的编辑器。我为它编写了自己的解析器,但现在我面临以下问题:有一种特定类型的标记,我总是想将其标记为原子范围(使用doc.markText)。 p>

我原以为在解析令牌时会存在一些事件处理程序,其中包含 {line, ch} 对象作为其开始和结束位置。通读文档,这似乎不存在,所以我会自己编写,但问题是似乎没有办法获得与解析器相关的任何类型的位置数据。

解决此问题的最佳方法是什么?确实有一些很粗糙的方法,比如注册一个更改处理程序或每隔几秒迭代整个内容,但当然应该避免这种情况。

【问题讨论】:

    标签: javascript codemirror


    【解决方案1】:

    我已经分叉了 CodeMirror github 存储库并创建了一个在解析令牌时触发的事件。

    语法是这样的:

    "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});
            }
        }
    });
    

    如果有人想要这个,see my repository

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 2020-11-16
      • 2015-06-19
      相关资源
      最近更新 更多