Implémentation d'un afficheur de contenu

Le plug-in de comparaison fournit un support pour l'implémentation de votre propre afficheur de contenu :

Afficheurs de fusion de contenu

ContentMergeViewer correspond à un afficheur abstrait de comparaison et de fusion, composé de deux zones de contenu côte à côte et d'une zone facultative pour un ancêtre commun (pour les comparaisons trilatérales). Dans la mesure où la mise en oeuvre n'émet aucune hypothèse concernant le type de contenu, il appartient à une sous-classe de prendre en charge un type spécifique. ImageMergeViewer dans org.eclipse.compare.internal illustre comment implémenter un afficheur de fusion pour des images à l'aide de ContentMergeViewerContentMergeViewer accède à son modèle grâce à un fournisseur de contenu devant implémenter l'interface IMergeViewerContentProvider.

Afficheurs de fusion de texte

TextMergeViewer correspond à la sous-classe concrète standard de ContentMergeViewer pour la comparaison et la fusion de texte. Un afficheur de fusion de texte utilise RangeDifferencer pour effectuer une comparaison textuelle ligne par ligne de deux ou trois documents d'entrée. Pour les lignes de texte différentes, TextMergeViewer utilise un ITokenComparator pour rechercher les séquences les plus longues des jetons concordants et non concordants. La comparaison de jeton par défaut de TextMergeViewer porte sur les caractères séparés par un espace. Si une stratégie différente est requises (par exemple, des jetons Java dans un afficheur de fusion Java), les clients peuvent créer leurs propres comparateurs de jetons en mettant en oeuvre l'interface ITokenComparatorTextMergeViewer fonctionne sur des documents entiers et les sous-ensembles de documents. Dans le cas de documents partiels, l'entrée de l'afficheur doit être un IDocumentRange au lieu d'un IDocument.

Module d'analyse des différences d'ensembles

RangeDifferencer recherche les plus longues séquences d'entités comparables concordantes ou non concordantes. Son implémentation est basée sur une version de l'algorithme décrit dans A File Comparison Program,, de Webb Miller et Eugene W. Myers, Software Practice and Experience, Vol. 15, Nov. 1985. Les clients doivent fournir l'entrée au module d'analyse des différences comme implémentation de l'interface IRangeComparator. IRangeComparator divise les données d'entrée en une séquence d'entités et fournit une méthode de comparaison d'une entité avec celle d'une autre interface IRangeComparator.

Par exemple, pour comparer deux documents de texte et trouver les séquences courantes les plus longues de lignes concordantes et non concordantes, l'implémentation de IRangeComparator doit diviser le document en lignes et fournir une méthode pour vérifier si deux lignes sont identiques. Observez org.eclipse.compare.internal.DocLineComparator à titre d'exemple.

Le module d'analyse de différences renvoie les différences dans ces séquences sous la forme d'un tableau d'objets RangeDifference.Chaque RangeDifference décrit le type de différence (pas de changement, changement, ajout, suppression) et les ensembles correspondants des entités comparables sou-jacentes dans les deux ou trois entrées.

 

Copyright IBM Corp. and others 2000,2002.