gpt4 book ai didi

javascript - 为 CodeMirror 创建新模式

转载 作者:数据小太阳 更新时间:2023-10-29 03:51:34 39 4
gpt4 key购买 nike

我只想突出显示如下所示的关键字:{KEYWORD}(基本上是用单个 {} 括号括起来的大写单词)

我通过复制 Mustache Overlay demo 中的代码来尝试这个, 并用单括号替换双括号:

CodeMirror.defineMode('mymode', function(config, parserConfig) {
var mymodeOverlay = {
token: function(stream, state) {
if (stream.match("{")) {
while ((ch = stream.next()) != null)
if (ch == "}" && stream.next() == "}") break;
return 'mymode';
}
while (stream.next() != null && !stream.match("{", false)) {}
return null;
}
};
return CodeMirror.overlayParser(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), mymodeOverlay);
});

但效果不是很好:)

有什么想法吗?

最佳答案

Mustache 示例中有特殊处理,因为它需要处理 2 个字符的分隔符(例如 '{{''}}' 中有两个字符).我以前从未使用过 CodeMirror,所以这只是一个猜测,但请尝试这样的操作:

CodeMirror.defineMode("mymode", function(config, parserConfig) {
var mymodeOverlay = {
token: function(stream, state) {
if (stream.match("{")) {
while ((ch = stream.next()) != null)
if (ch == "}") break;
return "mymode";
}
while (stream.next() != null && !stream.match("{", false)) {}
return null;
}
};
return CodeMirror.overlayParser(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), mymodeOverlay);
});

编辑

it works (though it highlights words with lowercase letters too)

应该有效:

token: function(stream, state) {
if (stream.match("{")) {
while ((ch = stream.next()) != null && ch === ch.toUpperCase())
if (ch == "}") break;
return "mymode";
}
while (stream.next() != null && !stream.match("{", false)) {}
return null;
}

关于javascript - 为 CodeMirror 创建新模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6364854/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com