From 76fed907539b0ca19c24b6bdc97284d5421e685b Mon Sep 17 00:00:00 2001 From: sspanak Date: Mon, 18 Mar 2024 19:16:32 +0200 Subject: [PATCH] split Text into Text and TextTools --- .../github/sspanak/tt9/db/SlowQueryStats.java | 4 +- .../github/sspanak/tt9/ime/TraditionalT9.java | 8 +-- .../sspanak/tt9/ime/modes/InputMode.java | 3 +- .../sspanak/tt9/ime/modes/ModePredictive.java | 2 +- .../tt9/ime/modes/helpers/AutoSpace.java | 2 +- .../tt9/ime/modes/helpers/AutoTextCase.java | 8 +-- .../sspanak/tt9/languages/EmojiLanguage.java | 2 +- .../io/github/sspanak/tt9/languages/Text.java | 56 ++-------------- .../sspanak/tt9/languages/TextTools.java | 67 +++++++++++++++++++ 9 files changed, 85 insertions(+), 67 deletions(-) create mode 100644 app/src/main/java/io/github/sspanak/tt9/languages/TextTools.java diff --git a/app/src/main/java/io/github/sspanak/tt9/db/SlowQueryStats.java b/app/src/main/java/io/github/sspanak/tt9/db/SlowQueryStats.java index 8273daaf..972afa39 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/SlowQueryStats.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/SlowQueryStats.java @@ -3,8 +3,8 @@ package io.github.sspanak.tt9.db; import java.util.HashMap; import io.github.sspanak.tt9.Logger; -import io.github.sspanak.tt9.languages.Text; import io.github.sspanak.tt9.languages.Language; +import io.github.sspanak.tt9.languages.TextTools; import io.github.sspanak.tt9.preferences.SettingsStore; public class SlowQueryStats { @@ -63,7 +63,7 @@ public class SlowQueryStats { "Queries: " + totalQueries + ". Average time: " + averageTime + " ms." + "\nSlow: " + slowQueries.size() + ". Average time: " + slowAverageTime + " ms." + "\nSlowest: " + maxQueryTime + " ms." + - "\nFirst: " + Text.unixTimestampToISODate(firstQueryTime); + "\nFirst: " + TextTools.unixTimestampToISODate(firstQueryTime); } public static String getList() { diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java b/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java index 8408c438..15e1838d 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java @@ -133,7 +133,7 @@ public class TraditionalT9 extends KeyPadHandler { private void determineTextCase() { mInputMode.defaultTextCase(); mInputMode.setTextFieldCase(textField.determineTextCase(inputType)); - mInputMode.determineNextWordTextCase(textField.getTextBeforeCursor()); + mInputMode.determineNextWordTextCase(textField.getStringBeforeCursor()); InputModeValidator.validateTextCase(mInputMode, settings.getTextCase()); } @@ -310,7 +310,7 @@ public class TraditionalT9 extends KeyPadHandler { // Auto-adjust the text case before each word, if the InputMode supports it. if (getComposingText().isEmpty()) { - mInputMode.determineNextWordTextCase(textField.getTextBeforeCursor()); + mInputMode.determineNextWordTextCase(textField.getStringBeforeCursor()); } if (!mInputMode.onNumber(key, hold, repeat)) { @@ -655,7 +655,7 @@ public class TraditionalT9 extends KeyPadHandler { commitCurrentSuggestion(false); mInputMode.onAcceptSuggestion(lastComposingText, true); autoCorrectSpace(lastComposingText, false, -1); - mInputMode.determineNextWordTextCase(textField.getTextBeforeCursor()); + mInputMode.determineNextWordTextCase(textField.getStringBeforeCursor()); } // display the word suggestions @@ -746,7 +746,7 @@ public class TraditionalT9 extends KeyPadHandler { int nextModeIndex = (allowedInputModes.indexOf(mInputMode.getId()) + 1) % allowedInputModes.size(); mInputMode = InputMode.getInstance(settings, mLanguage, inputType, allowedInputModes.get(nextModeIndex)); mInputMode.setTextFieldCase(textField.determineTextCase(inputType)); - mInputMode.determineNextWordTextCase(textField.getTextBeforeCursor()); + mInputMode.determineNextWordTextCase(textField.getStringBeforeCursor()); resetKeyRepeat(); } diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java index 9ad7c07b..c12f278e 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java @@ -8,7 +8,6 @@ import io.github.sspanak.tt9.Logger; import io.github.sspanak.tt9.ime.helpers.InputType; import io.github.sspanak.tt9.ime.helpers.TextField; import io.github.sspanak.tt9.languages.Language; -import io.github.sspanak.tt9.languages.Text; import io.github.sspanak.tt9.preferences.SettingsStore; abstract public class InputMode { @@ -144,7 +143,7 @@ abstract public class InputMode { return true; } - public void determineNextWordTextCase(Text textBeforeCursor) {} + public void determineNextWordTextCase(String textBeforeCursor) {} // Based on the internal logic of the mode (punctuation or grammar rules), re-adjust the text case for when getSuggestions() is called. protected String adjustSuggestionTextCase(String word, int newTextCase) { return word; } diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java index 4a7effda..5f5f7694 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java @@ -328,7 +328,7 @@ public class ModePredictive extends InputMode { } @Override - public void determineNextWordTextCase(Text textBeforeCursor) { + public void determineNextWordTextCase(String textBeforeCursor) { textCase = autoTextCase.determineNextWordTextCase(textCase, textFieldTextCase, textBeforeCursor); } diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java index 683261ce..e38cb316 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java @@ -70,7 +70,7 @@ public class AutoSpace { return nextKey != 1 - && !nextChars.nextIsPunctuation() + && !Text.nextIsPunctuation(nextChars.toString()) && !nextChars.startsWithNumber() && ( previousChar == '.' diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoTextCase.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoTextCase.java index 78f47655..67847256 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoTextCase.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoTextCase.java @@ -41,7 +41,7 @@ public class AutoTextCase { * For example, this function will return CASE_LOWER by default, but CASE_UPPER at the beginning * of a sentence. */ - public int determineNextWordTextCase(int currentTextCase, int textFieldTextCase, Text textBeforeCursor) { + public int determineNextWordTextCase(int currentTextCase, int textFieldTextCase, String textBeforeCursor) { if ( // When the setting is off, don't do any changes. !settings.getAutoTextCase() @@ -57,17 +57,17 @@ public class AutoTextCase { } // start of text - if (textBeforeCursor.isEmpty()) { + if (textBeforeCursor != null && textBeforeCursor.isEmpty()) { return InputMode.CASE_CAPITALIZE; } // start of sentence, excluding after "..." - if (textBeforeCursor.isStartOfSentence()) { + if (Text.isStartOfSentence(textBeforeCursor)) { return InputMode.CASE_CAPITALIZE; } // this is mostly for English "I" - if (textBeforeCursor.isNextToWord()) { + if (Text.isNextToWord(textBeforeCursor)) { return InputMode.CASE_LOWER; } diff --git a/app/src/main/java/io/github/sspanak/tt9/languages/EmojiLanguage.java b/app/src/main/java/io/github/sspanak/tt9/languages/EmojiLanguage.java index c0ce4add..74a55529 100644 --- a/app/src/main/java/io/github/sspanak/tt9/languages/EmojiLanguage.java +++ b/app/src/main/java/io/github/sspanak/tt9/languages/EmojiLanguage.java @@ -19,7 +19,7 @@ public class EmojiLanguage extends Language { @Override public String getDigitSequenceForWord(String word) { - return Text.isGraphic(word) ? CUSTOM_EMOJI_SEQUENCE : null; + return TextTools.isGraphic(word) ? CUSTOM_EMOJI_SEQUENCE : null; } @Override diff --git a/app/src/main/java/io/github/sspanak/tt9/languages/Text.java b/app/src/main/java/io/github/sspanak/tt9/languages/Text.java index 7f60ed41..ee4d6160 100644 --- a/app/src/main/java/io/github/sspanak/tt9/languages/Text.java +++ b/app/src/main/java/io/github/sspanak/tt9/languages/Text.java @@ -2,20 +2,9 @@ package io.github.sspanak.tt9.languages; import androidx.annotation.NonNull; -import java.text.SimpleDateFormat; -import java.util.Date; import java.util.Locale; -import java.util.TimeZone; -import java.util.regex.Pattern; - -public class Text { - private static final Pattern containsOtherThan1 = Pattern.compile("[02-9]"); - private static final Pattern previousIsLetter = Pattern.compile("\\p{L}$"); - private static final Pattern nextIsPunctuation = Pattern.compile("^\\p{Punct}"); - private static final Pattern nextToWord = Pattern.compile("\\b$"); - private static final Pattern startOfSentence = Pattern.compile("(?