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

Commit89f2659

Browse files
committed
fixes#41
1 parentfd64d15 commit89f2659

File tree

4 files changed

+55
-20
lines changed

4 files changed

+55
-20
lines changed

‎src/main/java/com/github/difflib/text/DiffRowGenerator.java‎

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
importjava.util.function.Function;
3030
importjava.util.regex.Matcher;
3131
importjava.util.regex.Pattern;
32+
importstaticjava.util.stream.Collectors.toList;
3233

3334
/**
3435
* This class for generating DiffRows for side-by-sidy view. You can customize the way of generating. For example, show
@@ -42,13 +43,16 @@
4243
* ignoreWhiteSpaces(true).columnWidth(100).build();
4344
* </code>
4445
*/
45-
publicclassDiffRowGenerator {
46+
publicfinalclassDiffRowGenerator {
4647

4748
publicstaticfinalBiPredicate<String,String>DEFAULT_EQUALIZER =Object::equals;
4849

4950
publicstaticfinalBiPredicate<String,String>IGNORE_WHITESPACE_EQUALIZER = (original,revised)
5051
->adjustWhitespace(original).equals(adjustWhitespace(revised));
5152

53+
publicstaticfinalFunction<String,String>LINE_NORMALIZER_FOR_HTML =StringUtils::normalize;
54+
55+
5256
/**
5357
* Splitting lines by character to achieve char by char diff checking.
5458
*/
@@ -60,6 +64,7 @@ public class DiffRowGenerator {
6064
returnlist;
6165
};
6266
publicstaticfinalPatternSPLIT_BY_WORD_PATTERN =Pattern.compile("\\s+|[,.\\[\\](){}/\\\\*+\\-#]");
67+
6368
/**
6469
* Splitting lines by word to achieve word by word diff checking.
6570
*/
@@ -144,6 +149,7 @@ static void wrapInTag(List<String> sequence, int startPosition,
144149
privatefinalFunction<Boolean,String>newTag;
145150
privatefinalFunction<Boolean,String>oldTag;
146151
privatefinalbooleanreportLinesUnchanged;
152+
privatefinalFunction<String,String>lineNormalizer;
147153

148154
privatefinalbooleanshowInlineDiffs;
149155

@@ -157,8 +163,10 @@ private DiffRowGenerator(Builder builder) {
157163
inlineDiffSplitter =builder.inlineDiffSplitter;
158164
equalizer =ignoreWhiteSpaces ?IGNORE_WHITESPACE_EQUALIZER :DEFAULT_EQUALIZER;
159165
reportLinesUnchanged =builder.reportLinesUnchanged;
166+
lineNormalizer =builder.lineNormalizer;
160167

161168
Objects.requireNonNull(inlineDiffSplitter);
169+
Objects.requireNonNull(lineNormalizer);
162170
}
163171

164172
/**
@@ -258,14 +266,20 @@ private DiffRow buildDiffRowWithoutNormalizing(Tag type, String orgline, String
258266
StringUtils.wrapText(newline,columnWidth));
259267
}
260268

269+
List<String>normalizeLines(List<String>list) {
270+
returnlist.stream()
271+
.map(lineNormalizer::apply)
272+
.collect(toList());
273+
}
274+
261275
/**
262276
* Add the inline diffs for given delta
263277
*
264278
* @param delta the given delta
265279
*/
266280
privateList<DiffRow>generateInlineDiffs(AbstractDelta<String>delta)throwsDiffException {
267-
List<String>orig =StringUtils.normalize(delta.getSource().getLines());
268-
List<String>rev =StringUtils.normalize(delta.getTarget().getLines());
281+
List<String>orig =normalizeLines(delta.getSource().getLines());
282+
List<String>rev =normalizeLines(delta.getTarget().getLines());
269283
List<String>origList;
270284
List<String>revList;
271285
StringjoinedOrig =String.join("\n",orig);
@@ -334,9 +348,9 @@ private List<DiffRow> generateInlineDiffs(AbstractDelta<String> delta) throws Di
334348

335349
privateStringpreprocessLine(Stringline) {
336350
if (columnWidth ==0) {
337-
returnStringUtils.normalize(line);
351+
returnlineNormalizer.apply(line);
338352
}else {
339-
returnStringUtils.wrapText(StringUtils.normalize(line),columnWidth);
353+
returnStringUtils.wrapText(lineNormalizer.apply(line),columnWidth);
340354
}
341355
}
342356

@@ -358,6 +372,7 @@ public static class Builder {
358372
privatebooleanmergeOriginalRevised =false;
359373
privatebooleanreportLinesUnchanged =false;
360374
privateFunction<String,List<String>>inlineDiffSplitter =SPLITTER_BY_CHARACTER;
375+
privateFunction<String,String>lineNormalizer =LINE_NORMALIZER_FOR_HTML;
361376

362377
privateBuilder() {
363378
}
@@ -463,5 +478,10 @@ public Builder inlineDiffBySplitter(Function<String, List<String>> inlineDiffSpl
463478
this.inlineDiffSplitter =inlineDiffSplitter;
464479
returnthis;
465480
}
481+
482+
publicBuilderlineNormalizer(Function<String,String>lineNormalizer) {
483+
this.lineNormalizer =lineNormalizer;
484+
returnthis;
485+
}
466486
}
467487
}

‎src/main/java/com/github/difflib/text/StringUtils.java‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,6 @@ public static String normalize(String str) {
3434
returnhtmlEntites(str).replace("\t"," ");
3535
}
3636

37-
publicstaticList<String>normalize(List<String>list) {
38-
returnlist.stream()
39-
.map(StringUtils::normalize)
40-
.collect(toList());
41-
}
42-
4337
publicstaticList<String>wrapText(List<String>list,intcolumnWidth) {
4438
returnlist.stream()
4539
.map(line ->wrapText(line,columnWidth))

‎src/test/java/com/github/difflib/text/DiffRowGeneratorTest.java‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
importjava.io.IOException;
66
importjava.nio.file.Files;
77
importjava.util.Arrays;
8+
importjava.util.Collections;
89
importjava.util.List;
910
importjava.util.regex.Pattern;
1011
importstaticjava.util.stream.Collectors.toList;
@@ -28,6 +29,16 @@ public void testGenerator_Default() throws DiffException {
2829
assertEquals(3,rows.size());
2930
}
3031

32+
/**
33+
* Test of normalize method, of class StringUtils.
34+
*/
35+
@Test
36+
publicvoidtestNormalize_List() {
37+
DiffRowGeneratorgenerator =DiffRowGenerator.create()
38+
.build();
39+
assertEquals(Collections.singletonList(" test"),generator.normalizeLines(Collections.singletonList("\ttest")));
40+
}
41+
3142
@Test
3243
publicvoidtestGenerator_Default2()throwsDiffException {
3344
Stringfirst ="anything\n\nother";
@@ -375,4 +386,23 @@ public void testGeneratorIssue22_3() throws DiffException {
375386
assertEquals("[[CHANGE,This is a test ~senctence~.,This is a test **for diffutils**.], [CHANGE,,**This is the second line.**], [CHANGE,,**And one more.**]]",
376387
rows.toString());
377388
}
389+
390+
@Test
391+
publicvoidtestGeneratorIssue41DefaultNormalizer()throwsDiffException {
392+
DiffRowGeneratorgenerator =DiffRowGenerator.create()
393+
.build();
394+
List<DiffRow>rows =generator.generateDiffRows(Arrays.asList("<"),Arrays.asList("<"));
395+
assertEquals("[[EQUAL,&lt;,&lt;]]",rows.toString());
396+
}
397+
398+
@Test
399+
publicvoidtestGeneratorIssue41UserNormalizer()throwsDiffException {
400+
DiffRowGeneratorgenerator =DiffRowGenerator.create()
401+
.lineNormalizer(str ->str.replace("\t"," "))
402+
.build();
403+
List<DiffRow>rows =generator.generateDiffRows(Arrays.asList("<"),Arrays.asList("<"));
404+
assertEquals("[[EQUAL,<,<]]",rows.toString());
405+
rows =generator.generateDiffRows(Arrays.asList("\t<"),Arrays.asList("<"));
406+
assertEquals("[[CHANGE, <,<]]",rows.toString());
407+
}
378408
}

‎src/test/java/com/github/difflib/text/StringUtilsTest.java‎

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
packagecom.github.difflib.text;
1717

18-
importjava.util.Collections;
1918
importstaticorg.junit.Assert.*;
2019
importorg.junit.Test;
2120

@@ -41,14 +40,6 @@ public void testNormalize_String() {
4140
assertEquals(" test",StringUtils.normalize("\ttest"));
4241
}
4342

44-
/**
45-
* Test of normalize method, of class StringUtils.
46-
*/
47-
@Test
48-
publicvoidtestNormalize_List() {
49-
assertEquals(Collections.singletonList(" test"),StringUtils.normalize(Collections.singletonList("\ttest")));
50-
}
51-
5243
/**
5344
* Test of wrapText method, of class StringUtils.
5445
*/

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp