Skip to content

Monaco Editor在Web IDE中高亮的一些问题

1、Monaco Editor中的语法高亮

monaco editor的语言支持使用的是内置的Monarch,要用TextMate,也是给了解释怎么做, Why doesn't the editor support TextMate grammars?

Please see https://github.com/bolinfest/monaco-tm which puts together monaco-editor, vscode-oniguruma and vscode-textmate to get TM grammar support in the editor.

主要就是因为 Textmate 语法解析依赖的 Oniguruma 是一个 C 语言下的解析功能,VSCode 可以使用 node 环境来调用原生的模块,但是在 web 环境下无法实现,即使通过 asm.js 转换后,性能依然会有 100-1000 倍的损失(16年9月的说明,目前未测试),而且 IE 不支持~~~ 语言的支持也只有通过 worker 的 js ts html css json 这些。但是业内更通用、生态更丰富的是 Textmate,包括 VSCode 也是用的 Textmate,本地可以使用node环境来调用原生的模块

2、Oniguruma

[Apr 16, 2020] vscode 将 oniguruma 从原生模块 node-oniguruma 独立出来为 wasm 版本的 vscode-oniguruma

模块名项目描述
onigurumaLiboniguruma是用 c 的一个解释器,不是 node 或者 浏览器模块,无法在web前端项目中使用
node-onigurumanode-onigurumaatom 对 oniguruma 封装的 node 模块,无法在浏览器端运行。VSCode 之前使用的模块
vscode-onigurumavscode-onigurumavscode 用 wasm 对 oniguruma 封装的模块,应该可以在浏览器端运行
onigasmonigasm使用 WebAssembly 的技术将 c 的版本移植到 wasm,这个是可以在 web 端运行(因为没有 V8 的一些定制加成,性能比 node-oniguruma 差 2 倍,相比 C 下的 oniguruma 未知)

3、模块

项目中使用到的模块

模块描述
vscode-onigurumavscode 用 wasm 对 oniguruma 封装的模块
vscode-textmate用来提供语法解析、语法注册器、主题注册器等,vscode 实现的 textmate 相关核心功能
textmate-registry用来提供不同语言的加载、配置、注册功能
languages不同语言的具体解析功能、配置和语法设置等
textmate-tokenizer封装词法分析的接口,让 monaco 能够使用 textmate 的解析器
theme-registry提供主题的转换、加载、管理、切换

from: 1、https://ubug.io/blog/workpad-part-5