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
模块名 | 项目 | 描述 |
---|---|---|
onigurumaLib | oniguruma | 是用 c 的一个解释器,不是 node 或者 浏览器模块,无法在web前端项目中使用 |
node-oniguruma | node-oniguruma | atom 对 oniguruma 封装的 node 模块,无法在浏览器端运行。VSCode 之前使用的模块 |
vscode-oniguruma | vscode-oniguruma | vscode 用 wasm 对 oniguruma 封装的模块,应该可以在浏览器端运行 |
onigasm | onigasm | 使用 WebAssembly 的技术将 c 的版本移植到 wasm,这个是可以在 web 端运行(因为没有 V8 的一些定制加成,性能比 node-oniguruma 差 2 倍,相比 C 下的 oniguruma 未知) |
3、模块
项目中使用到的模块
模块 | 描述 |
---|---|
vscode-oniguruma | vscode 用 wasm 对 oniguruma 封装的模块 |
vscode-textmate | 用来提供语法解析、语法注册器、主题注册器等,vscode 实现的 textmate 相关核心功能 |
textmate-registry | 用来提供不同语言的加载、配置、注册功能 |
languages | 不同语言的具体解析功能、配置和语法设置等 |
textmate-tokenizer | 封装词法分析的接口,让 monaco 能够使用 textmate 的解析器 |
theme-registry | 提供主题的转换、加载、管理、切换 |