Das Vergleichs-Plug-in bietet eine substanzielle Unterstützung für die Implementierung einer eigenen Inhaltsanzeigefunktion:
ContentMergeViewer ist eine abstrakte Anzeigefunktion für Vergleichs- und Mischoperationen mit zwei nebeneinander angeordneten Inhaltsbereichen sowie einem optionalen Inhaltsbereich für einen gemeinsamen Vorgänger (bei einem Dreifachvergleich). Da die Implementierung keinen bestimmten Inhaltstyp voraussetzt, ist die Behandlung eines bestimmten Typs Aufgabe der Unterklasse. ImageMergeViewer in org.eclipse.compare.internal zeigt, wie eine einfache Anzeigefunktion für Mischoperationen von Images unter Verwendung von ContentMergeViewer implementiert wird. ContentMergeViewer greift über einen Inhaltsprovider, der die Schnittstelle IMergeViewerContentProvider implementieren muss, auf sein Modell zu.
TextMergeViewer ist die konkrete Standardunterklasse von ContentMergeViewer für das Vergleichen und Mischen von Textinhalt. Eine Anzeigefunktion für Textmischoperationen verwendet RangeDifferencer, um einen textbezogenen und zeilenweisen Vergleich von zwei (oder drei) Eingabedokumenten auszuführen. Bei abweichenden Textzeilen verwendet TextMergeViewer ein Objekt ITokenComparator, um die längste Folge von übereinstimmenden und abweichenden Token zu ermitteln. Der Standardtokenvergleich von TextMergeViewer kann für Zeichen verwendet werden, die durch Leerzeichen voneinander abgegrenzt sind. Falls eine andere Strategie benötigt wird (beispielsweise Java-Token in einer Java-fähigen Anzeigefunktion für Mischoperationen), können Clients eigene Tokenvergleichsfunktionen erstellen, indem die Schnittstelle ITokenComparator implementiert wird. TextMergeViewer kann für ganze Dokumente und für Teilbereich von Dokumenten verwendet werden. Bei Teildokumenten muss die Eingabe für die Anzeigefunktion ein Objekt IDocumentRange anstelle eines Objekts IDocument sein.
RangeDifferencer ermittelt die längste Folge von übereinstimmenden und abweichenden vergleichbaren Elementen. Seine Implementierung basiert auf einer objektbezogenen Version des Algorithmus', der in A File Comparison Program (Webb Miller und Eugene W. Myers, Software Practice and Experience, Vol. 15, Nov. 1985) beschrieben ist. Clients müssen die Eingabe für die Differenzierung als Implementierung der Schnittstelle IRangeComparator bereitstellen. IRangeComparator zerlegt die Eingabedaten in eine Folge von Elementen und bietet eine Methode für den Vergleich eines Elements mit dem Element in einem anderen IRangeComparator.
Beispiel: Um zwei Textdokumente zu vergleichen und die längsten gemeinsamen Folgen von übereinstimmenden und abweichenden Zeilen zu ermitteln, muss die Implementierung von IRangeComparator das Dokument in Zeilen zerlegen und eine Methode bereitstellen, mit der getestet werden kann, ob zwei Zeilen als identisch betrachtet werden können. Ein Beispiel hierfür finden Sie in org.eclipse.compare.internal.DocLineComparator.
Der Differenzierer gibt die Unterschiede zwischen diesen Abfolgen als einen Bereich von RangeDifference-Objekten zurück. Jedes einzelne Objekt RangeDifference beschreibt die Art des Unterschieds (keine Änderung, Änderung, Hinzufügung, Löschung) und die entsprechenden Bereiche der zu Grunde liegenden vergleichbaren Elemente in den zwei oder drei Eingabeobjekten.