【问题标题】:Add Javascript into Custom Language - ACE Editor将 Javascript 添加到自定义语言 - ACE 编辑器
【发布时间】:2014-07-01 15:16:44
【问题描述】:

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

的内容时添加 Javascript

"custom" : function(param){ .... javascript 代码 ..... }

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

我没有使用 JSON highligther,只使用我自己的。

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

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

谢谢!

【问题讨论】:

    标签: javascript json ace-editor


    【解决方案1】:

    这有点难做,因为您需要计算大括号来检测 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;
    });
    

    【讨论】:

    • 谢谢。知道为什么 require("ace/mode/javascript_highlight_rules") 返回未定义吗?有什么办法包括这个吗?
    • 你使用 ace-builds 还是 ace?使用 ace-builds 你需要包含 mode-javascript.jsmode-json.js,如果你配置需要路径来拥有 ace: "path/to/ace/lib",它应该可以工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多