diff --git a/Simperium/src/main/java/name/fraser/neil/plaintext/diff_match_patch.java b/Simperium/src/main/java/name/fraser/neil/plaintext/diff_match_patch.java index beea40ba..38cabd46 100644 --- a/Simperium/src/main/java/name/fraser/neil/plaintext/diff_match_patch.java +++ b/Simperium/src/main/java/name/fraser/neil/plaintext/diff_match_patch.java @@ -1429,7 +1429,22 @@ public int diff_levenshtein(LinkedList diffs) { */ public String diff_toDelta(LinkedList diffs) { StringBuilder text = new StringBuilder(); + char lastEnd = 0; + boolean isFirst = true; for (Diff aDiff : diffs) { + char thisTop = aDiff.text.charAt(0); + char thisEnd = aDiff.text.charAt(aDiff.text.length() - 1); + if (Character.isHighSurrogate(thisEnd)) { + aDiff.text = aDiff.text.substring(0, aDiff.text.length() - 1); + } + if (! isFirst && Character.isHighSurrogate(lastEnd) && Character.isLowSurrogate(thisTop)) { + aDiff.text = lastEnd + aDiff.text; + } + isFirst = false; + lastEnd = thisEnd; + if ( aDiff.text.isEmpty() ) { + continue; + } switch (aDiff.operation) { case INSERT: try { diff --git a/build.gradle b/build.gradle index cbc76f4d..b30eb210 100644 --- a/build.gradle +++ b/build.gradle @@ -35,5 +35,5 @@ def gitDescribe() { } def static gitVersion() { - '0.9.1' + '0.9.2' }