作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我只想突出显示如下所示的关键字:{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/
我使用以下命令创建了一个只读用户 CREATE ROLE read_only WITH LOGIN PASSWORD 'password' NOSUPERUSER INHERIT NOCREATEDB
我正在为我正在构建的许多应用程序设计 OOP 继承模式。 Javascript 有很多方法可以做到这一点,但我偶然发现了一种我非常喜欢的模式。但现在我正在为分离类和实例的需要而苦苦挣扎。 我有一个名为
我是一名优秀的程序员,十分优秀!