我正在使用Codemirror 5.3。
我在混合模式文档中标记匹配html以突出显示开始和结束标记 - 这很有效。 (https://codemirror.net/demo/matchtags.html)
我正在尝试捕获标记之间的内容(在我的情况下使用上下文菜单操作,我右键单击标记),因此我可以将其发送到外部进程。
我使用var tm = doc.getAllMarks();
,因为我是标签匹配而不是书签,我几乎知道数组中只有两个项目。但是,此返回的TextMarker数组(尽我所知)包含标记的{line, ch}
游标。
是否有正确的方法来获得标记的起始位置和结束位置 - 直接或作为线条和字符位置?我能想到的最好的就是迭代每个:
[].lines[0].parent.lines
并查看CodeMirror.Line的每个实例是否都有markedSpans
对象,这会给我行索引,然后使用[].lines[0].markedSpans[0].from
和[].lines[0].markedSpans[0].to
来查找位置标记中的字符。然后使用doc.getRange
抓取内容并将其随机播放以进行处理......如下所示:
var tm = doc.getAllMarks(),
lines = tm[0].lines[0].parent.lines,
range = {
from: { line: 0, ch: 0},
to: { line: 0, ch: 0 }
},
hack = 0,
textContent = "";
for (var i=0,j=lines.length;i<j;i++) {
if (lines[i].hasOwnProperty("markedSpans")) {
if (hack==0) { // sorry, i'm in a hurry
range.from.line = i;
range.from.ch = lines[i].markedSpans.from;
hack=1;
} else {
range.to.line = i;
range.to.ch = lines[i].markedSpans.to;
}
}
}
textContent = doc.getRange(range.from,range.to);
所有这些听起来都非常糟糕,我正在寻找更好的方法。