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

Commitdf01ef6

Browse files
committed
fixes#63
1 parentdbd0b8f commitdf01ef6

File tree

2 files changed

+72
-23
lines changed

2 files changed

+72
-23
lines changed

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

Lines changed: 53 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ protected final static List<String> splitStringPreserveDelimiter(String str, Pat
107107
* @param tagGenerator the tag generator
108108
*/
109109
staticvoidwrapInTag(List<String>sequence,intstartPosition,
110-
intendPosition,Function<Boolean,String>tagGenerator) {
110+
intendPosition,Function<Boolean,String>tagGenerator,
111+
Function<String,String>processDiffs) {
111112
intendPos =endPosition;
112113

113114
while (endPos >=startPosition) {
@@ -125,23 +126,30 @@ static void wrapInTag(List<String> sequence, int startPosition,
125126
}
126127

127128
sequence.add(endPos,tagGenerator.apply(false));
129+
if (processDiffs !=null) {
130+
sequence.set(endPos -1,
131+
processDiffs.apply(sequence.get(endPos -1)));
132+
}
128133
endPos--;
129134

130135
//search position for end tag
131136
while (endPos >startPosition) {
132137
if ("\n".equals(sequence.get(endPos -1))) {
133138
break;
134139
}
140+
if (processDiffs !=null) {
141+
sequence.set(endPos -1,
142+
processDiffs.apply(sequence.get(endPos -1)));
143+
}
135144
endPos--;
136145
}
137146

138147
sequence.add(endPos,tagGenerator.apply(true));
139148
endPos--;
140149
}
141-
142-
// sequence.add(endPosition, tagGenerator.apply(false));
143-
// sequence.add(startPosition, tagGenerator.apply(true));
144150
}
151+
152+
145153
privatefinalintcolumnWidth;
146154
privatefinalBiPredicate<String,String>equalizer;
147155
privatefinalbooleanignoreWhiteSpaces;
@@ -151,6 +159,7 @@ static void wrapInTag(List<String> sequence, int startPosition,
151159
privatefinalFunction<Boolean,String>oldTag;
152160
privatefinalbooleanreportLinesUnchanged;
153161
privatefinalFunction<String,String>lineNormalizer;
162+
privatefinalFunction<String,String>processDiffs;
154163

155164
privatefinalbooleanshowInlineDiffs;
156165

@@ -165,6 +174,7 @@ private DiffRowGenerator(Builder builder) {
165174
equalizer =ignoreWhiteSpaces ?IGNORE_WHITESPACE_EQUALIZER :DEFAULT_EQUALIZER;
166175
reportLinesUnchanged =builder.reportLinesUnchanged;
167176
lineNormalizer =builder.lineNormalizer;
177+
processDiffs =builder.processDiffs;
168178

169179
Objects.requireNonNull(inlineDiffSplitter);
170180
Objects.requireNonNull(lineNormalizer);
@@ -178,7 +188,8 @@ private DiffRowGenerator(Builder builder) {
178188
* @param revised the revised text
179189
* @return the DiffRows between original and revised texts
180190
*/
181-
publicList<DiffRow>generateDiffRows(List<String>original,List<String>revised)throwsDiffException {
191+
publicList<DiffRow>generateDiffRows(List<String>original,List<String>revised)
192+
throwsDiffException {
182193
returngenerateDiffRows(original,DiffUtils.diff(original,revised,equalizer));
183194
}
184195

@@ -190,7 +201,8 @@ public List<DiffRow> generateDiffRows(List<String> original, List<String> revise
190201
* @param patch the given patch
191202
* @return the DiffRows between original and revised texts
192203
*/
193-
publicList<DiffRow>generateDiffRows(finalList<String>original,Patch<String>patch)throwsDiffException {
204+
publicList<DiffRow>generateDiffRows(finalList<String>original,Patch<String>patch)
205+
throwsDiffException {
194206
List<DiffRow>diffRows =newArrayList<>();
195207
intendPos =0;
196208
finalList<AbstractDelta<String>>deltaList =patch.getDeltas();
@@ -280,7 +292,8 @@ List<String> normalizeLines(List<String> list) {
280292
*
281293
* @param delta the given delta
282294
*/
283-
privateList<DiffRow>generateInlineDiffs(AbstractDelta<String>delta)throwsDiffException {
295+
privateList<DiffRow>generateInlineDiffs(AbstractDelta<String>delta)
296+
throwsDiffException {
284297
List<String>orig =normalizeLines(delta.getSource().getLines());
285298
List<String>rev =normalizeLines(delta.getTarget().getLines());
286299
List<String>origList;
@@ -300,32 +313,36 @@ private List<DiffRow> generateInlineDiffs(AbstractDelta<String> delta) throws Di
300313
if (inlineDeltainstanceofDeleteDelta) {
301314
wrapInTag(origList,inlineOrig.getPosition(),inlineOrig
302315
.getPosition()
303-
+inlineOrig.size(),oldTag);
316+
+inlineOrig.size(),oldTag,processDiffs);
304317
}elseif (inlineDeltainstanceofInsertDelta) {
305318
if (mergeOriginalRevised) {
306319
origList.addAll(inlineOrig.getPosition(),
307-
revList.subList(inlineRev.getPosition(),inlineRev.getPosition()
308-
+inlineRev.size()));
309-
wrapInTag(origList,inlineOrig.getPosition(),inlineOrig.getPosition()
310-
+inlineRev.size(),newTag);
320+
revList.subList(inlineRev.getPosition(),
321+
inlineRev.getPosition() +inlineRev.size()));
322+
wrapInTag(origList,inlineOrig.getPosition(),
323+
inlineOrig.getPosition() +inlineRev.size(),
324+
newTag,processDiffs);
311325
}else {
312-
wrapInTag(revList,inlineRev.getPosition(),inlineRev.getPosition()
313-
+inlineRev.size(),newTag);
326+
wrapInTag(revList,inlineRev.getPosition(),
327+
inlineRev.getPosition() +inlineRev.size(),
328+
newTag,processDiffs);
314329
}
315330
}elseif (inlineDeltainstanceofChangeDelta) {
316331
if (mergeOriginalRevised) {
317332
origList.addAll(inlineOrig.getPosition() +inlineOrig.size(),
318-
revList.subList(inlineRev.getPosition(),inlineRev.getPosition()
319-
+inlineRev.size()));
320-
wrapInTag(origList,inlineOrig.getPosition() +inlineOrig.size(),inlineOrig.getPosition() +inlineOrig.size()
321-
+inlineRev.size(),newTag);
333+
revList.subList(inlineRev.getPosition(),
334+
inlineRev.getPosition() +inlineRev.size()));
335+
wrapInTag(origList,inlineOrig.getPosition() +inlineOrig.size(),
336+
inlineOrig.getPosition() +inlineOrig.size() +inlineRev.size(),
337+
newTag,processDiffs);
322338
}else {
323-
wrapInTag(revList,inlineRev.getPosition(),inlineRev.getPosition()
324-
+inlineRev.size(),newTag);
339+
wrapInTag(revList,inlineRev.getPosition(),
340+
inlineRev.getPosition() +inlineRev.size(),
341+
newTag,processDiffs);
325342
}
326-
wrapInTag(origList,inlineOrig.getPosition(),inlineOrig
327-
.getPosition()
328-
+inlineOrig.size(),oldTag);
343+
wrapInTag(origList,inlineOrig.getPosition(),
344+
inlineOrig.getPosition() +inlineOrig.size(),
345+
oldTag,processDiffs);
329346
}
330347
}
331348
StringBuilderorigResult =newStringBuilder();
@@ -376,6 +393,7 @@ public static class Builder {
376393
privatebooleanreportLinesUnchanged =false;
377394
privateFunction<String,List<String>>inlineDiffSplitter =SPLITTER_BY_CHARACTER;
378395
privateFunction<String,String>lineNormalizer =LINE_NORMALIZER_FOR_HTML;
396+
privateFunction<String,String>processDiffs =null;
379397

380398
privateBuilder() {
381399
}
@@ -436,6 +454,18 @@ public Builder newTag(Function<Boolean, String> generator) {
436454
returnthis;
437455
}
438456

457+
/**
458+
* Processor for diffed text parts. Here e.g. whitecharacters could be replaced by something
459+
* visible.
460+
*
461+
* @param processDiffs
462+
* @return
463+
*/
464+
publicBuilderprocessDiffs(Function<String,String>processDiffs) {
465+
this.processDiffs =processDiffs;
466+
returnthis;
467+
}
468+
439469
/**
440470
* Set the column width of generated lines of original and revised texts.
441471
*

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,4 +480,23 @@ public void testIgnoreWhitespaceIssue64() throws DiffException {
480480
"",
481481
"~testline~**another one**");
482482
}
483+
484+
@Test
485+
publicvoidtestIgnoreWhitespaceIssue63()throwsDiffException {
486+
DiffRowGeneratorgenerator =DiffRowGenerator.create()
487+
.showInlineDiffs(true)
488+
.inlineDiffByWord(true)
489+
.mergeOriginalRevised(true)
490+
.oldTag(f ->"~")//introduce markdown style for strikethrough
491+
.newTag(f ->"**")//introduce markdown style for bold
492+
.processDiffs(str ->str.replace(" ","/"))
493+
.build();
494+
495+
//compute the differences for two test texts.
496+
List<DiffRow>rows =generator.generateDiffRows(
497+
Arrays.asList("This is a test."),
498+
Arrays.asList("This is a test"));
499+
500+
assertEquals("This~//~**/**is~//~**/**a~//~**/**test~.~",rows.get(0).getOldLine());
501+
}
483502
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp