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

Commit11b3c53

Browse files
committed
fixes#52
fixes#53
1 parentd34591e commit11b3c53

File tree

2 files changed

+63
-21
lines changed

2 files changed

+63
-21
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,13 @@
3030

3131
/**
3232
* Implements the difference and patching engine
33-
*
34-
* @author <a href="dm.naumenko@gmail.com">Dmitry Naumenko</a>
3533
*/
3634
publicfinalclassDiffUtils {
3735

3836
/**
3937
* Computes the difference between the original and revised list of elements with default diff algorithm
4038
*
39+
* @param <T> types to be diffed
4140
* @param original The original text. Must not be {@code null}.
4241
* @param revised The revised text. Must not be {@code null}.
4342
* @param progress progress listener

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

Lines changed: 62 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
importcom.github.difflib.patch.Patch;
2525
importcom.github.difflib.text.DiffRow.Tag;
2626
importjava.util.*;
27+
importjava.util.function.BiFunction;
2728
importjava.util.function.BiPredicate;
2829
importjava.util.function.Function;
2930
importjava.util.regex.Matcher;
@@ -106,7 +107,7 @@ protected final static List<String> splitStringPreserveDelimiter(String str, Pat
106107
* @param tagGenerator the tag generator
107108
*/
108109
staticvoidwrapInTag(List<String>sequence,intstartPosition,
109-
intendPosition,Function<Boolean,String>tagGenerator,
110+
intendPosition,Tagtag,BiFunction<Tag,Boolean,String>tagGenerator,
110111
Function<String,String>processDiffs) {
111112
intendPos =endPosition;
112113

@@ -124,7 +125,7 @@ static void wrapInTag(List<String> sequence, int startPosition,
124125
break;
125126
}
126127

127-
sequence.add(endPos,tagGenerator.apply(false));
128+
sequence.add(endPos,tagGenerator.apply(tag,false));
128129
if (processDiffs !=null) {
129130
sequence.set(endPos -1,
130131
processDiffs.apply(sequence.get(endPos -1)));
@@ -143,7 +144,7 @@ static void wrapInTag(List<String> sequence, int startPosition,
143144
endPos--;
144145
}
145146

146-
sequence.add(endPos,tagGenerator.apply(true));
147+
sequence.add(endPos,tagGenerator.apply(tag,true));
147148
endPos--;
148149
}
149150
}
@@ -153,8 +154,8 @@ static void wrapInTag(List<String> sequence, int startPosition,
153154
privatefinalbooleanignoreWhiteSpaces;
154155
privatefinalFunction<String,List<String>>inlineDiffSplitter;
155156
privatefinalbooleanmergeOriginalRevised;
156-
privatefinalFunction<Boolean,String>newTag;
157-
privatefinalFunction<Boolean,String>oldTag;
157+
privatefinalBiFunction<Tag,Boolean,String>newTag;
158+
privatefinalBiFunction<Tag,Boolean,String>oldTag;
158159
privatefinalbooleanreportLinesUnchanged;
159160
privatefinalFunction<String,String>lineNormalizer;
160161
privatefinalFunction<String,String>processDiffs;
@@ -169,7 +170,13 @@ private DiffRowGenerator(Builder builder) {
169170
columnWidth =builder.columnWidth;
170171
mergeOriginalRevised =builder.mergeOriginalRevised;
171172
inlineDiffSplitter =builder.inlineDiffSplitter;
172-
equalizer =ignoreWhiteSpaces ?IGNORE_WHITESPACE_EQUALIZER :DEFAULT_EQUALIZER;
173+
174+
if (builder.equalizer !=null) {
175+
equalizer =builder.equalizer;
176+
}else {
177+
equalizer =ignoreWhiteSpaces ?IGNORE_WHITESPACE_EQUALIZER :DEFAULT_EQUALIZER;
178+
}
179+
173180
reportLinesUnchanged =builder.reportLinesUnchanged;
174181
lineNormalizer =builder.lineNormalizer;
175182
processDiffs =builder.processDiffs;
@@ -254,15 +261,15 @@ private DiffRow buildDiffRow(Tag type, String orgline, String newline) {
254261
StringwrapOrg =preprocessLine(orgline);
255262
if (Tag.DELETE ==type) {
256263
if (mergeOriginalRevised ||showInlineDiffs) {
257-
wrapOrg =oldTag.apply(true) +wrapOrg +oldTag.apply(false);
264+
wrapOrg =oldTag.apply(type,true) +wrapOrg +oldTag.apply(type,false);
258265
}
259266
}
260267
StringwrapNew =preprocessLine(newline);
261268
if (Tag.INSERT ==type) {
262269
if (mergeOriginalRevised) {
263-
wrapOrg =newTag.apply(true) +wrapNew +newTag.apply(false);
270+
wrapOrg =newTag.apply(type,true) +wrapNew +newTag.apply(type,false);
264271
}elseif (showInlineDiffs) {
265-
wrapNew =newTag.apply(true) +wrapNew +newTag.apply(false);
272+
wrapNew =newTag.apply(type,true) +wrapNew +newTag.apply(type,false);
266273
}
267274
}
268275
returnnewDiffRow(type,wrapOrg,wrapNew);
@@ -308,19 +315,19 @@ private List<DiffRow> generateInlineDiffs(AbstractDelta<String> delta) {
308315
if (inlineDeltainstanceofDeleteDelta) {
309316
wrapInTag(origList,inlineOrig.getPosition(),inlineOrig
310317
.getPosition()
311-
+inlineOrig.size(),oldTag,processDiffs);
318+
+inlineOrig.size(),Tag.DELETE,oldTag,processDiffs);
312319
}elseif (inlineDeltainstanceofInsertDelta) {
313320
if (mergeOriginalRevised) {
314321
origList.addAll(inlineOrig.getPosition(),
315322
revList.subList(inlineRev.getPosition(),
316323
inlineRev.getPosition() +inlineRev.size()));
317324
wrapInTag(origList,inlineOrig.getPosition(),
318325
inlineOrig.getPosition() +inlineRev.size(),
319-
newTag,processDiffs);
326+
Tag.INSERT,newTag,processDiffs);
320327
}else {
321328
wrapInTag(revList,inlineRev.getPosition(),
322329
inlineRev.getPosition() +inlineRev.size(),
323-
newTag,processDiffs);
330+
Tag.INSERT,newTag,processDiffs);
324331
}
325332
}elseif (inlineDeltainstanceofChangeDelta) {
326333
if (mergeOriginalRevised) {
@@ -329,15 +336,15 @@ private List<DiffRow> generateInlineDiffs(AbstractDelta<String> delta) {
329336
inlineRev.getPosition() +inlineRev.size()));
330337
wrapInTag(origList,inlineOrig.getPosition() +inlineOrig.size(),
331338
inlineOrig.getPosition() +inlineOrig.size() +inlineRev.size(),
332-
newTag,processDiffs);
339+
Tag.CHANGE,newTag,processDiffs);
333340
}else {
334341
wrapInTag(revList,inlineRev.getPosition(),
335342
inlineRev.getPosition() +inlineRev.size(),
336-
newTag,processDiffs);
343+
Tag.CHANGE,newTag,processDiffs);
337344
}
338345
wrapInTag(origList,inlineOrig.getPosition(),
339346
inlineOrig.getPosition() +inlineOrig.size(),
340-
oldTag,processDiffs);
347+
Tag.CHANGE,oldTag,processDiffs);
341348
}
342349
}
343350
StringBuilderorigResult =newStringBuilder();
@@ -380,15 +387,18 @@ public static class Builder {
380387
privatebooleanshowInlineDiffs =false;
381388
privatebooleanignoreWhiteSpaces =false;
382389

383-
privateFunction<Boolean,String>oldTag =f ->f ?"<span class=\"editOldInline\">" :"</span>";
384-
privateFunction<Boolean,String>newTag =f ->f ?"<span class=\"editNewInline\">" :"</span>";
390+
privateBiFunction<Tag,Boolean,String>oldTag =
391+
(tag,f) ->f ?"<span class=\"editOldInline\">" :"</span>";
392+
privateBiFunction<Tag,Boolean,String>newTag =
393+
(tag,f) ->f ?"<span class=\"editNewInline\">" :"</span>";
385394

386395
privateintcolumnWidth =0;
387396
privatebooleanmergeOriginalRevised =false;
388397
privatebooleanreportLinesUnchanged =false;
389398
privateFunction<String,List<String>>inlineDiffSplitter =SPLITTER_BY_CHARACTER;
390399
privateFunction<String,String>lineNormalizer =LINE_NORMALIZER_FOR_HTML;
391400
privateFunction<String,String>processDiffs =null;
401+
privateBiPredicate<String,String>equalizer =null;
392402

393403
privateBuilder() {
394404
}
@@ -433,21 +443,43 @@ public Builder reportLinesUnchanged(final boolean val) {
433443
* @param generator the tag generator
434444
* @return builder with configured ignoreBlankLines parameter
435445
*/
436-
publicBuilderoldTag(Function<Boolean,String>generator) {
446+
publicBuilderoldTag(BiFunction<Tag,Boolean,String>generator) {
437447
this.oldTag =generator;
438448
returnthis;
439449
}
450+
451+
/**
452+
* Generator for Old-Text-Tags.
453+
*
454+
* @param generator the tag generator
455+
* @return builder with configured ignoreBlankLines parameter
456+
*/
457+
publicBuilderoldTag(Function<Boolean,String>generator) {
458+
this.oldTag = (tag,f) ->generator.apply(f);
459+
returnthis;
460+
}
440461

441462
/**
442463
* Generator for New-Text-Tags.
443464
*
444465
* @param generator
445466
* @return
446467
*/
447-
publicBuildernewTag(Function<Boolean,String>generator) {
468+
publicBuildernewTag(BiFunction<Tag,Boolean,String>generator) {
448469
this.newTag =generator;
449470
returnthis;
450471
}
472+
473+
/**
474+
* Generator for New-Text-Tags.
475+
*
476+
* @param generator
477+
* @return
478+
*/
479+
publicBuildernewTag(Function<Boolean,String>generator) {
480+
this.newTag = (tag,f) ->generator.apply(f);
481+
returnthis;
482+
}
451483

452484
/**
453485
* Processor for diffed text parts. Here e.g. whitecharacters could be replaced by something
@@ -534,5 +566,16 @@ public Builder lineNormalizer(Function<String, String> lineNormalizer) {
534566
this.lineNormalizer =lineNormalizer;
535567
returnthis;
536568
}
569+
570+
/**
571+
* Provide an equalizer for diff processing.
572+
*
573+
* @param equalizer equalizer for diff processing.
574+
* @return builder with configured equalizer parameter
575+
*/
576+
publicBuilderequalizer(BiPredicate<String,String>equalizer) {
577+
this.equalizer =equalizer;
578+
returnthis;
579+
}
537580
}
538581
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp