コンテンツ・ビューアーのインプリメント

比較プラグインは、独自のコンテンツ・ビューアーをインプリメントするための実質的サポートを提供します。

コンテンツ・マージ・ビューアー

ContentMergeViewer は抽象比較およびマージのビューアーで、2 つのコンテンツ領域が横並びに表示され、さらにオプションで共通の祖先 (3 方向比較) のコンテンツ領域が表示されます。 インプリメンテーションにはコンテンツ型に関する前提事項がないので、特定のタイプを扱うのはサブクラスの役割です。 org.eclipse.compare.internal 内の ImageMergeViewer は、ContentMergeViewer を使用してイメージの単純なマージ・ビューアーをインプリメントする方法を示します。 ContentMergeViewer は、IMergeViewerContentProvider インターフェースをインプリメントする必要のあるコンテンツ・プロバイダーを使用してそのモデルにアクセスします。

テキスト・マージ・ビューアー

TextMergeViewer は、テキスト・コンテンツを比較およびマージするための ContentMergeViewer の標準具象サブクラスです。 テキスト・マージ・ビューアーでは、RangeDifferencer を使用して、2 つ (または 3 つ) の入力文書のテキストを 1 行ずつ比較していきます。 テキスト行が異なっている場合、TextMergeViewerITokenComparator を使用して、マッチング・トークンと非マッチング・トークンの最長シーケンスを検索します。 TextMergeViewer のデフォルト・トークン比較は、空白文字で区切られた文字を対象として行われます。 異なる戦略が必要な場合 (たとえば、Java 認識マージ・ビューアーで Java トークンを比較する場合など) は、クライアントが ITokenComparator インターフェースをインプリメントすることによって、独自のトークン・コンパレーターを作成できます。 TextMergeViewer は、文書全体および文書のサブ範囲に機能します。 文書が部分的である場合、ビューアーの入力は IDocument ではなく IDocumentRange でなければなりません。

範囲ディファレンサー

RangeDifferencer は、マッチングおよび非マッチング比較可能エンティティーの最長シーケンスを検索します。 そのインプリメンテーションは、Webb Miller および Eugene W. Myers 著「A File Comparison Program」、および 1985 年 11 月発行の「Software Practice and Experience」に記載されているオブジェクト化されたアルゴリズムに基づいています。 クライアントは、IRangeComparator のインプリメンテーションとしてディファレンサーへの入力を提供する必要があります。  IRangeComparator は、入力データをエンティティーのシーケンスに分割し、あるエンティティーを別の IRangeComparator 内のエンティティーと比較するためのメソッドを提供します。

たとえば、2 つのテキスト文書を比較し、マッチングおよび非マッチングの最長共通行を検索するには、IRangeComparator のインプリメンテーションが、文書を行に分割し、2 つの行が等しいかどうかテストするためのメソッドを提供する必要があります。 この方法の例については、org.eclipse.compare.internal.DocLineComparator を参照してください。

ディファレンサーは、RangeDifference オブジェクトの配列として、これらのシーケンス間の相違を返します。RangeDifference はそれぞれ、相違の種類 (変更なし、変更、追加、削除) と 2 つまたは 3 つの入力内の基となる比較可能エンティティーの対応する範囲を記述します。

 

Copyright IBM Corp. and others 2000,2002.