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

Commitc410422

Browse files
committed
fixes#22
1 parent1161243 commitc410422

File tree

2 files changed

+65
-25
lines changed

2 files changed

+65
-25
lines changed

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

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,14 @@
4747
* </code>
4848
*/
4949
publicclassDiffRowGenerator {
50+
5051
publicstaticfinalPatternSPLIT_BY_WORD_PATTERN =Pattern.compile("\\s+|[,.\\[\\](){}/\\\\*+\\-#]");
51-
52+
5253
publicstaticfinalBiPredicate<String,String>IGNORE_WHITESPACE_EQUALIZER = (original,revised)
5354
->original.trim().replaceAll("\\s+"," ").equals(revised.trim().replaceAll("\\s+"," "));
54-
55+
5556
publicstaticfinalBiPredicate<String,String>DEFAULT_EQUALIZER =Object::equals;
56-
57+
5758
/**
5859
* Splitting lines by word to achieve word by word diff checking.
5960
*/
@@ -69,7 +70,7 @@ public class DiffRowGenerator {
6970
}
7071
returnlist;
7172
};
72-
73+
7374
privatefinalbooleanshowInlineDiffs;
7475
privatefinalbooleanignoreWhiteSpaces;
7576
privatefinalFunction<Boolean,String>oldTag;
@@ -195,11 +196,10 @@ public Builder mergeOriginalRevised(boolean mergeOriginalRevised) {
195196
* deliver no in word changes.
196197
*/
197198
publicBuilderinlineDiffByWord(booleaninlineDiffByWord) {
198-
inlineDiffSplitter =inlineDiffByWord?SPLITTER_BY_WORD:SPLITTER_BY_CHARACTER;
199+
inlineDiffSplitter =inlineDiffByWord ?SPLITTER_BY_WORD :SPLITTER_BY_CHARACTER;
199200
returnthis;
200201
}
201-
202-
202+
203203
publicBuilderinlineDiffBySplitter(Function<String,List<String>>inlineDiffSplitter) {
204204
this.inlineDiffSplitter =inlineDiffSplitter;
205205
returnthis;
@@ -220,7 +220,7 @@ private DiffRowGenerator(Builder builder) {
220220
inlineDiffSplitter =builder.inlineDiffSplitter;
221221
equalizer =ignoreWhiteSpaces ?IGNORE_WHITESPACE_EQUALIZER :DEFAULT_EQUALIZER;
222222
reportLinesUnchanged =builder.reportLinesUnchanged;
223-
223+
224224
Objects.requireNonNull(inlineDiffSplitter);
225225
}
226226

@@ -356,32 +356,32 @@ private List<DiffRow> generateInlineDiffs(AbstractDelta<String> delta) throws Di
356356
if (inlineDeltainstanceofDeleteDelta) {
357357
wrapInTag(origList,inlineOrig.getPosition(),inlineOrig
358358
.getPosition()
359-
+inlineOrig.size() +1,oldTag);
359+
+inlineOrig.size(),oldTag);
360360
}elseif (inlineDeltainstanceofInsertDelta) {
361361
if (mergeOriginalRevised) {
362362
origList.addAll(inlineOrig.getPosition(),
363363
revList.subList(inlineRev.getPosition(),inlineRev.getPosition()
364364
+inlineRev.size()));
365365
wrapInTag(origList,inlineOrig.getPosition(),inlineOrig.getPosition()
366-
+inlineRev.size() +1,newTag);
366+
+inlineRev.size(),newTag);
367367
}else {
368368
wrapInTag(revList,inlineRev.getPosition(),inlineRev.getPosition()
369-
+inlineRev.size() +1,newTag);
369+
+inlineRev.size(),newTag);
370370
}
371371
}elseif (inlineDeltainstanceofChangeDelta) {
372372
if (mergeOriginalRevised) {
373373
origList.addAll(inlineOrig.getPosition() +inlineOrig.size(),
374374
revList.subList(inlineRev.getPosition(),inlineRev.getPosition()
375375
+inlineRev.size()));
376376
wrapInTag(origList,inlineOrig.getPosition() +inlineOrig.size(),inlineOrig.getPosition() +inlineOrig.size()
377-
+inlineRev.size() +1,newTag);
377+
+inlineRev.size(),newTag);
378378
}else {
379379
wrapInTag(revList,inlineRev.getPosition(),inlineRev.getPosition()
380-
+inlineRev.size() +1,newTag);
380+
+inlineRev.size(),newTag);
381381
}
382382
wrapInTag(origList,inlineOrig.getPosition(),inlineOrig
383383
.getPosition()
384-
+inlineOrig.size() +1,oldTag);
384+
+inlineOrig.size(),oldTag);
385385
}
386386
}
387387
StringBuilderorigResult =newStringBuilder();
@@ -413,10 +413,41 @@ private List<DiffRow> generateInlineDiffs(AbstractDelta<String> delta) throws Di
413413
* @param tag the tag name without angle brackets, just a word
414414
* @param cssClass the optional css class
415415
*/
416-
privatestaticvoidwrapInTag(List<String>sequence,intstartPosition,
417-
intendPosition,Function<Boolean,String>generator) {
418-
sequence.add(startPosition,generator.apply(true));
419-
sequence.add(endPosition,generator.apply(false));
416+
staticvoidwrapInTag(List<String>sequence,intstartPosition,
417+
intendPosition,Function<Boolean,String>tagGenerator) {
418+
intendPos =endPosition;
419+
420+
while (endPos >=startPosition) {
421+
422+
//search position for end tag
423+
while (endPos >startPosition) {
424+
if (!"\n".equals(sequence.get(endPos -1))) {
425+
break;
426+
}
427+
endPos--;
428+
}
429+
430+
if (endPos ==startPosition) {
431+
break;
432+
}
433+
434+
sequence.add(endPos,tagGenerator.apply(false));
435+
endPos--;
436+
437+
//search position for end tag
438+
while (endPos >startPosition) {
439+
if ("\n".equals(sequence.get(endPos -1))) {
440+
break;
441+
}
442+
endPos--;
443+
}
444+
445+
sequence.add(endPos,tagGenerator.apply(true));
446+
endPos--;
447+
}
448+
449+
// sequence.add(endPosition, tagGenerator.apply(false));
450+
// sequence.add(startPosition, tagGenerator.apply(true));
420451
}
421452

422453
protectedfinalstaticList<String>splitStringPreserveDelimiter(Stringstr,PatternSPLIT_PATTERN) {

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

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@ public void testGeneratorWithMerge3() throws DiffException {
148148
print(rows);
149149

150150
assertEquals(6,rows.size());
151-
assertEquals("[CHANGE,<span class=\"editOldInline\">test,anything]",rows.get(0).toString());
152-
assertEquals("[CHANGE,</span>anything<span class=\"editOldInline\"> </span>,]",rows.get(1).toString());
151+
assertEquals("[CHANGE,<span class=\"editOldInline\">test</span>,anything]",rows.get(0).toString());
152+
assertEquals("[CHANGE,anything<span class=\"editOldInline\"> </span>,]",rows.get(1).toString());
153153
assertEquals("[CHANGE,<span class=\"editOldInline\"> </span>,]",rows.get(2).toString());
154154
assertEquals("[EQUAL,other,other]",rows.get(3).toString());
155155
assertEquals("[INSERT,<span class=\"editNewInline\">test</span>,test]",rows.get(4).toString());
@@ -330,9 +330,16 @@ public void testGeneratorIssue22() throws DiffException {
330330
Arrays.asList(aa.split("\n")),
331331
Arrays.asList(bb.split("\n")));
332332

333-
System.out.println(rows);
333+
assertEquals("[[CHANGE,This is a test ~senctence~.,This is a test **for diffutils**.], [CHANGE,,**This is the second line.**]]",
334+
rows.toString());
335+
336+
System.out.println("|original|new|");
337+
System.out.println("|--------|---|");
338+
for (DiffRowrow :rows) {
339+
System.out.println("|" +row.getOldLine() +"|" +row.getNewLine() +"|");
340+
}
334341
}
335-
342+
336343
@Test
337344
publicvoidtestGeneratorIssue22_2()throwsDiffException {
338345
DiffRowGeneratorgenerator =DiffRowGenerator.create()
@@ -347,9 +354,10 @@ public void testGeneratorIssue22_2() throws DiffException {
347354
Arrays.asList(aa.split("\n")),
348355
Arrays.asList(bb.split("\n")));
349356

350-
System.out.println(rows);
357+
assertEquals("[[CHANGE,This is a test ~for diffutils~.,This is a test **senctence**.], [CHANGE,~This is the second line.~,]]",
358+
rows.toString());
351359
}
352-
360+
353361
@Test
354362
publicvoidtestGeneratorIssue22_3()throwsDiffException {
355363
DiffRowGeneratorgenerator =DiffRowGenerator.create()
@@ -364,6 +372,7 @@ public void testGeneratorIssue22_3() throws DiffException {
364372
Arrays.asList(aa.split("\n")),
365373
Arrays.asList(bb.split("\n")));
366374

367-
System.out.println(rows);
375+
assertEquals("[[CHANGE,This is a test ~senctence~.,This is a test **for diffutils**.], [CHANGE,,**This is the second line.**], [CHANGE,,**And one more.**]]",
376+
rows.toString());
368377
}
369378
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp