monoacoはvscode関連の文法を使って、ブラウザにハイライトを表示します.
説明モノラックにvscodeを使用させるためのテーマ 実現を試みる
テーマの直接変換最初は、両者のテーマのフォーマットが違っていると思いましたが、変換を試みたところ、やはり正常に を使用できないことが分かりました.の結果、2つのtokenは根本的に違っています.つまり、分割コードの各部分の命名は違います.
monearch変換textmate で、モノラックは自分でデザインしたものを使って文法のハイライトを実現していますが、vscodeはtextmateのフォーマット を使っています.
textmateはりんごの種類です.は、変換ロジックを実現すれば、textmate->monachを実現すると考えられています.それでは、monoacoはvscodeのテーマを使用することができます.(tokenが同じですので) 双方の論理を学んだ後、posixとpcre正則の転換を研究したところ、致命的な問題が発見されました.monoachは後の行を実行できないと断言できませんでした.これは普通の転換がまったく実現できませんでした.
最終解決策 は、元のmonach の代わりにvs scode-textmateを使用する.実はこれは研究を始める時ありましたが、ネットでは直接cを呼び出すことができないので、wasmを使う効率はデスクトップより低いです. の最終性能はこれです. このスキームはmonoaco-tmから得られたものであるが、最終的には主題使用を完全にし、vscodeからシームレスに移植することができ、言語プラグインを完備し、vscodeからtmLanguageのプラグインをシームレスに移行させ、言語点注入をサポートする . grammarは、構文を解析するために用いられ、この言語を呼び出したときに、対応する構文ファイル をロードする.
具体的には実現が必要です configrationは、折りたたみ、括弧、注釈などを配置するためのものです.元のものと同じ です. themeは、主題のロードを要求する である.
文法の解析はvscode-textmateになりますので、伝統的な方法でテーマをロードすることはできません.最後に、言語を傍受することによって、対応する構文解析ファイルを読み込みます.
使用 ngの下ですでにカプセル化されています.依存パケットの使用は、ngフレームではなく、 を使用しても少し修正できます.パケットアドレスcyia-ngx-common はモジュール を取得する. プレゼンテーションアドレス デモンストレーションアドレスのソースコード ソースコードの呼び出し
テーマの直接変換
monearch変換textmate
textmateはりんごの種類です.
最終解決策
(?<=})
を見ました.vscode-textmate
はbenchmark
があります.波をテストしました.jsの解析はデスクトップの端より二倍遅く、他のものはデスクトップの端よりも速いです.ちょっと分かりにくいです.
jQuery v2.0.3
TOKENIZING 250971 lines using grammar source.js
Oniguruma: 550 ms., Onigasm: 381 ms. (1.4x faster)
Bootstrap CSS v3.1.1
TOKENIZING 127005 lines using grammar source.css
Oniguruma: 217 ms., Onigasm: 91 ms. (2.4x faster)
vscode.d.ts
TOKENIZING 264938 lines using grammar source.ts
Oniguruma: 356 ms., Onigasm: 191 ms. (1.9x faster)
JSON
TOKENIZING 103784 lines using grammar source.ts
Oniguruma: 312 ms., Onigasm: 185 ms. (1.7x faster)
Bootstrap CSS v3.1.1 minified
TOKENIZING 99967 lines using grammar source.css
Oniguruma: 231 ms., Onigasm: 167 ms. (1.4x faster)
jQuery v2.0.3 minified
TOKENIZING 83618 lines using grammar source.js
Oniguruma: 254 ms., Onigasm: 480 ms. (1.9x slower)
Bootstrap with multi-byte minified
TOKENIZING 116201 lines using grammar source.css
Oniguruma: 248 ms., Onigasm: 196 ms. (1.3x faster)
原理を実現する具体的には実現が必要です
monaco.languages.EncodedTokensProvider
インターフェースを転送します.setTokensProvider
はパラメータをしますsetTokensProvider
はsetMonarchTokensProvider
の代わりになりました.文法の解析はvscode-textmateになりますので、伝統的な方法でテーマをロードすることはできません.
Registry
でもらいますColorMap
は次に主題に定義される.使用
CyiaMonacoTextmateModule
を導入し、コンポーネント内の依存注入によってCyiaMonacoTextmateService
サービス
this.service.setMonaco(monaco);
this.service.init().then(async () => {
const themeList = await this.service.getThemeList();
this.themeList = themeList;
this.selectedTheme = themeList[1];
const name = await this.service.defineTheme(this.selectedTheme);
this.instance = monaco.editor.create(
this.containerElement?.nativeElement,
{
theme: name,
value: `let a=6;`,
language: this.selectedLanguage,
minimap: {
enabled: false,
},
automaticLayout: true,
}
);
});
//
async change(e) {
const name = await this.service.defineTheme(e);
monaco.editor.setTheme(name);
}
関連住所