如何使用Ace代码编辑器在运行时添加新的突出显示规则?

时间:2016-09-06 15:53:52

标签: javascript syntax-highlighting ace-editor

我正在尝试将自定义关键字注入编辑器中设置的任何模式。我尝试过以下方法:

adb shell dumpsys package [mypackagename]

我想要完成的是能够写出“两个”这个词并将其包裹在自定义令牌中

1 个答案:

答案 0 :(得分:0)

我迟到了几年,但是最近我找到了一个可能对您和其他人有帮助的解决方案。看看我在他们的Github存储库(Ace Editor Repo)上打开的问题。使用此解决方案,您可以像在运行时一样定义自己的令牌。在我的示例中,我创建了一个名为“ my_token”的令牌。编辑器会将其包装在div中,该div的类名称与您的标记名称匹配,并带有“ ace_”前缀。所以像“ ace_my_token”。

请注意,解决方案的一部分要求我以最高优先级突出显示新规则,因为即使在字符串中,我也需要以不同的方式突出显示这是为什么我将其放在规则集中的原因。您可能需要根据突出显示规则的位置来调整插入规则的位置。

this.editor = ace.edit(this.editorId);
var session = this.editor.session;
this.language = this.language || 'text';
session.setMode('ace/mode/' + this.language, function() {
    var rules = session.$mode.$highlightRules.getRules();
    for (var stateName in rules) {
        if (Object.prototype.hasOwnProperty.call(rules, stateName)) {
            rules[stateName].unshift({
                token: 'my_token',
                regex: 'two'
            });
        }
    }
    // force recreation of tokenizer
    session.$mode.$tokenizer = null;
    session.bgTokenizer.setTokenizer(session.$mode.getTokenizer());
    // force re-highlight whole document
    session.bgTokenizer.start(0);
});

这是一个演示:https://jsbin.com/yogeqewehu/edit?html,css,console,output