Добавить Javascript на пользовательский язык — ACE Editor

#javascript #json #ace-editor

#javascript #json #ace-editor

Вопрос:

Я использую редактор ACE для пользовательского метаязыка, используя JSON в качестве основы. Но я хочу добавить Javascript, когда пользователь вводит что-то вроде

«пользовательский»: функция (параметр){ …. код JavaScript ….. }

Идея состоит в том, чтобы выделить код javascript, используя стиль, уже используемый для JS.

Я не использую выделение JSON, просто использую свое собственное.

Я видел в документации что-то «Встраивание другого маркера» (https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode )

Но это не работает. Вот мой код:

Спасибо!

Ответ №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 == "}" amp;amp; stack.length) {
                stack.shift();
                this.next = stack.shift();
                if (this.next.indexOf("quasi") != -1)
                    return "paren.string";
            } 
            if (val == "}" amp;amp; !stack.length) {
                this.next = "start";
            } 
            return "paren";
        }
    }], ["no_regex"]); 

};

oop.inherits(JsonPlusHighlightRules, JsonHighlightRules);

exports.JsonPlusHighlightRules = JsonPlusHighlightRules;
});
  

Комментарии:

1. Спасибо. Есть идеи, почему require(«ace /mode/ javascript_highlight_rules») возвращает undefined?? Есть ли какой-либо способ включить это?

2. вы используете ace-сборки или ace? с ace-сборками вам нужно включить mode-javascript.js и mode-json.js , с ace это должно сработать, если вы настроите, чтобы в обязательных путях был ace: «path /to /ace / lib»