Med insticksprogrammet för jämförelse kan du tillföra specialanpassade visningsprogram för att visa och sammanslå innehållsskillnader mellan ostrukturerade element.
Ett visningsprogram används på ställen där endast en enda inmatning är tillgänglig och jämförelse behövs således inte. Ett typiskt exempel på detta är funktionen "Återställ från lokal historik". Med utökningspunkten org.eclipse.compare.contentViewers kan du definiera specialanpassade visningsprogram som inte jämför indata.
<extension point="org.eclipse.compare.contentViewers"> <viewer extensions="java,java2" class="org.eclipse.jdt.internal.ui.compare.JavaTextViewerCreator" id="org.eclipse.jdt.internal.ui.compare.JavaTextViewerCreator"> </viewer> <contentTypeBinding contentTypeId="org.eclipse.jdt.core.javaSource" contentViewerId="org.eclipse.jdt.internal.ui.compare.JavaTextViewerCreator"> </contentTypeBinding> </extension>
Specialanpassade visningsprogram som tillhandahålls av insticksprogrammet benäms i elementet viewer. Du måste ange ID för visningsprogrammet och klassen som skapar det. Du kan även ange eventuella filtillägg för vilka visningsprogrammet ska användas.
Du kan även använda elementet contentTypeBinding för att associera en innehållstyp till visningsprogrammet.
I ett visningsprogram för innehållssammanslagning utförs en tvåvägs- eller trevägsjämförelse av indata. Resultatet visas sida-vid-sida eller på annat lämpligt sätt. Användaren kan sammanfoga olika indata i visningsprogrammet. Dessa visningsprogram används ofta för text eller bilder.
Om standardprogrammet för sammanslagning inte är lämpligt för funktionen i ditt insticksprogram, kan du implementera ett eget visningsprogram. Detta ska registreras i plattformen med hjälp utökningspunkten org.eclipse.compare.contentMergeViewers. Följande kodstycke visar definitionen av specialanpassade visningsprogram för innehållssammanslagning när Java-filer och egenskapsfiler i Java IDE ska granskas:
<extension point="org.eclipse.compare.contentMergeViewers"> <viewer extensions="java,java2" class="org.eclipse.jdt.internal.ui.compare.JavaContentViewerCreator" id="org.eclipse.jdt.internal.ui.compare.JavaContentViewerCreator"> </viewer> <contentTypeBinding contentTypeId="org.eclipse.jdt.core.javaProperties" contentMergeViewerId="org.eclipse.compare.TextMergeViewerCreator"> </contentTypeBinding> <contentTypeBinding contentTypeId="org.eclipse.jdt.core.javaSource" contentMergeViewerId="org.eclipse.jdt.internal.ui.compare.JavaContentViewerCreator"> </contentTypeBinding> </extension>
På samma sätt som visningsprogram för innehåll som tillhandahålls av ditt insticksprogram, utformas även specialanpassade visningsprogram för sammanslagning i elementet viewer. Du måste ange ID för visningsprogrammet och klassen som skapar det. Du kan även ange eventuella filtillägg för vilka visningsprogrammet ska användas.
Du kan även, som för visningsprogram för innehåll, använda contentTypeBinding för att associera en innehållstyp till ett visningsprogram för sammanslagning. JDT-insticksprogrammet binder visningsprogram för sammanslagning till två olika innehållstyper: Java-källfiler och Java-egenskapsfiler.
ContentMergeViewer är ett abstrakt visningsprogram för jämförelse och sammanslagning med två innehållsområden bredvid varandra och ett extra innehållsområde för ett gemensamt överordnat objekt (för trevägsjämförelse). Eftersom det inte görs några antaganden om innehållstypen i implementeringen, ansvarar subklassen för hantering av den specifika innehållstypen.
ImageMergeViewer i org.eclipse.compare.internal visar hur man implementerar ett enkelt visningsprogram för sammanslagning av bilder med hjälp av ettContentMergeViewer. Ett ContentMergeViewer accessar sin modell med hjälp av en innehållsprovider som måste implementera gränssnittet IMergeViewerContentProvider.
Om text används i visningsprogrammet, kan tilläggsklasser som jämför och sammanfogar textinnehåll användas.
TextMergeViewer är en konkret subklass hos ContentMergeViewer som används för jämförelse och sammanslagning av textinnehåll. I ett visningsprogram för textsammanslagning används RangeDifferencer för att utföra en textjämförelse rad-för-rad av två (eller tre) indokument.
För textrader med avvikelse, använder TextMergeViewer en ITokenComparator för att hitta den längsta sekvensen av matchande och icke-matchande element. Standardelementsjämförelse i TextMergeViewer utgörs av tecken som avskiljs med blanktecken. Om en annan strategi krävs (t.ex. Java-element i ett visningsprogram för sammanslagning Java-funktioner) går det att skapa egna elementkomparatorer genom implementering av gränssnittet ITokenComparator.
TextMergeViewer arbetar med hela dokument och med deras subområden. För deldokument måste indata till visningsprogrammet vara en IDocumentRange i stället för en IDocument.
RangeDifferencer hittar den längsta sekvensen av matchande och icke-matchande jämförbara enheter i textinnehåll. Dess implementering baseras på en objektversion av algoritmen som beskrivs i: A File Comparison Program, av Webb Miller och Eugene W. Myers, Software Practice and Experience, Vol. 15, Nov. 1985. Klienter måste tillföra indata till differensmotorn som implementerar gränssnittet IRangeComparator. IRangeComparator bryter upp indata i en sekvens av enheter och ger en metod för jämförelse av en enhet med enheten i en annan IRangeComparator.
För att t.ex. jämföra två textdokument och hitta den längsta gemensamma sekvensen av matchande och icke-matchande rader, måste implementeringen av IRangeComparator bryta upp dokumentet i rader och ge en metod för att testa om två rader är lika. Ett exempel på hur man kan göra detta visas i org.eclipse.compare.internal.DocLineComparator.
Differensmotorn returnerar skillnaderna i dessa sekvenser som en vektor av RangeDifference-objekt. Varje enstaka RangeDifference beskriver differenstypen (ingen ändring, ändring, tillägg, borttagning) och motsvarande områden av underliggande jämförbara enheter i två eller tre inmatningar.