RED*_*SAD 2 visual-studio-code tmlanguage monaco-editor
VSCode 建立在 MonacoEditor 之上,MonacoEditor 不支持 Textmate 语法和主题。但不知何故 VSCode 使它成为可能。我很好奇 VSCode 是如何做到这一点的。
我问是因为我正在制作一个带有 TextMate 语法和主题支持的代码编辑器(基于 Monaco)。但我无法理解如何实现它。
尽管有一些软件包monaco-textmate
可以使 TextMate 语法与 Monaco 一起使用,但语法突出显示仍然无法正常工作。
TextMate 语法依赖于一个名为Oniguruma的特定正则表达式实现/库,它是用 C 实现的。但是摩纳哥被设计为在浏览器中运行,并且那里可用的 JavaScript 正则表达式引擎与 Oniguruma 不兼容。所有这些都在“为什么编辑器不支持 TextMate 语法?”中有详细解释。第摩纳哥的常见问题。它还提到了可能最终将 Oniguruma 编译到WebAssembly以解决此问题的可能性。
VSCode 本身使用vscode-textmate进行 TMLanguage 处理,它具有 Oniguruma 库作为本机依赖项。VSCode 可以具有本机依赖项,因为它不在浏览器环境中运行。
根据monaco-textmate 的 readme,它实际上很大程度上基于 vscode-textmate:
此存储库中 99% 的代码直接从
vscode-textmate
它确实使用了前面提到的 WASM 方法:
monaco-textmate
依赖onigasm
包oniguruma
在浏览器中提供正则表达式引擎。onigasm 本身依赖于WebAssembly
.
至于为什么语法突出显示并不总是像 monaco-textmate 预期的那样工作......我不知道,我希望这只是实现中的一个错误。也许等待维护者的回应,您链接的问题是相当新的。
至少从概念上讲,它无法实现与 VSCode 相同的语法突出显示,这不应该是一个原因,因为它使用相同的正则表达式风格。
归档时间: |
|
查看次数: |
1290 次 |
最近记录: |