У меня есть файл .tmlanguage
, который отлично работает в Sublime Text 2
и выделяет все по мере необходимости. Но я не могу преобразовать его в правила выделения Ace
.Невозможно создать синтаксический ярлык из файла .tmlanguage в Ace.js
Вернее, я конвертирую его, но получаю ошибки в главном файле ace.js
.
Что я делаю:
1) клон репозитория туз
2) перейти к ace/tool
и выполнить эту команду в командной строке: npm install
3), а затем выполнить следующую команду: node tmlanguage.js <path_to_tmlanguage_file>
и получите:
parseString is deprecated. Please, use parseStringSync instead.
Два файла создаются в каталоге ace\lib\ace\mode
.
4) перейти к ace
основной папке, выполнив cd ..
5) выполнить node Makefile.dryice.js full
и получите:
module.js:340
throw err;
^
Error: Cannot find module 'dryice'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (E:\myPath\ace\Makefile.
dryice.js:38:12)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
6) должен выполнить НУЮ установку в /ace
основной папки, а затем снова позвонить node Makefile.dryice.js full
для создания проекта.
Теперь созданные файлы копируются в папку ace/build
.
Предположим, что мой html-файл и папка /ace
находятся в одной папке. Вот фрагмент из HTML:
<script src="ace/build/src-noconflict/ace.js"></script>
<script>
var editor = ace.edit("editor");
editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/slbeclipse");
</script>
В папке ace\build\src-noconflict
У меня есть mode-slbeclipse.js
файл.
7) Открыть HTML файл в хром (или другие браузеры) и получить (на вкладке консоли):
Uncaught TypeError: object is not a function ace.js:8018
Вот 8018th линия:
this.moveCursorTo(row, column);
8) установить контрольную точку -> первый раз, когда он попал this.moveCursorTo
- undefined
, но ошибка не выбрасывается, ошибка была сброшена во второй раз.
9) изменить эту линию:
if(this.moveCursorTo)
{
this.moveCursorTo(row, column);
}
чем я получаю сообщение об ошибке в строке 8564: Uncaught TypeError: object is not a function
:
this.getTokenizer = function() {
if (!this.$tokenizer) {
this.$highlightRules = new this.HighlightRules();
// here the exception occures
this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());
}
return this.$tokenizer;
};
10) Попробованная для отладки и редактирования ace.js
файлов несколько раз - ошибки в других места.
Sublime Text 2 использует .tmlanguage
правильно и все выделено. Итак, я думаю, проблема должна быть в ace
или (я надеюсь), это моя вина, и я пропускаю что-то очевидное.