@@ -173,17 +173,18 @@ public DiffRowGenerator build() {
173173 /**
174174 * Merge the complete result within the original text. This makes sense for one line
175175 * display.
176+ *
176177 * @param mergeOriginalRevised
177- * @return
178+ * @return
178179 */
179180 public Builder mergeOriginalRevised (boolean mergeOriginalRevised ) {
180181 this .mergeOriginalRevised = mergeOriginalRevised ;
181182 return this ;
182183 }
183-
184+
184185 /**
185- * Per default each character is separatly processed. This variant introduces processing
186- * by word, which should deliver no in word changes.
186+ * Per default each character is separatly processed. This variant introduces processing by
187+ * word, which should deliver no in word changes.
187188 */
188189 public Builder inlineDiffByWord (boolean inlineDiffByWord ) {
189190 this .inlineDiffByWord = inlineDiffByWord ;
@@ -316,7 +317,7 @@ private List<DiffRow> generateInlineDiffs(Delta<String> delta) throws DiffExcept
316317 List <String > rev = StringUtils .normalize (delta .getRevised ().getLines ());
317318 List <String > origList ;
318319 List <String > revList ;
319-
320+
320321 if (inlineDiffByWord ) {
321322 origList = splitStringPreserveDelimiter (String .join ("\n " , orig ));
322323 revList = splitStringPreserveDelimiter (String .join ("\n " , rev ));
@@ -330,7 +331,7 @@ private List<DiffRow> generateInlineDiffs(Delta<String> delta) throws DiffExcept
330331 revList .add (character .toString ());
331332 }
332333 }
333-
334+
334335 List <Delta <String >> inlineDeltas = DiffUtils .diff (origList , revList ).getDeltas ();
335336
336337 Collections .reverse (inlineDeltas );
@@ -411,20 +412,24 @@ private static String createCloseTag(String tag) {
411412 private static String createOpenTag (String tag , String cssClass ) {
412413 return "<" + tag + (cssClass != null ? " class=\" " + cssClass + "\" " : "" ) + ">" ;
413414 }
414-
415- private static final Pattern SPLIT_PATTERN = Pattern .compile ("\\ s+" );
416-
417- private List <String > splitStringPreserveDelimiter (String str ) {
415+
416+ private static final Pattern SPLIT_PATTERN = Pattern .compile ("\\ s+|[,. \\ [ \\ ](){}/ \\ \\ *+ \\ -#] " );
417+
418+ static List <String > splitStringPreserveDelimiter (String str ) {
418419 List <String > list = new ArrayList <>();
419420 if (str != null ) {
420421 Matcher matcher = SPLIT_PATTERN .matcher (str );
421422 int pos = 0 ;
422423 while (matcher .find ()) {
423- list .add (str .substring (pos , matcher .start ()));
424+ if (pos < matcher .start ()) {
425+ list .add (str .substring (pos , matcher .start ()));
426+ }
424427 list .add (matcher .group ());
425428 pos = matcher .end ();
426429 }
427- list .add (str .substring (pos ));
430+ if (pos < str .length ()) {
431+ list .add (str .substring (pos ));
432+ }
428433 }
429434 return list ;
430435 }
0 commit comments