Skip to content

Commit 8a59b47

Browse files
committed
introduced tag generator
1 parent dcc151e commit 8a59b47

File tree

1 file changed

+28
-54
lines changed

1 file changed

+28
-54
lines changed

src/main/java/difflib/text/DiffRowGenerator.java

Lines changed: 28 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import difflib.patch.Patch;
3131
import difflib.text.DiffRow.Tag;
3232
import java.util.*;
33+
import java.util.function.Function;
3334
import java.util.regex.Matcher;
3435
import java.util.regex.Pattern;
3536

@@ -52,10 +53,8 @@ public class DiffRowGenerator {
5253

5354
private final boolean showInlineDiffs;
5455
private final boolean ignoreWhiteSpaces;
55-
private final String inlineOldTag;
56-
private final String inlineNewTag;
57-
private final String inlineOldCssClass;
58-
private final String inlineNewCssClass;
56+
private final Function<Boolean,String> oldTag;
57+
private final Function<Boolean,String> newTag;
5958
private final boolean inlineDiffByWord;
6059
private final int columnWidth;
6160
private final Equalizer<String> equalizer;
@@ -71,10 +70,10 @@ public static class Builder {
7170

7271
private boolean showInlineDiffs = false;
7372
private boolean ignoreWhiteSpaces = false;
74-
private String inlineOldTag = "span";
75-
private String inlineNewTag = "span";
76-
private String inlineOldCssClass = "editOldInline";
77-
private String inlineNewCssClass = "editNewInline";
73+
74+
private Function<Boolean,String> oldTag = f -> f?"<span class=\"editOldInline\">":"</span>";
75+
private Function<Boolean,String> newTag = f -> f?"<span class=\"editNewInline\">":"</span>";
76+
7877
private int columnWidth = 80;
7978
private boolean mergeOriginalRevised = false;
8079
private boolean inlineDiffByWord = false;
@@ -105,46 +104,23 @@ public Builder ignoreWhiteSpaces(boolean val) {
105104
}
106105

107106
/**
108-
* Set the tag used for displaying changes in the original text.
107+
* Generator for Old-Text-Tags.
109108
*
110109
* @param tag the tag to set. Without angle brackets. Default: span.
111110
* @return builder with configured ignoreBlankLines parameter
112111
*/
113-
public Builder inlineOldTag(String tag) {
114-
inlineOldTag = tag;
112+
public Builder oldTag(Function<Boolean,String> generator) {
113+
this.oldTag = generator;
115114
return this;
116115
}
117116

118117
/**
119-
* Set the tag used for displaying changes in the revised text.
120-
*
121-
* @param tag the tag to set. Without angle brackets. Default: span.
122-
* @return builder with configured ignoreBlankLines parameter
123-
*/
124-
public Builder inlineNewTag(String tag) {
125-
inlineNewTag = tag;
126-
return this;
127-
}
128-
129-
/**
130-
* Set the css class used for displaying changes in the original text.
131-
*
132-
* @param cssClass the tag to set. Without any quotes, just word. Default: editOldInline.
133-
* @return builder with configured ignoreBlankLines parameter
134-
*/
135-
public Builder inlineOldCssClass(String cssClass) {
136-
inlineOldCssClass = cssClass;
137-
return this;
138-
}
139-
140-
/**
141-
* Set the css class used for displaying changes in the revised text.
142-
*
143-
* @param cssClass the tag to set. Without any quotes, just word. Default: editNewInline.
144-
* @return builder with configured ignoreBlankLines parameter
118+
* Generator for New-Text-Tags.
119+
* @param generator
120+
* @return
145121
*/
146-
public Builder inlineNewCssClass(String cssClass) {
147-
inlineNewCssClass = cssClass;
122+
public Builder newTag(Function<Boolean,String> generator) {
123+
this.newTag = generator;
148124
return this;
149125
}
150126

@@ -199,10 +175,8 @@ public static Builder create() {
199175
private DiffRowGenerator(Builder builder) {
200176
showInlineDiffs = builder.showInlineDiffs;
201177
ignoreWhiteSpaces = builder.ignoreWhiteSpaces;
202-
inlineOldTag = builder.inlineOldTag;
203-
inlineNewTag = builder.inlineNewTag;
204-
inlineOldCssClass = builder.inlineOldCssClass;
205-
inlineNewCssClass = builder.inlineNewCssClass;
178+
oldTag = builder.oldTag;;
179+
newTag = builder.newTag;
206180
columnWidth = builder.columnWidth;
207181
mergeOriginalRevised = builder.mergeOriginalRevised;
208182
inlineDiffByWord = builder.inlineDiffByWord;
@@ -233,11 +207,11 @@ public List<DiffRow> generateDiffRows(List<String> original, List<String> revise
233207
private DiffRow buildDiffRow(Tag type, String orgline, String newline) {
234208
String wrapOrg = StringUtils.wrapText(StringUtils.normalize(orgline), columnWidth);
235209
if (mergeOriginalRevised && Tag.DELETE == type) {
236-
wrapOrg = createOpenTag(inlineOldTag, inlineOldCssClass) + wrapOrg + createCloseTag(inlineOldTag);
210+
wrapOrg = oldTag.apply(true) + wrapOrg + oldTag.apply(false);
237211
}
238212
String wrapNew = StringUtils.wrapText(StringUtils.normalize(newline), columnWidth);
239213
if (mergeOriginalRevised && Tag.INSERT == type) {
240-
wrapOrg = createOpenTag(inlineNewTag, inlineNewCssClass) + wrapNew + createCloseTag(inlineNewTag);
214+
wrapOrg = newTag.apply(true) + wrapNew + newTag.apply(false);
241215
}
242216
return new DiffRow(type, wrapOrg, wrapNew);
243217
}
@@ -341,32 +315,32 @@ private List<DiffRow> generateInlineDiffs(Delta<String> delta) throws DiffExcept
341315
if (inlineDelta instanceof DeleteDelta) {
342316
wrapInTag(origList, inlineOrig.getPosition(), inlineOrig
343317
.getPosition()
344-
+ inlineOrig.size() + 1, this.inlineOldTag, this.inlineOldCssClass);
318+
+ inlineOrig.size() + 1, oldTag);
345319
} else if (inlineDelta instanceof InsertDelta) {
346320
if (mergeOriginalRevised) {
347321
origList.addAll(inlineOrig.getPosition(),
348322
revList.subList(inlineRev.getPosition(), inlineRev.getPosition()
349323
+ inlineRev.size()));
350324
wrapInTag(origList, inlineOrig.getPosition(), inlineOrig.getPosition()
351-
+ inlineRev.size() + 1, this.inlineNewTag, this.inlineNewCssClass);
325+
+ inlineRev.size() + 1, newTag);
352326
} else {
353327
wrapInTag(revList, inlineRev.getPosition(), inlineRev.getPosition()
354-
+ inlineRev.size() + 1, this.inlineNewTag, this.inlineNewCssClass);
328+
+ inlineRev.size() + 1, newTag);
355329
}
356330
} else if (inlineDelta instanceof ChangeDelta) {
357331
if (mergeOriginalRevised) {
358332
origList.addAll(inlineOrig.getPosition() + inlineOrig.size(),
359333
revList.subList(inlineRev.getPosition(), inlineRev.getPosition()
360334
+ inlineRev.size()));
361335
wrapInTag(origList, inlineOrig.getPosition() + inlineOrig.size(), inlineOrig.getPosition() + inlineOrig.size()
362-
+ inlineRev.size() + 1, this.inlineNewTag, this.inlineNewCssClass);
336+
+ inlineRev.size() + 1, newTag);
363337
} else {
364338
wrapInTag(revList, inlineRev.getPosition(), inlineRev.getPosition()
365-
+ inlineRev.size() + 1, this.inlineNewTag, this.inlineNewCssClass);
339+
+ inlineRev.size() + 1, newTag);
366340
}
367341
wrapInTag(origList, inlineOrig.getPosition(), inlineOrig
368342
.getPosition()
369-
+ inlineOrig.size() + 1, this.inlineOldTag, this.inlineOldCssClass);
343+
+ inlineOrig.size() + 1, oldTag);
370344
}
371345
}
372346
StringBuilder origResult = new StringBuilder();
@@ -400,9 +374,9 @@ private List<DiffRow> generateInlineDiffs(Delta<String> delta) throws DiffExcept
400374
* @param cssClass the optional css class
401375
*/
402376
public static void wrapInTag(List<String> sequence, int startPosition,
403-
int endPosition, String tag, String cssClass) {
404-
sequence.add(startPosition, createOpenTag(tag, cssClass));
405-
sequence.add(endPosition, createCloseTag(tag));
377+
int endPosition, Function<Boolean,String> generator) {
378+
sequence.add(startPosition, generator.apply(true));
379+
sequence.add(endPosition, generator.apply(false));
406380
}
407381

408382
private static String createCloseTag(String tag) {

0 commit comments

Comments
 (0)