fixed typing non-dictionary words using the "word... +a, +b, +c" method not possible in Hebrew, Yiddish and Ukrainian
This commit is contained in:
parent
cde3292774
commit
fde8b6ca0f
3 changed files with 25 additions and 10 deletions
|
|
@ -4,6 +4,7 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import io.github.sspanak.tt9.hacks.InputType;
|
import io.github.sspanak.tt9.hacks.InputType;
|
||||||
import io.github.sspanak.tt9.ime.helpers.TextField;
|
import io.github.sspanak.tt9.ime.helpers.TextField;
|
||||||
|
|
@ -416,8 +417,8 @@ class ModeWords extends ModeCheonjiin {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shouldAcceptHebrewOrUkrainianWord(unacceptedText)) {
|
if (shouldContinueHebrewOrUkrainianWord(unacceptedText)) {
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// punctuation breaks words, unless there are database matches ('s, qu', по-, etc...)
|
// punctuation breaks words, unless there are database matches ('s, qu', по-, etc...)
|
||||||
|
|
@ -434,15 +435,17 @@ class ModeWords extends ModeCheonjiin {
|
||||||
* Apostrophes never break Ukrainian and Hebrew words because they are used as letters. Same for
|
* Apostrophes never break Ukrainian and Hebrew words because they are used as letters. Same for
|
||||||
* the quotation marks in Hebrew.
|
* the quotation marks in Hebrew.
|
||||||
*/
|
*/
|
||||||
private boolean shouldAcceptHebrewOrUkrainianWord(String unacceptedText) {
|
private boolean shouldContinueHebrewOrUkrainianWord(String unacceptedText) {
|
||||||
char penultimateChar = unacceptedText.length() > 1 ? unacceptedText.charAt(unacceptedText.length() - 2) : 0;
|
if (unacceptedText.length() <= 1 || !predictions.noDbWords()) {
|
||||||
|
return false;
|
||||||
if (LanguageKind.isHebrew(language) && predictions.noDbWords()) {
|
|
||||||
return penultimateChar != '\'' && penultimateChar != '"';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LanguageKind.isUkrainian(language) && predictions.noDbWords()) {
|
if (LanguageKind.isHebrew(language)) {
|
||||||
return penultimateChar != '\'';
|
return new Text(language, unacceptedText).isValidWordWithPunctuation(List.of('"', '\''));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LanguageKind.isUkrainian(language)) {
|
||||||
|
return new Text(language, unacceptedText).isValidWordWithPunctuation(List.of('\''));
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package io.github.sspanak.tt9.util;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import io.github.sspanak.tt9.ime.modes.InputMode;
|
import io.github.sspanak.tt9.ime.modes.InputMode;
|
||||||
|
|
@ -36,6 +37,17 @@ public class Text extends TextTools {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isValidWordWithPunctuation(List<Character> punctuation) {
|
||||||
|
for (int i = 0, end = text != null ? text.length() : 0; i < end; i++) {
|
||||||
|
if (!Character.isAlphabetic(text.charAt(i)) && !punctuation.contains(text.charAt(i))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean endsWithGraphic() {
|
public boolean endsWithGraphic() {
|
||||||
return text != null && !text.isEmpty() && Characters.isGraphic(text.charAt(text.length() - 1));
|
return text != null && !text.isEmpty() && Characters.isGraphic(text.charAt(text.length() - 1));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,11 @@ public class TextTools {
|
||||||
private static final Pattern startOfSentence = Pattern.compile("(?<!\\.)(^|[.?!؟¿¡])\\s+$");
|
private static final Pattern startOfSentence = Pattern.compile("(?<!\\.)(^|[.?!؟¿¡])\\s+$");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static boolean containsOtherThan1(String str) {
|
public static boolean containsOtherThan1(String str) {
|
||||||
return str != null && containsOtherThan1.matcher(str).find();
|
return str != null && containsOtherThan1.matcher(str).find();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static boolean isCombining(String str) {
|
public static boolean isCombining(String str) {
|
||||||
return str != null && combiningString.matcher(str).find();
|
return str != null && combiningString.matcher(str).find();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue