Un diff par lignes ne lit pas comme une personne. Il transforme chaque texte normalisé en une suite ordonnée de lignes complètes, trouve la plus longue suite commune et décrit le reste comme retraits ou ajouts. C’est une carte précise pour du code, des notes et des documents ordinaires, mais il ne décide pas si deux formulations ont le même sens.
La ligne complète est l’unité
TextDiff normalise CRLF et les retours isolés en LF afin que les fins Windows et Unix ne créent pas de faux changements. Chaque jeton conserve les caractères visibles et la présence du LF suivant. Cette dernière donnée compte : `alpha` sans retour et `alpha` avec retour final sont deux états distincts. Un texte vide n’a aucune ligne ; un seul retour contient une ligne vide terminée. Ces règles rendent les compteurs reproductibles.
L’axe est une plus longue sous-séquence commune
Une sous-séquence garde l’ordre tout en sautant des éléments. Si les deux versions ont `alpha` avant `gamma`, elles forment un axe commun même avec `delta` entre elles. La programmation dynamique calcule le maximum de jetons correspondants depuis chaque paire de positions. La reconstruction transforme les correspondances en lignes conservées, les sauts d’origine en retraits et ceux de révision en ajouts. C’est une séquence minimale d’insertions et retraits, pas une affirmation sur l’intention de remplacement.
Le travail exact est borné et le sens reste extérieur
Deux grands fichiers identiques sont peu coûteux après retrait du préfixe commun. Deux fichiers sans rapport exigent une grande table ; TextDiff s’arrête donc si le milieu différent dépasse huit millions de paires. Il demande des sections plus petites au lieu de changer silencieusement d’algorithme. Le résultat décrit seulement l’identité des lignes. La similarité vaut deux fois les lignes conservées sur les deux totaux ; elle ne mesure ni sens, plagiat, auteur ou validité d’une révision importante.