Subject: should produce a diff with similar lines grouped together if possible

From: Vincent Lefevre <[email-masked]>
Date: Fri, 2 May 2025 16:18:26 +0200

"diff" should produce a diff with similar lines grouped together if
possible, so that it can be more easily readable and be word-diff
friendly.

Issues can occur on text files with paragraphs separated by a blank
line (like in wiki source files and LaTeX files), where a modification
consists in
  * some paragraph being split, and
  * some of the following paragraphs being slightly modified.

In such a case, a shift of the slightly modified lines can occur,
which makes the diff hardly readable and breaks word-diff (e.g.
when one opens the diff file with GNU Emacs).

I've attached an example:
  * file1 and file2: the files to be diff'ed (file2 is similar to
    file1, with the first paragraph split).
  * file-bad.diff: the diff produced by diff 3.10.
  * file-ok.diff: the diff I would expect.

-- 
Vincent Lefèvre <[email-masked]> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / Pascaline project (LIP, ENS-Lyon)
--- file1	2025-04-28 04:55:40.705835474 +0200
+++ file2	2025-04-28 04:56:23.245451675 +0200
@@ -1,9 +1,11 @@
-A alias esse quia sunt velit commodi. Voluptas neque dignissimos excepturi quaerat id tempore quia alias. Quia hic dignissimos deleniti at magni id alias id. Qui dolore voluptatem quae. A doloremque illo molestias aperiam expedita voluptatem. Dolorum et dolor quia ullam.
+A alias esse quia sunt velit commodi. Voluptas neque dignissimos excepturi quaerat id tempore quia alias. Quia hic dignissimos deleniti at magni id alias id. *
 
-Rerum culpa hic sint unde. Reprehenderit est quisquam sequi modi possimus. Dolor sit similique vel. Dolorem laborum in non quibusdam et nihil. Sed fugit delectus hic voluptatem et doloremque.
+Qui dolore voluptatem quae. A doloremque illo molestias aperiam expedita voluptatem. Dolorum et dolor quia ullam. *
 
-Qui nesciunt doloremque sed veritatis dignissimos illo. In qui voluptatum quia excepturi unde officiis. Voluptas quia distinctio voluptates tempora qui labore beatae sint. Consequuntur est sed quaerat necessitatibus labore.
+Rerum culpa hic sint unde. Reprehenderit est quisquam sequi modi possimus. Dolor sit similique vel. Dolorem laborum in non quibusdam et nihil. Sed fugit delectus hic voluptatem et doloremque. *
 
-Voluptatem aliquam voluptates natus quibusdam sequi vel iusto. Minus fugit deserunt tenetur. Maiores tempore in ea architecto quaerat aut. Culpa et est quos. Eos in et quia facere porro sit. Iste dolores omnis incidunt aliquam quia labore soluta.
+Qui nesciunt doloremque sed veritatis dignissimos illo. In qui voluptatum quia excepturi unde officiis. Voluptas quia distinctio voluptates tempora qui labore beatae sint. Consequuntur est sed quaerat necessitatibus labore. *
 
-Officia doloremque rerum cum quas aut. Modi eos vel cupiditate dolore nisi non. Non voluptate provident id officia dolor.
+Voluptatem aliquam voluptates natus quibusdam sequi vel iusto. Minus fugit deserunt tenetur. Maiores tempore in ea architecto quaerat aut. Culpa et est quos. Eos in et quia facere porro sit. Iste dolores omnis incidunt aliquam quia labore soluta. *
+
+Officia doloremque rerum cum quas aut. Modi eos vel cupiditate dolore nisi non. Non voluptate provident id officia dolor. *
--- file1	2025-04-28 04:55:40.705835474 +0200
+++ file3	2025-04-28 04:57:38.148841327 +0200
@@ -1,9 +1,11 @@
-A alias esse quia sunt velit commodi. Voluptas neque dignissimos excepturi quaerat id tempore quia alias. Quia hic dignissimos deleniti at magni id alias id. Qui dolore voluptatem quae. A doloremque illo molestias aperiam expedita voluptatem. Dolorum et dolor quia ullam.
+A alias esse quia sunt velit commodi. Voluptas neque dignissimos excepturi quaerat id tempore quia alias. Quia hic dignissimos deleniti at magni id alias id. *
+
+Qui dolore voluptatem quae. A doloremque illo molestias aperiam expedita voluptatem. Dolorum et dolor quia ullam. *
 
-Rerum culpa hic sint unde. Reprehenderit est quisquam sequi modi possimus. Dolor sit similique vel. Dolorem laborum in non quibusdam et nihil. Sed fugit delectus hic voluptatem et doloremque.
+Rerum culpa hic sint unde. Reprehenderit est quisquam sequi modi possimus. Dolor sit similique vel. Dolorem laborum in non quibusdam et nihil. Sed fugit delectus hic voluptatem et doloremque. *
 
-Qui nesciunt doloremque sed veritatis dignissimos illo. In qui voluptatum quia excepturi unde officiis. Voluptas quia distinctio voluptates tempora qui labore beatae sint. Consequuntur est sed quaerat necessitatibus labore.
+Qui nesciunt doloremque sed veritatis dignissimos illo. In qui voluptatum quia excepturi unde officiis. Voluptas quia distinctio voluptates tempora qui labore beatae sint. Consequuntur est sed quaerat necessitatibus labore. *
 
-Voluptatem aliquam voluptates natus quibusdam sequi vel iusto. Minus fugit deserunt tenetur. Maiores tempore in ea architecto quaerat aut. Culpa et est quos. Eos in et quia facere porro sit. Iste dolores omnis incidunt aliquam quia labore soluta.
+Voluptatem aliquam voluptates natus quibusdam sequi vel iusto. Minus fugit deserunt tenetur. Maiores tempore in ea architecto quaerat aut. Culpa et est quos. Eos in et quia facere porro sit. Iste dolores omnis incidunt aliquam quia labore soluta. *
 
-Officia doloremque rerum cum quas aut. Modi eos vel cupiditate dolore nisi non. Non voluptate provident id officia dolor.
+Officia doloremque rerum cum quas aut. Modi eos vel cupiditate dolore nisi non. Non voluptate provident id officia dolor. *