From 2c1ea9c4112154863b9c7a240b66b09c8c984f29 Mon Sep 17 00:00:00 2001 From: sspanak Date: Wed, 28 Feb 2024 12:28:06 +0200 Subject: [PATCH] fixed adding words in Ukrainian, Hebrew and Yiddish --- .../io/github/sspanak/tt9/db/WordStore.java | 3 +- .../sspanak/tt9/ime/helpers/TextField.java | 46 ++++---- .../sspanak/tt9/languages/Characters.java | 15 +-- .../sspanak/tt9/languages/EmojiLanguage.java | 2 +- .../io/github/sspanak/tt9/languages/Text.java | 102 ++++++++++++++++++ 5 files changed, 132 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/db/WordStore.java b/app/src/main/java/io/github/sspanak/tt9/db/WordStore.java index 93cb2789..286f70ad 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/WordStore.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/WordStore.java @@ -15,7 +15,6 @@ import io.github.sspanak.tt9.db.sqlite.ReadOps; import io.github.sspanak.tt9.db.sqlite.SQLiteOpener; import io.github.sspanak.tt9.db.sqlite.UpdateOps; import io.github.sspanak.tt9.ime.TraditionalT9; -import io.github.sspanak.tt9.languages.Characters; import io.github.sspanak.tt9.languages.EmojiLanguage; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.Text; @@ -138,7 +137,7 @@ public class WordStore { return AddWordDialog.CODE_GENERAL_ERROR; } - language = Characters.isGraphic(word) ? new EmojiLanguage() : language; + language = Text.isGraphic(word) ? new EmojiLanguage() : language; try { if (readOps.exists(sqlite.getDb(), language, word)) { 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 b269a358..a66f9943 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 @@ -13,8 +13,6 @@ import android.view.inputmethod.InputConnection; import androidx.annotation.NonNull; import java.util.ArrayList; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import io.github.sspanak.tt9.Logger; import io.github.sspanak.tt9.ime.modes.InputMode; @@ -24,12 +22,6 @@ import io.github.sspanak.tt9.languages.Text; public class TextField { public static final int IME_ACTION_ENTER = EditorInfo.IME_MASK_ACTION + 1; - private static final Pattern beforeCursorWordRegex = Pattern.compile("([^\\s\\d\\p{P}]+)(?!\n)$"); - private static final Pattern afterCursorWordRegex = Pattern.compile("^(?= 0; i--) { + char ch = text.charAt(i); + + if (Characters.isGraphic(ch)) { + sb.insert(0, ch); + } else { + break; + } + } + + return sb.toString(); + } + + public String leaveStartingGraphics() { + if (text == null) { + return ""; + } + + StringBuilder sb = new StringBuilder(text.length()); + + for (int i = 0, end = text.length(); i < end; i++) { + char ch = text.charAt(i); + + if (Characters.isGraphic(ch)) { + sb.append(ch); + } else { + break; + } + } + + return sb.toString(); + } + public boolean nextIsPunctuation() { return text != null && !text.isEmpty() && nextIsPunctuation.matcher(text).find(); } @@ -85,6 +143,50 @@ public class Text { return text != null && !text.isEmpty() && Character.isDigit(text.charAt(0)); } + public boolean startsWithGraphic() { + return text != null && !text.isEmpty() && Characters.isGraphic(text.charAt(0)); + } + + public String subStringEndingWord(boolean keepApostrophe, boolean keepQuote) { + if (text == null) { + return ""; + } + + StringBuilder sub = new StringBuilder(); + + for (int i = text.length() - 1; i >= 0; i--) { + char ch = text.charAt(i); + + if (Character.isAlphabetic(ch) || (keepApostrophe && ch == '\'') || (keepQuote && ch == '"')) { + sub.insert(0, ch); + } else { + break; + } + } + + return sub.toString(); + } + + public String subStringStartingWord(boolean keepApostrophe, boolean keepQuote) { + if (text == null) { + return ""; + } + + StringBuilder sub = new StringBuilder(); + + for (int i = 0, end = text.length(); i < end; i++) { + char ch = text.charAt(i); + + if (Character.isAlphabetic(ch) || (keepApostrophe && ch == '\'') || (keepQuote && ch == '"')) { + sub.append(ch); + } else { + break; + } + } + + return sub.toString(); + } + public String toLowerCase() { if (text == null) { return "";