ace-editor - 王牌编辑器自定义模式 - 将突出显示规则添加到现有集合
问题描述
我有一个与 GraalVM 脚本相关的 JavaScript 编辑器(Ace Editor),我在其中添加了一些自定义 JavaScript 规则。我希望它们使用自定义突出显示规则反映在编辑器中。但是,无论我尝试什么,似乎都无法添加新规则。我有一个正确包含的自定义模式,问题出在规则中。
我的起点看起来像这样(不包括模式代码):
ace.define('ace/mode/custom_highlight_rules', ['require', 'exports', 'ace/lib/oop', 'ace/mode/text_highlight_rules'], (acequire, exports) => {
const oop = acequire('ace/lib/oop');
const JavaScriptHighlightRules = acequire("./javascript_highlight_rules").JavaScriptHighlightRules;
const CustomHighlightRules = function CustomHighlightRules() {
this.$rules = new JavaScriptHighlightRules().getRules();
};
oop.inherits(CustomHighlightRules, JavaScriptHighlightRules);
exports.CustomHighlightRules = CustomHighlightRules;
});
现在,我尝试addRules()
从文档中使用,如下所示:
this.addRules({
start: [ {
token: "keyword",
regex: "my_keyword",
} ]
}, 'custom-');
但是, my_keyword 未突出显示。
需要注意的是,将其替换为:
this.$rules = {
start: [ {
token: "keyword",
regex: "my_keyword",
} ]
};
突出显示这个关键字,但没有其他,因为没有其他规则——这就是我知道代码在做什么的方式。
我也尝试过这样的事情:
this.$rules.start.push({
token: "keyword",
regex: "my_keyword",
next: "start",
});
这样规则就在内置start
对象中,但它似乎不起作用。还尝试了正则表达式的变体(例如,使用本机正则表达式代码,如/my_keyword/
)。
我注意到在使用时addRules()
,我的自定义对象中没有processed: true
,这表明我添加规则可能为时已晚?不过,这似乎是正确的地方。
我究竟做错了什么?
解决方案
我没有详细说明为什么会这样,但看起来this.$rules
需要在最后完成分配——所以首先需要构建对象,然后再分配。可以在此处找到有关如何执行此操作的工作示例: TypeScript 下的https://ace.c9.io/tool/mode_creator.html,它继承了 JavaScript,完全符合我的要求。
因此,我的函数现在看起来像这样:
const CustomHighlightRules = function CustomHighlightRules(options) {
let customRules = [
{
token: "keyword",
regex: "my_keyword"
}
];
let JSRules = new JavaScriptHighlightRules({jsx: (options && options.jsx)}).getRules();
JSRules.no_regex = customRules.concat(JSRules.no_regex);
this.$rules = JSRules;
}
推荐阅读
- php - 在 Laravel 中覆盖路由名称
- c# - Dictionary.ContainsKey() 是否比 FirstOrDefault() 更好?
- asynchronous - 如何优雅地关闭 Tokio 运行时以响应 SIGTERM?
- javascript - 是否可以从谷歌应用程序脚本中的库调用容器绑定脚本函数?
- android-studio - 在 imageView 上捕获并显示图像,现在我想将 imageView 传递给另一个活动
- html - 页面的侧滚动条覆盖页面内容
- c - OpenMP Monte_Carlo 模拟实现目标接近 PI
- python - 从数据库中下载 django 中的文件,并在其中查看 pdf 文件
- javascript - 为什么图片没有显示在 JavaScript Toggle 中?
- rust - 为什么在 Rust 中将 const 引用直接转换为可变引用无效?