AvalonEditのカスタム強調表示ルールを定義しようとしています。このためのドキュメントはないようです。ファイル形式に関するドキュメントはいくつかありますが、定義を作成した後で実際にロードして使用する方法については何もありません。
「構文の強調表示」wikiページ(古いWinForms TextEditorの場合)には、ディスク上の.xshdファイルから強調表示の定義を読み込む方法が記載されていますが、AvalonEditが組み込みの定義で行うのと同じように、リソースとして埋め込みます。 。
組み込みの蛍光ペンをロードするICSharpCode.AvalonEditプロジェクトのコードを見てきましたが、実際の「リソースからのロード」コードはDefaultHighlightingManager.LoadHighlightingで実行されます。これはプライベートであり、さらに奇妙なことに、どうやらリリースビルドでのみ呼び出されます。
私はいじくり回し続け、プライベートメソッドからコードの一部をコピーして貼り付け、うまくいくかもしれないし、うまくいかないかもしれない何かを一緒に考えてみることができますが、尋ねる価値があるようです:これを行う標準的な方法は何ですか?サードパーティのコードがリソースから強調表示の定義をロードするための推奨される方法はありますか?
ダニエルの答えは私に良いスタートを与えましたが、GetManifestResourceStreamに渡す文字列に名前空間名を含める必要があります。そうしないと、NullReferenceExceptionが発生します(nullストリームが返されるため)。
このメソッドを使用して、ResourceLoaderという静的クラスを.xshdファイルと同じプロジェクトフォルダーに追加することにしました。
public static IHighlightingDefinition LoadHighlightingDefinition(
string resourceName)
{
var type = typeof(ResourceLoader);
var fullName = type.Namespace + "." + resourceName;
using (var stream = type.Assembly.GetManifestResourceStream(fullName))
using (var reader = new XmlTextReader(stream))
return HighlightingLoader.Load(reader, HighlightingManager.Instance);
}
その後、私はただ呼び出すことができますResourceLoader.LoadHighlightingDefinition("Name.xshd")
。
自宅でフォローしている人は、.xshdファイルのビルドアクションを埋め込みリソースに設定する必要があります。