@@ -71,6 +71,11 @@ public class DiffRowGenerator {
7171 public boolean equals (String original , String revised ) {
7272 return Objects .equals (original , revised );
7373 }
74+
75+ @ Override
76+ public boolean skip (String original ) {
77+ return false ;
78+ }
7479 });
7580
7681 private final boolean showInlineDiffs ;
@@ -331,6 +336,9 @@ public List<DiffRow> generateDiffRows(List<String> original, List<String> revise
331336 int orgEndPos = 0 ;
332337 int revEndPos = 0 ;
333338 final List <Delta <String >> deltaList = patch .getDeltas ();
339+
340+ Equalizer <String > equalizer = diffAlgorithm .getEqualizer ();
341+
334342 for (int i = 0 ; i < deltaList .size (); i ++) {
335343 Delta <String > delta = deltaList .get (i );
336344 Chunk <String > orig = delta .getOriginal ();
@@ -345,14 +353,19 @@ public List<DiffRow> generateDiffRows(List<String> original, List<String> revise
345353 rev .setLines (StringUtills .wrapText (rev .getLines (), this .columnWidth ));
346354 }
347355 // catch the equal prefix for each chunk
348- copyEqualsLines (diffRows , original , orgEndPos , orig .getPosition (), revised , revEndPos , rev .getPosition ());
356+ copyEqualsLines (equalizer , diffRows , original , orgEndPos , orig .getPosition (), revised , revEndPos ,
357+ rev .getPosition ());
349358
350359 // Inserted DiffRow
351360 if (delta .getClass () == InsertDelta .class ) {
352361 orgEndPos = orig .last () + 1 ;
353362 revEndPos = rev .last () + 1 ;
354363 for (String line : rev .getLines ()) {
355- diffRows .add (new DiffRow (Tag .INSERT , defaultString , line ));
364+ if (equalizer .skip (line )) {
365+ diffRows .add (new DiffRow (Tag .SKIP , defaultString , line ));
366+ } else {
367+ diffRows .add (new DiffRow (Tag .INSERT , defaultString , line ));
368+ }
356369 }
357370 continue ;
358371 }
@@ -362,7 +375,11 @@ public List<DiffRow> generateDiffRows(List<String> original, List<String> revise
362375 orgEndPos = orig .last () + 1 ;
363376 revEndPos = rev .last () + 1 ;
364377 for (String line : orig .getLines ()) {
365- diffRows .add (new DiffRow (Tag .DELETE , line , defaultString ));
378+ if (equalizer .skip (line )) {
379+ diffRows .add (new DiffRow (Tag .SKIP , line , defaultString ));
380+ } else {
381+ diffRows .add (new DiffRow (Tag .DELETE , line , defaultString ));
382+ }
366383 }
367384 continue ;
368385 }
@@ -373,30 +390,49 @@ public List<DiffRow> generateDiffRows(List<String> original, List<String> revise
373390 // the changed size is match
374391 if (orig .size () == rev .size ()) {
375392 for (int j = 0 ; j < orig .size (); j ++) {
376- diffRows . add ( new DiffRow ( Tag . CHANGE , orig .getLines ().get (j ), rev .getLines ().get (j )) );
393+ addChangeDiffRow ( equalizer , diffRows , orig .getLines ().get (j ), rev .getLines ().get (j ), defaultString );
377394 }
378395 } else if (orig .size () > rev .size ()) {
379396 for (int j = 0 ; j < orig .size (); j ++) {
380- diffRows .add (new DiffRow (Tag .CHANGE , orig .getLines ().get (j ),
381- rev .getLines ().size () > j ? (String ) rev .getLines ().get (j ) : defaultString ));
397+ final String orgLine = orig .getLines ().get (j );
398+ final String revLine = rev .getLines ().size () > j ? rev .getLines ().get (j ) : defaultString ;
399+ addChangeDiffRow (equalizer , diffRows , orgLine , revLine , defaultString );
382400 }
383401 } else {
384402 for (int j = 0 ; j < rev .size (); j ++) {
385- diffRows .add (new DiffRow (Tag .CHANGE , orig .getLines ().size () > j ? orig .getLines ().get (j )
386- : defaultString , rev .getLines ().get (j )));
403+ final String orgLine = orig .getLines ().size () > j ? orig .getLines ().get (j ) : defaultString ;
404+ final String revLine = rev .getLines ().get (j );
405+ addChangeDiffRow (equalizer , diffRows , orgLine , revLine , defaultString );
387406 }
388407 }
389408 orgEndPos = orig .last () + 1 ;
390409 revEndPos = rev .last () + 1 ;
391410 }
392411
393412 // Copy the final matching chunk if any.
394- copyEqualsLines (diffRows , original , orgEndPos , original .size (), revised , revEndPos , revised .size ());
413+ copyEqualsLines (equalizer , diffRows , original , orgEndPos , original .size (), revised , revEndPos , revised .size ());
395414 return diffRows ;
396415 }
397416
398- protected void copyEqualsLines (List <DiffRow > diffRows , List <String > original , int originalStartPos ,
399- int originalEndPos , List <String > revised , int revisedStartPos , int revisedEndPos ) {
417+ private static final void addChangeDiffRow (Equalizer <String > equalizer , List <DiffRow > diffRows , String orgLine ,
418+ String revLine , String defaultString ) {
419+ boolean skipOrg = equalizer .skip (orgLine );
420+ boolean skipRev = equalizer .skip (revLine );
421+ if (skipOrg && skipRev ) {
422+ diffRows .add (new DiffRow (Tag .SKIP , orgLine , revLine ));
423+ } else if (skipOrg ) {
424+ diffRows .add (new DiffRow (Tag .SKIP , orgLine , defaultString ));
425+ diffRows .add (new DiffRow (Tag .CHANGE , defaultString , revLine ));
426+ } else if (skipRev ) {
427+ diffRows .add (new DiffRow (Tag .CHANGE , orgLine , defaultString ));
428+ diffRows .add (new DiffRow (Tag .SKIP , defaultString , revLine ));
429+ } else {
430+ diffRows .add (new DiffRow (Tag .CHANGE , orgLine , revLine ));
431+ }
432+ }
433+
434+ protected void copyEqualsLines (Equalizer <String > equalizer , List <DiffRow > diffRows , List <String > original ,
435+ int originalStartPos , int originalEndPos , List <String > revised , int revisedStartPos , int revisedEndPos ) {
400436 String [][] lines = new String [originalEndPos - originalStartPos ][2 ];
401437 int idx = 0 ;
402438 for (String line : original .subList (originalStartPos , originalEndPos )) {
@@ -407,7 +443,13 @@ protected void copyEqualsLines(List<DiffRow> diffRows, List<String> original, in
407443 lines [idx ++][1 ] = line ;
408444 }
409445 for (String [] line : lines ) {
410- diffRows .add (new DiffRow (Tag .EQUAL , line [0 ], line [1 ]));
446+ String orgLine = line [0 ];
447+ String revLine = line [1 ];
448+ if (equalizer .skip (orgLine ) && equalizer .skip (revLine )) {
449+ diffRows .add (new DiffRow (Tag .SKIP , orgLine , revLine ));
450+ } else {
451+ diffRows .add (new DiffRow (Tag .EQUAL , orgLine , revLine ));
452+ }
411453 }
412454 }
413455
0 commit comments