将Javascript添加到自定义语言 - ACE编辑器

时间:2014-07-01 15:16:45

标签: javascript json ace-editor

我正在使用ACE编辑器来使用JSON作为基础的自定义元语言。但是我想在用户输入类似

的内容时添加Javascript

“custom”:function(param){.... javascript code .....}

我们的想法是使用已经用于JS的样式突出显示javascript代码。

我不会使用JSON highligther,只需使用我自己的。

我在文档中看到了“嵌入不同的荧光笔”(https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode

但它不起作用。这是我的代码:

谢谢!

1 个答案:

答案 0 :(得分:2)

这有点难以做到,因为您需要计算大括号来检测javascript模式何时结束。以下代码似乎运作良好

define(function(require, exports, module) {
"use strict";

var oop = require("../lib/oop");
var JsonHighlightRules = require("./json_highlight_rules").JsonHighlightRules;
var JavaScriptHighlightRules = require("./javascript_highlight_rules")
   .JavaScriptHighlightRules;

var JsonPlusHighlightRules = function() {
    JsonHighlightRules.call(this);

    this.$rules.start.unshift({  
        regex: "function",
        next: "js-start",
        token: "keyword"
    }); 
    this.embedRules(JavaScriptHighlightRules, "js-", [{ 
        regex: "[{}]", onMatch: function(val, state, stack) {
            this.next = "";
            console.log(stack, this.next, val);
            if (val == "{") {
                stack.unshift("js-start", state);
                return "paren";
            }
            if (val == "}" && stack.length) {
                stack.shift();
                this.next = stack.shift();
                if (this.next.indexOf("quasi") != -1)
                    return "paren.string";
            } 
            if (val == "}" && !stack.length) {
                this.next = "start";
            } 
            return "paren";
        }
    }], ["no_regex"]); 

};

oop.inherits(JsonPlusHighlightRules, JsonHighlightRules);

exports.JsonPlusHighlightRules = JsonPlusHighlightRules;
});