diff --git a/src/main/java/difflib/algorithm/myers/MyersDiff.java b/src/main/java/difflib/algorithm/myers/MyersDiff.java index e616643..e5b39e6 100644 --- a/src/main/java/difflib/algorithm/myers/MyersDiff.java +++ b/src/main/java/difflib/algorithm/myers/MyersDiff.java @@ -33,15 +33,7 @@ import java.util.List; import java.util.Objects; /** - * A clean-room implementation of - * Eugene Myers differencing algorithm. - * - *

- * See the paper at - * http://www.cs.arizona.edu/people/gene/PAPERS/diff.ps

- * - * @author Juanco Anez - * @param T The type of the compared elements in the 'lines'. + * A clean-room implementation of Eugene Myers greedy differencing algorithm. */ public final class MyersDiff implements DiffAlgorithm { @@ -116,8 +108,8 @@ public final class MyersDiff implements DiffAlgorithm { final int kplus = kmiddle + 1; final int kminus = kmiddle - 1; PathNode prev = null; - int i; + if ((k == -d) || (k != d && diagonal[kminus].i < diagonal[kplus].i)) { i = diagonal[kplus].i; prev = diagonal[kplus]; diff --git a/src/main/java/difflib/algorithm/myers/package.html b/src/main/java/difflib/algorithm/myers/package.html deleted file mode 100644 index 922bab2..0000000 --- a/src/main/java/difflib/algorithm/myers/package.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - -

- The {@link difflib.myers diff.myers} package - implements Gene Myers' - differencing algorithm. -

-

- Myer's algorithm produces optimum results (minimum diffs), but - consumes considerably more memory than SimpleDiff, so its not - suitable for very large files. -

- @author Juanco Anez - - diff --git a/src/main/java/difflib/text/DiffRowGenerator.java b/src/main/java/difflib/text/DiffRowGenerator.java index 08e2984..1fc847e 100644 --- a/src/main/java/difflib/text/DiffRowGenerator.java +++ b/src/main/java/difflib/text/DiffRowGenerator.java @@ -172,6 +172,10 @@ public class DiffRowGenerator { return new Builder(); } + public static final Equalizer IGNORE_WHITESPACE_EQUALIZER = (original, revised) + -> original.trim().replaceAll("\\s+", " ").equals(revised.trim().replaceAll("\\s+", " ")); + public static final Equalizer DEFAULT_EQUALIZER = Object::equals; + private DiffRowGenerator(Builder builder) { showInlineDiffs = builder.showInlineDiffs; ignoreWhiteSpaces = builder.ignoreWhiteSpaces; @@ -180,16 +184,7 @@ public class DiffRowGenerator { columnWidth = builder.columnWidth; mergeOriginalRevised = builder.mergeOriginalRevised; inlineDiffByWord = builder.inlineDiffByWord; - equalizer = new Equalizer() { - @Override - public boolean equals(String original, String revised) { - if (ignoreWhiteSpaces) { - return original.trim().replaceAll("\\s+", " ").equals(revised.trim().replaceAll("\\s+", " ")); - } else { - return original.equals(revised); - } - } - }; + equalizer = ignoreWhiteSpaces?IGNORE_WHITESPACE_EQUALIZER:DEFAULT_EQUALIZER; } /**