El conector de comparación proporciona un soporte importante que le permitirá implementar su propio visor de contenido:
El objeto ContentMergeViewer es un visor abstracto de comparación y fusión que tiene dos áreas de contenido, situadas una al lado de la otra, y un área de contenido opcional para un ancestro común (en las comparaciones de tres vías). Dado que la implementación no realiza ninguna presunción acerca del tipo del contenido, es responsabilidad de una subclase manejar un tipo específico. El objeto ImageMergeViewer de org.eclipse.compare.internal enseña a implementar un visor de fusión simple de imágenes utilizando un objeto ContentMergeViewer. El objeto ContentMergeViewer accede al correspondiente modelo por medio de un proveedor de contenido, que debe implementar la interfaz IMergeViewerContentProvider.
El objeto TextMergeViewer es una subclase estándar concreta de la clase ContentMergeViewer, que permite comparar y fusionar contenido de tipo texto. El visor de fusión de texto emplea el objeto RangeDifferencer para realizar una comparación de texto, línea a línea, de dos (o tres) documentos de entrada. En el caso de que las líneas de texto sean distintas, el visor TextMergeViewer utiliza una interfaz ITokenComparator para localizar las secuencias más largas de símbolos coincidentes y no coincidentes. La comparación de símbolos por omisión de TextMergeViewer funciona en los caracteres separados por espacios en blanco. Si se necesita una estrategia diferente (por ejemplo, símbolos Java en un visor de fusión sensible a Java), los clientes pueden crear sus propios comparadores de símbolos implementando la interfaz ITokenComparator. El objeto TextMergeViewer funciona en documentos enteros y en subrangos de documentos. En el caso de los documentos parciales, la entrada del visor debe ser una interfaz IDocumentRange, en vez de una interfaz IDocument.
El objeto RangeDifferencer localiza las secuencias más largas de entidades comparables coincidentes y no coincidentes. Su implementación está basada en una versión convertida en objeto del algoritmo descrito en la publicación A File Comparison Program, de Webb Miller y Eugene W. Myers, Software Practice and Experience, Vol. 15, Noviembre de 1985. Los clientes deben suministrar la entrada del diferenciador como implementación de la interfaz IRangeComparator. Una interfaz IRangeComparator descompone los datos de entrada en una secuencia de entidades y proporciona un método para comparar una entidad con la entidad situada en otra interfaz IRangeComparator.
Por ejemplo, para comparar dos documentos de texto y localizar las secuencias comunes más largas de líneas coincidentes y no coincidentes, la implementación de IRangeComparator debe descomponer el documento en líneas y proporcionar un método para comprobar si dos líneas se consideran iguales. En org.eclipse.compare.internal.DocLineComparator hallará un ejemplo de cómo hacerlo.
El diferenciador devuelve las diferencias existentes entre estas secuencias en forma de matriz de objetos RangeDifference. Cada RangeDifference individual describe el tipo de diferencia (sin cambio, cambio, adición, supresión) y los correspondientes rangos de las entidades comparables subyacentes de las dos o tres entradas.