Il plug-in di confronto fornisce supporto sostanziale per l'implementazione del proprio visualizzatore di contenuto:
ContentMergeViewer è un visualizzatore di confronto e unione astratto con due aree di contenuto adiacenti e un'area di contenuto opzionale per un predecessore comune (per il confronto a tre direzioni). Dal momento che l'implementazione non prevede alcun presupposto in merito al tipo di contenuto, si dovrà ricorrere ad una sottoclasse. ImageMergeViewer in org.eclipse.compare.internal mostra come implementare un semplice visualizzatore di unione per le immagini che utilizzano un ContentMergeViewer. ContentMergeViewer accede al suo modello mediante un provider di contenuti che deve implementare l'interfaccia IMergeViewerContentProvider.
TextMergeViewer è la sottoclasse concreta standard di ContentMergeViewer per il confronto e l'unione di contenuto testuale. Un visualizzatore di unione di testo utilizza RangeDifferencer per eseguire un confronto testuale, riga per riga di due (o tre) documenti di input. Per le righe di testo differenti, TextMergeViewer utilizza un ITokenComparator per rilevare le sequenze più lunghe di token corrispondenti e non corrispondenti. Il confronto dei token predefiniti di TextMergeViewer funziona sui caratteri separati da uno spazio. Se è necessario utilizzare una strategia diversa (ad esempio, token Java in un visualizzatore di unione dipendente da Java), i client possono creare proprie utilità di confronto token implementando l'interfaccia ITokenComparator. TextMergeViewer opera su documenti interi e su sottointervalli di documenti. Per i documenti parziali, l'input del visualizzatore deve essere un IDocumentRange al posto di un IDocument.
RangeDifferencer individua le sequenze più lunghe delle entità comparabili corrispondenti e non corrispondenti. La sua implementazione si basa su una versione oggettivizzata dell'algoritmo descritto in: A File Comparison Program, di Webb Miller e Eugene W. Myers, Software Practice and Experience, Vol. 15, Nov. 1985. I client devono fornire l'input al differenziatore come implementazione dell'interfaccia IRangeComparator. IRangeComparator interrompe i dati di input in una sequenza di entità e fornisce un metodo per il confronto di un'entità con l'entità in un altro IRangeComparator.
Ad esempio, per confrontare due documenti di testo e trovare le sequenze comuni più lunghe di righe corrispondenti e non corrispondenti, l'implementazione di IRangeComparator deve suddividere il documento in righe e fornire un metodo per il test se due righe sono considerate uguali. Per un esempio di come si possa eseguire tale operazione, vedere org.eclipse.compare.internal.DocLineComparator.
Questa classe riporta le differenze tra queste sequenze come una matrice di oggetti RangeDifference. Ogni singolo RangeDifference descrive il tipo di differenza (nessuna modifica, modifica, aggiunta, eliminazione) e gli intervalli corrispondenti di entità comparabili sottostanti in due o tre input.