3030import difflib .patch .Patch ;
3131import difflib .text .DiffRow .Tag ;
3232import java .util .*;
33+ import java .util .function .Function ;
3334import java .util .regex .Matcher ;
3435import 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