Better support for Armenian language

This commit is contained in:
Yeghishe Piruzyan 2022-04-17 22:30:31 -07:00 committed by amcoder36
parent 9da38ca9e4
commit e46783fd9d
7 changed files with 77 additions and 40 deletions

View file

@ -2169,18 +2169,25 @@ public final class KeyboardTextsTable {
/* morekeys_nordic_row2_11 ~ */
null, null, null, null, null, null, null,
/* ~ morekeys_swiss_row2_11 */
// U+055E: "՞" ARMENIAN QUESTION MARK
// U+055C: "՜" ARMENIAN EXCLAMATION MARK
// U+055A: "՚" ARMENIAN APOSTROPHE
// U+0559: "ՙ" ARMENIAN MODIFIER LETTER LEFT HALF RING
// U+055D: "՝" ARMENIAN COMMA
// U+055B: "՛" ARMENIAN EMPHASIS MARK
// U+058A: "֊" ARMENIAN HYPHEN
// U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
// U+055F: "՟" ARMENIAN ABBREVIATION MARK
/* morekeys_punctuation */ "!autoColumnOrder!8,\\,,\u055E,\u055C,.,\u055A,\u0559,?,!,\u055D,\u055B,\u058A,\u00BB,\u00AB,\u055F,;,:",
/* keyspec_tablet_comma */ "\u055D",
//
// ( U+0028 "(" Բացվող փակագիծ - OPENING PARENTHESES
// ) U+0029 ")" Փակվող փակագիծ - CLOSING PARENTHESES
// ' U+0027 "'" Ապաթարց - APOSTROPHE
// … U+2026 "" Կախման կետեր
// ՞ U+055E "՞" Հարցական - ARMENIAN QUESTION MARK
// ՜ U+055C "՜" Բացականչական - ARMENIAN EXCLAMATION MARK
// ՛ U+055B "՛" Շեշտ
// ՝ U+055D "՝" Բութ
// ֊ U+058A "֊" Միության գծիկ - ARMENIAN HYPHEN
// ― U+2015 "" Անջատման գժիկ - ARMENIAN SEPARATION MARK
// « U+00AB "«" Բացվող չակերտ - LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
// » U+00BB "»" Փակվող չակերտ - RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
// , U+002C "," Ստօրակետ - ARMENIAN COMMA
// ։ U+0589 "։" Վերջակետ - ARMENIAN COLON
// ․ U+2024 "" Միջակետ
//
/* morekeys_punctuation */ "!autoColumnOrder!8,\\,,\u055E,\u055C,\u2024,\u2026,',=,/,\u055D,\u055B,\u058A,\u00BB,\u00AB,\u2015,),(",
/* keyspec_tablet_comma */ ",",
/* morekeys_star ~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
/* ~ keyspec_right_single_angle_quote */
@ -2188,13 +2195,12 @@ public final class KeyboardTextsTable {
// TODO: Enable this when we have glyph for the following letter
// <string name="keyspec_currency">&#x058F;</string>
//
// U+055D: "՝" ARMENIAN COMMA
/* keyspec_comma */ "\u055D",
// U+002C: "," ARMENIAN COMMA
/* keyspec_comma */ ",",
/* morekeys_tablet_comma */ null,
/* keyhintlabel_period */ null,
// U+055E: "՞" ARMENIAN QUESTION MARK
// U+00BF: "¿" INVERTED QUESTION MARK
/* morekeys_question */ "\u055E,\u00BF",
/* morekeys_question */ "\u055E",
/* morekeys_h ~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
@ -2202,8 +2208,7 @@ public final class KeyboardTextsTable {
null, null, null,
/* ~ morekeys_greater_than */
// U+055C: "՜" ARMENIAN EXCLAMATION MARK
// U+00A1: "¡" INVERTED EXCLAMATION MARK
/* morekeys_exclamation */ "\u055C,\u00A1",
/* morekeys_exclamation */ "\u055C",
};
/* Locale is: Icelandic */

View file

@ -113,6 +113,8 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
switch (script) {
case ScriptUtils.SCRIPT_LATIN:
return "qwerty";
case ScriptUtils.SCRIPT_ARMENIAN:
return "armenian_phonetic";
case ScriptUtils.SCRIPT_CYRILLIC:
return "east_slavic";
case ScriptUtils.SCRIPT_GREEK:

View file

@ -45,6 +45,8 @@ import org.dslul.openboard.inputmethod.latin.utils.SuggestionResults;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TreeMap;
public abstract class AndroidWordLevelSpellCheckerSession extends Session {
private static final String TAG = AndroidWordLevelSpellCheckerSession.class.getSimpleName();
@ -62,6 +64,15 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
private static final String quotesRegexp =
"(\\u0022|\\u0027|\\u0060|\\u00B4|\\u2018|\\u2018|\\u201C|\\u201D)";
private static final Map<Integer, String> scriptToPunctuationRegexMap = new TreeMap<>();
static {
scriptToPunctuationRegexMap.put(
ScriptUtils.SCRIPT_ARMENIAN,
"(\\u0028|\\u0029|\\u0027|\\u2026|\\u055E|\\u055C|\\u055B|\\u055D|\\u058A|\\u2015|\\u00AB|\\u00BB|\\u002C|\\u0589|\\u2024)"
);
}
private static final class SuggestionsParams {
public final String[] mSuggestions;
public final int mFlags;
@ -260,12 +271,22 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
final TextInfo textInfo, final NgramContext ngramContext, final int suggestionsLimit) {
try {
updateLocale();
final String text = textInfo.getText().
// It's good to keep this not local specific since the standard
// ones may show up in other languages also.
String text = textInfo.getText().
replaceAll(AndroidSpellCheckerService.APOSTROPHE,
AndroidSpellCheckerService.SINGLE_QUOTE).
replaceAll("^" + quotesRegexp, "").
replaceAll(quotesRegexp + "$", "");
final String localeRegex = scriptToPunctuationRegexMap.get(
ScriptUtils.getScriptFromSpellCheckerLocale(mLocale)
);
if (localeRegex != null) {
text = text.replaceAll(localeRegex, "");
}
if (!mService.hasMainDictionaryForLocale(mLocale)) {
return AndroidSpellCheckerService.getNotInDictEmptySuggestions(
false /* reportAsTypo */);