構文の色付けは、損傷、修復、および調整のモデルを使用するテキスト・プラットフォームで提供されています。 文書に適用された変更ごとに、表示リコンサイラーは、ビジュアル表記のどの領域が無効になるか、またどのようにそれを修復するかを決定します。 文書内の異なるコンテンツ型に、異なるストラテジーを使用できます。
構文の色付けのインプリメント (および表示リコンサイラーによる実行) はオプションです。 特定のエディターに使用される文書モデルを認識せず、構文強調表示のための汎用動作を行わないため、 デフォルトで SourceViewerConfiguration は 表示リコンサイラーをインストールしません。
構文強調表示をインプリメントするようクラスを調整するためには、エディターのソース・ビューアーを 構成し、表記リコンサイラーを定義しなければなりません。 もう一度 JavaSourceViewerConfiguration を調べ、どのように表示リコンサイラーがエディターに 定義されているか見てみましょう。
public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { PresentationReconciler reconciler= new PresentationReconciler(); ... return reconciler; }
表示リコンサイラーが何を行うかを理解するためには、まず損傷、修復、および調整の概念を調べなければなりません。
ユーザーがエディターでテキストを変更すると、その変更を表示するためにエディターのパーツが再表示されます。 再表示されなければならないテキストの計算は、損傷の計算と呼ばれます。 構文の色付けが適用されていると、ある 1 文字の存在または欠落がその周囲のテキストの色付けに影響することがあるため、 編集操作によって生じる損傷の量は重大なものになります。
ダメージャー (IPresentationDamager) は、 文書の変更のために再ビルドしなければならない文書の表示の領域を決定します。 表示ダメージャーは、特定の文書コンテンツ型 (または領域) に特定のものと想定されています。 表示リペアラー (IPresentationRepairer) に とって有効な入力である損傷を返すことができるようになっていなければなりません。 特定のコンテンツ型に必要な修復を正常に記述するためには、リペアラーは、必要な情報すべてを損傷領域から 引き継がなければなりません。
調整は、エディターで変更が発生したときに、文書の表示を保守するプロセス全体を記述します。 表示リコンサイラー (IPresentationReconciler) は、 その関連ビューアーでテキストに加えられた変更をモニターします。 文書の領域を使用して、変更によって影響を受けるコンテンツ型を判別し、その影響を受けるコンテンツ型に該当する ダメージャーに通知します。 損傷が計算されると、ビューアーに適用されている修復記述を構成し、それを基本コンテンツと同期させる該当する リペアラーに渡されます。
org.eclipse.jface.text.reconciler の クラスは、文書モデルをその文書の外部操作と同期させるため、その他のサポート・クラスを定義します。
文書に存在するコンテンツ型ごとに、リペアラーとダメージャーのペアとともに表示リコンサイラーが提供されていなければなりません。 表示リコンサイラーに該当するインプリメンテーションを決定するのは、エディターそれぞれの役割です。 ただし、損傷を計算および修復するルール・ベース文書スキャナーを使用するため、プラットフォームは org.eclipse.jface.text.rules の サポートを提供しています。 デフォルト・ダメージャーおよびリペアラーはこのパッケージに定義されています。 これらは、文書用のスキャン・ルールを定義することによって構文の色付けをインプリメントするため、 org.eclipse.jface.text.presentation の 標準リコンサイラーとともに使用できます。
これで、サンプル表示リコンサイラーの作成について詳しく調べる準備ができました。 Java エディター・サンプルが、javadoc、複数行コメント、およびその他すべてを表すコンテンツ型に文書を分割する JavaPartitionScanner をインプリメントすることを思い出してください。
これらのコンテンツ型ごとに、ダメージャー/リペアラーのペアが指定されていなければなりません。 これは、PresentationReconciler および DefaultDamagerRepairer によって、 以下のようにして行われます。
JavaColorProvider provider= JavaEditorEnvironment.getJavaColorProvider(); PresentationReconciler reconciler= new PresentationReconciler(); DefaultDamagerRepairer dr= new DefaultDamagerRepairer(JavaEditorEnvironment.getJavaCodeScanner()); reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE); reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE); dr= new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(provider.getColor(JavaColorProvider.JAVADOC_DEFAULT)))); reconciler.setDamager(dr, JavaPartitionScanner.JAVA_DOC); reconciler.setRepairer(dr, JavaPartitionScanner.JAVA_DOC); dr= new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(provider.getColor(JavaColorProvider.MULTI_LINE_COMMENT)))); reconciler.setDamager(dr, JavaPartitionScanner.JAVA_MULTILINE_COMMENT); reconciler.setRepairer(dr, JavaPartitionScanner.JAVA_MULTILINE_COMMENT); return reconciler;
この例では、コンテンツ型ごとにスキャナーが提供されていることに注意してください。
デフォルト・コンテンツ型は JavaCodeScanner でセットアップされているため、キーワードを検出し、色を付けることができます。 JavaCodeScanner は、異なる種類のトークン (単一行コメント、空白、およびワードなど) を検出するための ルールを作成します。 これは、異なるトークン型のワードに使用される色を記述しています。
その他のコンテンツ型は SingleTokenScanner でセットアップされ、それらのコンテンツ型のトークンに使用される 色を与えられています。
スキャン・ルールに従って、文書の適切な部分を損傷させ、修復するための詳細すべては、 DefaultDamagerRepairer によって 処理されます。 これらの詳細は通常、プラグイン・コードによって認識されている必要はありません。 あなたのプラグインは、そのエディター・コンテンツを分割およびスキャンするために適切なルールのセットのビルドを 行わなければなりません。
Java エディター・サンプルは、前に述べたように、表示リコンサイラーをインストールするための SourceViewerConfiguration のサブクラスを提供しています。 また表示リコンサイラーは、 IPresentationReconciler プロトコルを使用して、テキスト・ビューアーに動的にインストールすることができます。 いずれの方法を行っても、ランタイムにおける特定の効果はありません。 ただし、SourceViewerConfiguration の サブクラスにプラグ可能動作のオーバーライドすべてを行うことによって、動作オーバーライドすべてを 1 つに統合できるという効果が生まれます。 エディターの使用期間にわたって異なる表示リコンサイラーがビューアーに関連付けられている場合、 この動的プロトコルが役立ちます。