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 "";