From 910cc2a46a2ed755db0fd5d3cc1df39a90c750ae Mon Sep 17 00:00:00 2001 From: sspanak Date: Sat, 31 Aug 2024 17:00:02 +0300 Subject: [PATCH] limited recomposing to capture words consisting of letters only, and ignore special chars --- .../io/github/sspanak/tt9/ime/TypingHandler.java | 2 +- .../github/sspanak/tt9/ime/helpers/TextField.java | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java index d3195fa5..e3196508 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java @@ -135,7 +135,7 @@ public abstract class TypingHandler extends KeyPadHandler { } if (settings.getBackspaceRecomposing() && !hold && suggestionOps.isEmpty()) { - final String previousWord = textField.getWordBeforeCursor(); + final String previousWord = textField.getWordBeforeCursor(mLanguage); if (mInputMode.recompose(previousWord) && textField.recompose(previousWord)) { getSuggestions(); } else { 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 09ea6eb0..8f9a30a5 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 @@ -105,7 +105,7 @@ public class TextField extends InputField { } - @NonNull public String getWordBeforeCursor() { + @NonNull public String getWordBeforeCursor(Language language) { if (getTextAfterCursor(1).startsWithWord()) { return ""; } @@ -115,10 +115,17 @@ public class TextField extends InputField { return ""; } - int lastSpace = Math.max(before.lastIndexOf(' ') + 1, 0); - int length = Math.max(before.length(), lastSpace); + for (int i = before.length() - 1; i >= 0; i--) { + char currentLetter = before.charAt(i); + if ( + !Character.isAlphabetic(currentLetter) + && !(currentLetter == '\'' && (LanguageKind.isHebrew(language) || LanguageKind.isUkrainian(language))) + ) { + return before.substring(i + 1); + } + } - return before.substring(lastSpace, length); + return before; }