Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita8e4ce2

Browse files
committed
fixes#65
1 parent9bd7aaa commita8e4ce2

File tree

2 files changed

+119
-14
lines changed

2 files changed

+119
-14
lines changed

‎java-diff-utils/src/main/java/com/github/difflib/text/DiffRowGenerator.java‎

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public final class DiffRowGenerator {
6161
}
6262
returnlist;
6363
};
64+
6465
publicstaticfinalPatternSPLIT_BY_WORD_PATTERN =Pattern.compile("\\s+|[,.\\[\\](){}/\\\\*+\\-#]");
6566

6667
/**
@@ -106,7 +107,7 @@ protected final static List<String> splitStringPreserveDelimiter(String str, Pat
106107
*/
107108
staticvoidwrapInTag(List<String>sequence,intstartPosition,
108109
intendPosition,Tagtag,BiFunction<Tag,Boolean,String>tagGenerator,
109-
Function<String,String>processDiffs) {
110+
Function<String,String>processDiffs,booleanreplaceLinefeedWithSpace) {
110111
intendPos =endPosition;
111112

112113
while (endPos >=startPosition) {
@@ -115,6 +116,9 @@ static void wrapInTag(List<String> sequence, int startPosition,
115116
while (endPos >startPosition) {
116117
if (!"\n".equals(sequence.get(endPos -1))) {
117118
break;
119+
}elseif (replaceLinefeedWithSpace) {
120+
sequence.set(endPos -1," ");
121+
break;
118122
}
119123
endPos--;
120124
}
@@ -133,7 +137,11 @@ static void wrapInTag(List<String> sequence, int startPosition,
133137
//search position for end tag
134138
while (endPos >startPosition) {
135139
if ("\n".equals(sequence.get(endPos -1))) {
136-
break;
140+
if (replaceLinefeedWithSpace) {
141+
sequence.set(endPos -1," ");
142+
}else {
143+
break;
144+
}
137145
}
138146
if (processDiffs !=null) {
139147
sequence.set(endPos -1,
@@ -159,6 +167,7 @@ static void wrapInTag(List<String> sequence, int startPosition,
159167
privatefinalFunction<String,String>processDiffs;
160168

161169
privatefinalbooleanshowInlineDiffs;
170+
privatefinalbooleanreplaceOriginalLinefeedInChangesWithSpaces;
162171

163172
privateDiffRowGenerator(Builderbuilder) {
164173
showInlineDiffs =builder.showInlineDiffs;
@@ -178,6 +187,8 @@ private DiffRowGenerator(Builder builder) {
178187
reportLinesUnchanged =builder.reportLinesUnchanged;
179188
lineNormalizer =builder.lineNormalizer;
180189
processDiffs =builder.processDiffs;
190+
191+
replaceOriginalLinefeedInChangesWithSpaces =builder.replaceOriginalLinefeedInChangesWithSpaces;
181192

182193
Objects.requireNonNull(inlineDiffSplitter);
183194
Objects.requireNonNull(lineNormalizer);
@@ -313,19 +324,19 @@ private List<DiffRow> generateInlineDiffs(AbstractDelta<String> delta) {
313324
if (inlineDelta.getType() ==DeltaType.DELETE) {
314325
wrapInTag(origList,inlineOrig.getPosition(),inlineOrig
315326
.getPosition()
316-
+inlineOrig.size(),Tag.DELETE,oldTag,processDiffs);
327+
+inlineOrig.size(),Tag.DELETE,oldTag,processDiffs,replaceOriginalLinefeedInChangesWithSpaces &&mergeOriginalRevised);
317328
}elseif (inlineDelta.getType() ==DeltaType.INSERT) {
318329
if (mergeOriginalRevised) {
319330
origList.addAll(inlineOrig.getPosition(),
320331
revList.subList(inlineRev.getPosition(),
321332
inlineRev.getPosition() +inlineRev.size()));
322333
wrapInTag(origList,inlineOrig.getPosition(),
323334
inlineOrig.getPosition() +inlineRev.size(),
324-
Tag.INSERT,newTag,processDiffs);
335+
Tag.INSERT,newTag,processDiffs,false);
325336
}else {
326337
wrapInTag(revList,inlineRev.getPosition(),
327338
inlineRev.getPosition() +inlineRev.size(),
328-
Tag.INSERT,newTag,processDiffs);
339+
Tag.INSERT,newTag,processDiffs,false);
329340
}
330341
}elseif (inlineDelta.getType() ==DeltaType.CHANGE) {
331342
if (mergeOriginalRevised) {
@@ -334,15 +345,15 @@ private List<DiffRow> generateInlineDiffs(AbstractDelta<String> delta) {
334345
inlineRev.getPosition() +inlineRev.size()));
335346
wrapInTag(origList,inlineOrig.getPosition() +inlineOrig.size(),
336347
inlineOrig.getPosition() +inlineOrig.size() +inlineRev.size(),
337-
Tag.CHANGE,newTag,processDiffs);
348+
Tag.CHANGE,newTag,processDiffs,false);
338349
}else {
339350
wrapInTag(revList,inlineRev.getPosition(),
340351
inlineRev.getPosition() +inlineRev.size(),
341-
Tag.CHANGE,newTag,processDiffs);
352+
Tag.CHANGE,newTag,processDiffs,false);
342353
}
343354
wrapInTag(origList,inlineOrig.getPosition(),
344355
inlineOrig.getPosition() +inlineOrig.size(),
345-
Tag.CHANGE,oldTag,processDiffs);
356+
Tag.CHANGE,oldTag,processDiffs,replaceOriginalLinefeedInChangesWithSpaces &&mergeOriginalRevised);
346357
}
347358
}
348359
StringBuilderorigResult =newStringBuilder();
@@ -385,10 +396,10 @@ public static class Builder {
385396
privatebooleanshowInlineDiffs =false;
386397
privatebooleanignoreWhiteSpaces =false;
387398

388-
privateBiFunction<Tag,Boolean,String>oldTag =
389-
(tag,f) ->f ?"<span class=\"editOldInline\">" :"</span>";
390-
privateBiFunction<Tag,Boolean,String>newTag =
391-
(tag,f) ->f ?"<span class=\"editNewInline\">" :"</span>";
399+
privateBiFunction<Tag,Boolean,String>oldTag
400+
=(tag,f) ->f ?"<span class=\"editOldInline\">" :"</span>";
401+
privateBiFunction<Tag,Boolean,String>newTag
402+
=(tag,f) ->f ?"<span class=\"editNewInline\">" :"</span>";
392403

393404
privateintcolumnWidth =0;
394405
privatebooleanmergeOriginalRevised =false;
@@ -397,6 +408,7 @@ public static class Builder {
397408
privateFunction<String,String>lineNormalizer =LINE_NORMALIZER_FOR_HTML;
398409
privateFunction<String,String>processDiffs =null;
399410
privateBiPredicate<String,String>equalizer =null;
411+
privatebooleanreplaceOriginalLinefeedInChangesWithSpaces =false;
400412

401413
privateBuilder() {
402414
}
@@ -445,7 +457,7 @@ public Builder oldTag(BiFunction<Tag, Boolean, String> generator) {
445457
this.oldTag =generator;
446458
returnthis;
447459
}
448-
460+
449461
/**
450462
* Generator for Old-Text-Tags.
451463
*
@@ -467,7 +479,7 @@ public Builder newTag(BiFunction<Tag, Boolean, String> generator) {
467479
this.newTag =generator;
468480
returnthis;
469481
}
470-
482+
471483
/**
472484
* Generator for New-Text-Tags.
473485
*
@@ -575,5 +587,17 @@ public Builder equalizer(BiPredicate<String, String> equalizer) {
575587
this.equalizer =equalizer;
576588
returnthis;
577589
}
590+
591+
/**
592+
* Sometimes it happens that a change contains multiple lines. If there is no correspondence
593+
* in old and new. To keep the merged line more readable the linefeeds could be replaced
594+
* by spaces.
595+
* @param replace
596+
* @return
597+
*/
598+
publicBuilderreplaceOriginalLinefeedInChangesWithSpaces(booleanreplace) {
599+
this.replaceOriginalLinefeedInChangesWithSpaces =replace;
600+
returnthis;
601+
}
578602
}
579603
}

‎java-diff-utils/src/test/java/com/github/difflib/text/DiffRowGeneratorTest.java‎

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,4 +498,85 @@ public void testReplaceDiffsIssue63() {
498498

499499
assertEquals("This~//~**/**is~//~**/**a~//~**/**test~.~",rows.get(0).getOldLine());
500500
}
501+
502+
@Test
503+
publicvoidtestProblemTooManyDiffRowsIssue65() {
504+
DiffRowGeneratorgenerator =DiffRowGenerator.create()
505+
.showInlineDiffs(true)
506+
.reportLinesUnchanged(true)
507+
.oldTag(f ->"~")
508+
.newTag(f ->"**")
509+
.mergeOriginalRevised(true)
510+
.inlineDiffByWord(false)
511+
.replaceOriginalLinefeedInChangesWithSpaces(true)
512+
.build();
513+
514+
List<DiffRow>diffRows =generator.generateDiffRows(
515+
Arrays.asList("Ich möchte nicht mit einem Bot sprechen.","Ich soll das schon wieder wiederholen?"),
516+
Arrays.asList("Ich möchte nicht mehr mit dir sprechen. Leite mich weiter.","Kannst du mich zum Kundendienst weiterleiten?"));
517+
518+
print(diffRows);
519+
520+
assertThat(diffRows).hasSize(2);
521+
}
522+
523+
@Test
524+
publicvoidtestProblemTooManyDiffRowsIssue65_NoMerge() {
525+
DiffRowGeneratorgenerator =DiffRowGenerator.create()
526+
.showInlineDiffs(true)
527+
.reportLinesUnchanged(true)
528+
.oldTag(f ->"~")
529+
.newTag(f ->"**")
530+
.mergeOriginalRevised(false)
531+
.inlineDiffByWord(false)
532+
.build();
533+
534+
List<DiffRow>diffRows =generator.generateDiffRows(
535+
Arrays.asList("Ich möchte nicht mit einem Bot sprechen.","Ich soll das schon wieder wiederholen?"),
536+
Arrays.asList("Ich möchte nicht mehr mit dir sprechen. Leite mich weiter.","Kannst du mich zum Kundendienst weiterleiten?"));
537+
538+
System.out.println(diffRows);
539+
540+
assertThat(diffRows).hasSize(2);
541+
}
542+
543+
@Test
544+
publicvoidtestProblemTooManyDiffRowsIssue65_DiffByWord() {
545+
DiffRowGeneratorgenerator =DiffRowGenerator.create()
546+
.showInlineDiffs(true)
547+
.reportLinesUnchanged(true)
548+
.oldTag(f ->"~")
549+
.newTag(f ->"**")
550+
.mergeOriginalRevised(true)
551+
.inlineDiffByWord(true)
552+
.build();
553+
554+
List<DiffRow>diffRows =generator.generateDiffRows(
555+
Arrays.asList("Ich möchte nicht mit einem Bot sprechen.","Ich soll das schon wieder wiederholen?"),
556+
Arrays.asList("Ich möchte nicht mehr mit dir sprechen. Leite mich weiter.","Kannst du mich zum Kundendienst weiterleiten?"));
557+
558+
System.out.println(diffRows);
559+
560+
assertThat(diffRows).hasSize(2);
561+
}
562+
563+
@Test
564+
publicvoidtestProblemTooManyDiffRowsIssue65_NoInlineDiff() {
565+
DiffRowGeneratorgenerator =DiffRowGenerator.create()
566+
.showInlineDiffs(false)
567+
.reportLinesUnchanged(true)
568+
.oldTag(f ->"~")
569+
.newTag(f ->"**")
570+
.mergeOriginalRevised(true)
571+
.inlineDiffByWord(false)
572+
.build();
573+
574+
List<DiffRow>diffRows =generator.generateDiffRows(
575+
Arrays.asList("Ich möchte nicht mit einem Bot sprechen.","Ich soll das schon wieder wiederholen?"),
576+
Arrays.asList("Ich möchte nicht mehr mit dir sprechen. Leite mich weiter.","Kannst du mich zum Kundendienst weiterleiten?"));
577+
578+
System.out.println(diffRows);
579+
580+
assertThat(diffRows).hasSize(2);
581+
}
501582
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp