Teksten vergelijken
Plak het origineel en de gewijzigde versie, dan wordt elk verschil gemarkeerd, tot op losse woorden.
Plak tekst in beide velden om te vergelijken.
Zo werkt het
De vergelijking zoekt de kortste reeks toegevoegde en verwijderde regels die de ene tekst in de andere verandert, met het algoritme van Eugene Myers uit 1986. Het is dezelfde methode die git standaard gebruikt. Gewijzigde regels worden daarna woord voor woord vergeleken, zodat je precies ziet wat er verschilt.
Toegevoegde regels krijgen een groene achtergrond en verwijderde een rode. Een gewijzigde regel telt als een verwijderde en een toegevoegde, net als in andere diff-tools.
Hoofdletters negeren behandelt Hallo en hallo als gelijk. Witruimte negeren houdt geen rekening met spaties aan het begin en eind van een regel en met meerdere spaties achter elkaar, wat helpt als de inspringing is veranderd.
Unified diff is het tekstformaat dat diff -u oplevert, met drie regels context rond elke wijziging. Je kunt het in een bugmelding plakken of laten inlezen door patch en git apply.
Je teksten verlaten nooit je browser. Heel lange teksten die bijna volledig verschillen, worden niet regel voor regel vergeleken; dan worden alle regels als gewijzigd getoond.
Zo vergelijkt de tool
Eerst worden gelijke regels aan het begin en het eind apart gezet, omdat die bij geen enkele wijziging kunnen horen. Daartussen zoekt het algoritme van Myers de kortste reeks verwijderde en toegevoegde regels. Regeleinden met CR LF of alleen CR worden vooraf LF, zodat dezelfde tekst uit Windows en van een Mac als gelijk telt. Binnen een wijziging staan verwijderde regels vóór toegevoegde, en ze worden op volgorde gekoppeld voor de vergelijking woord voor woord. Woorden worden gesplitst bij spaties en leestekens, dus een gewijzigde komma wordt apart gemarkeerd.
Rekenvoorbeeld
Vergelijk de regels appel, druif, kers met appel, witte druif, kers, dadel, allebei met een regelovergang na de laatste regel. Het algoritme houdt appel en kers, verwijdert druif en voegt witte druif en dadel toe: twee regels toegevoegd en één verwijderd. De regel witte druif wordt aan druif gekoppeld, en alleen het woord witte met de spatie erna wordt als nieuw gemarkeerd. In unified diff is dit één blok met de kop @@ -1,3 +1,4 @@: het begint in beide teksten op regel 1 en beslaat drie regels van de oude tekst en vier van de nieuwe.
Zonder regelovergang na de laatste regel verandert het resultaat. Volgens GNU Diffutils is een laatste regel zonder regelovergang niet gelijk aan dezelfde regel met regelovergang, en kers was alleen in de oude tekst de laatste regel. De tool toont kers dan als verwijderd en toegevoegd, drie regels toegevoegd en twee verwijderd, en schrijft \ No newline at end of file na de laatste regel van beide teksten, zoals diff -u doet. Naast elkaar en in één kolom krijgt de verwijderde regel kers de markering ‘geen regeleinde aan het eind’, omdat hij er anders onveranderd uitziet. Witruimte negeren laat dat verschil buiten beschouwing.
Grenzen
Het werk is beperkt tot 4.000 wijzigingen op regelniveau. Twee teksten van elk 2.001 totaal verschillende regels gaan over die grens, en dan worden alle regels zonder vergelijking als verwijderd en toegevoegd getoond. Op woordniveau ligt de grens op 2.000 wijzigingen per regelpaar, en is meer dan 80% van de tekens veranderd, dan wordt de regel in zijn geheel getoond, zonder markering per woord.
Wat niet zichtbaar wordt
Verplaatste blokken worden niet herkend, omdat het algoritme alleen verwijderen en toevoegen kent. Verplaats je de eerste twee regels van een tekst van vijf regels naar vlak voor de laatste, dan toont de tool twee regels verwijderd en twee toegevoegd. Witruimte negeren voegt spaties binnen een regel samen maar haalt ze niet weg: a,b en a, b tellen nog steeds als verschillend.