カスタム エディターでの構文の色分け表示

特定の構文項目を識別し、特定のドキュメント ビューに対して指定した色で表示するために、コア エディターを含む Visual Studio Environment SDK エディターには言語サービスが使用されています。

色分けの要件

言語サービスの色分けツールを実装するすべてのエディターにより、以下のことを行う必要があります。

  1. IVsTextBuffer を実装するオブジェクトを使用して色分けするテキストを管理し、IVsTextView を実装するオブジェクトを使用してテキストのドキュメント ビューを提供します。

  2. 言語サービスの識別 GUID を使用して VSPackage のサービス プロバイダーのクエリを実行することにより、特定の言語サービスへのインターフェイスを取得します。

  3. IVsTextBuffer を実装するオブジェクトの SetLanguageServiceID メソッドを呼び出します。 このメソッドにより、言語サービスは、色分けされるテキストを管理するために VSPackage に使用される IVsTextBuffer の実装に関連付けられます。

コア エディターによる言語サービスの色分けツールの使用法

色分けツールを備えた言語サービスがコア エディターのインスタンスによって取得されると、言語サービスの色分けツールによるテキストの解析とレンダリングは、ユーザー側の追加の操作を必要とせずに自動的に行われます。

IDE により、透過的に以下が実行されます。

  • IVsTextBuffer の実装での追加時または変更時に、テキストを解析および分析するために、必要に応じて色分けツールを呼び出します。

  • IVsTextView の実装によって提供されたドキュメント ビューによる表示を更新し、色分けツールから返された情報を使用して再描画する処理を確実に行います。

非コア エディターによる言語サービスの色分けツールの使用法

非コア エディター インスタンスからも言語サービスの構文の色分けサービスを使用できますが、サービスの色分けツールを明示的に取得して適用し、ドキュメント ビュー自体を再描画する必要があります。

これを行うには、非コア エディターで以下を実行する必要があります。

  1. 言語サービスの色分けツール オブジェクト (IVsColorizerIVsColorizer2 を実装します) を取得します。 VSPackage でこれを行うには、言語サービスのインターフェイスに対して GetColorizer メソッドを呼び出します。

  2. 特定のテキスト範囲を色分けするように要求するには、ColorizeLine メソッドを呼び出します。

    ColorizeLine メソッドから、色分けされたテキスト範囲内の各文字に対応する値の配列が返されます。 また、コメント、キーワード、データ型など、特定の種類の色分け可能な項目としてテキスト範囲が識別されます。

  3. ColorizeLine から返された色分け情報を使用して、テキストを再描画して表示します。

Note

VSPackage の場合、言語サービスの色分けツールを使用するだけでなく、汎用の Visual Studio Environment SDK テキストの色分けメカニズムを使用することもできます。 このメカニズムの詳細については、「フォントと色の使用」を参照してください。