diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java index 6ecc9cf9..7a5a5d1c 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java @@ -161,7 +161,7 @@ public class TextField extends InputField { return 0; } - int whitespaceShift = Math.max(before.lastWhitespaceBlockIndex(), 0); + int whitespaceShift = Math.max(before.lastBoundaryIndex(), 0); return Math.min(before.length() - whitespaceShift, (int) (SettingsStore.BACKSPACE_ACCELERATION_MAX_CHARS * 1.5)); } diff --git a/app/src/main/java/io/github/sspanak/tt9/util/Text.java b/app/src/main/java/io/github/sspanak/tt9/util/Text.java index ee09bf1d..967e90f3 100644 --- a/app/src/main/java/io/github/sspanak/tt9/util/Text.java +++ b/app/src/main/java/io/github/sspanak/tt9/util/Text.java @@ -164,21 +164,29 @@ public class Text extends TextTools { } - public int lastWhitespaceBlockIndex() { - if (text == null) { + public int lastBoundaryIndex() { + if (text == null || text.length() < 2) { return -1; } + char lastChar = text.charAt(text.length() - 1); + char penultimateChar = text.charAt(text.length() - 2); + + boolean endsWithWhitespaceBlock = Character.isWhitespace(lastChar) && Character.isWhitespace(penultimateChar); + boolean endsWithPunctuationBlock = (lastChar == '.' || lastChar == ',') && (penultimateChar == '.' || penultimateChar == ','); + for (int i = text.length() - 1; i >= 0; i--) { + char currentChar = text.charAt(i); if ( - Character.isWhitespace(text.charAt(i)) - && (i == 0 || !Character.isWhitespace(text.charAt(i - 1))) + (endsWithPunctuationBlock && currentChar != '.' && currentChar != ',') + || (endsWithWhitespaceBlock && !Character.isWhitespace(currentChar)) + || (!endsWithWhitespaceBlock && !endsWithPunctuationBlock && (Character.isWhitespace(currentChar) || currentChar == '.' || currentChar == ',')) ) { - return i; + return i + 1; } } - return -1; + return 0; }