无法从Ace.js中的.tmlanguage文件生成语法高亮显示

时间:2013-12-03 14:26:38

标签: syntax-highlighting npm ace-editor

我有一个.tmlanguage文件,可以在Sublime Text 2中正常工作,并根据需要突出显示所有内容。但我无法将其转换为Ace突出显示规则。

或者我转换它但我在ace.js主文件中出错。

我的所作所为:

1)克隆ace存储库
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主文件夹中执行npm install,然后再次调用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)在chrome(或其他浏览器)中打开此html文件并获取(在控制台选项卡中):

Uncaught TypeError: object is not a function       ace.js:8018

这是第8018行:

this.moveCursorTo(row, column);

8)设置断点 - &gt;第一次它的命中this.moveCursorToundefined但是没有抛出错误,第二次抛出错误。

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 个答案:

答案 0 :(得分:1)

转换器不是全自动的,它只是从tmlanguage文件中提取正则表达式,并且需要手动修复生成的文件。 (见here
我建议在这个问题上寻求帮助。