#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»