Динамически обновлять правила режима подсветки синтаксиса для Ace Editor
Абсолютно новый для ace editor dev, динамически добавлять дополнительные правила в файл режима для подсветки синтаксиса. Я делаю вызов ajax, который устанавливает глобальную переменную, доступную внутри файла режима для обработки.
Вот настройка и начальный вызов ajax:
var editor = ace.edit("editor");
$.ajax({
url: "json-mode-rules.php",
dataType: "json"
}).done(function(data) {
window.myModeRules=data; // ("foo","bar","etc")
editor.getSession().setMode("ace/mode/python");
});
Файл режима пропатчен следующим:
// keywords has already been initialised as an array
// e.g. var keywords = ("and|as|assert...etc")
var extraRules=window.codebenderModeLibrary["myModeRules"].join("|");
keywords=(keywords[0]+"|"+ extraRules);
Когда страница загружается изначально, редактор ace получает все ключевые слова для выделения синтаксиса. Это прекрасно работает.
Проблема в том, что у нас есть правила, меняющиеся при возникновении определенных событий, и мы хотели бы, чтобы редактор ace обновил свои правила синтаксиса.
Повторный вызов ajax и вызов setMode ничего не делают - это связано с требованием, чтобы js не перезагружал файл.
Я опубликовал вопрос на GitHub без разрешения:
https://github.com/ajaxorg/ace/issues/1835
«Если вы действительно хотите сохранить глобальную переменную, вы можете обернуть все в функцию, вызвать эту функцию, чтобы получить обновленный конструктор Mode, а затем вызвать setMode (new Mode)».
Я не знаю, как это сделать, и любая помощь будет оценена.
Кто-нибудь с методами, как динамически обновлять правила подсветки синтаксиса редактора ace?