2013-12-03 1 views
1

У меня есть файл .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 или (я надеюсь), это моя вина, и я пропускаю что-то очевидное.

ответ

1

Конвертер не полностью автоматический, он просто извлекает регулярные выражения из файла tmlanguage, и результирующий файл необходимо исправить вручную.(см. here)
Я предлагаю обратиться за помощью по этому вопросу.

Смежные вопросы