aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Zivkovic <zivkovic@google.com>2015-02-12 11:00:06 -0800
committerDan Zivkovic <zivkovic@google.com>2015-02-12 11:00:06 -0800
commit98596e51a1ec262bd0f90154e156928e1458d4fc (patch)
tree7e851ef05cf2efaeb8de77954eb6bade22772b24
parent4084fa5caeee09ef7993957c5e922dab14c57f3f (diff)
downloadlatinime-98596e51a1ec262bd0f90154e156928e1458d4fc.tar.gz
latinime-98596e51a1ec262bd0f90154e156928e1458d4fc.tar.xz
latinime-98596e51a1ec262bd0f90154e156928e1458d4fc.zip
Map ISO 15924 codes to internal IME script codes.
This way we can support all the languages for which we define a script code. Bug 19340741. Change-Id: Ia80eca4cc2511b70f11058f73bd31746948ded19
-rw-r--r--java/src/com/android/inputmethod/latin/utils/ScriptUtils.java67
1 files changed, 34 insertions, 33 deletions
diff --git a/java/src/com/android/inputmethod/latin/utils/ScriptUtils.java b/java/src/com/android/inputmethod/latin/utils/ScriptUtils.java
index 0e244666d..b6d959b81 100644
--- a/java/src/com/android/inputmethod/latin/utils/ScriptUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/ScriptUtils.java
@@ -23,9 +23,10 @@ import java.util.TreeMap;
* A class to help with handling different writing scripts.
*/
public class ScriptUtils {
+
// Used for hardware keyboards
public static final int SCRIPT_UNKNOWN = -1;
- // TODO: should we use ISO 15924 identifiers instead?
+
public static final int SCRIPT_ARABIC = 0;
public static final int SCRIPT_ARMENIAN = 1;
public static final int SCRIPT_BENGALI = 2;
@@ -44,34 +45,29 @@ public class ScriptUtils {
public static final int SCRIPT_TAMIL = 15;
public static final int SCRIPT_TELUGU = 16;
public static final int SCRIPT_THAI = 17;
- public static final TreeMap<String, Integer> mSpellCheckerLanguageToScript;
+
+ private static final TreeMap<String, Integer> mIso15924toImeScriptCode;
+
static {
- // List of the supported languages and their associated script. We won't check
- // words written in another script than the selected script, because we know we
- // don't have those in our dictionary so we will underline everything and we
- // will never have any suggestions, so it makes no sense checking them, and this
- // is done in {@link #shouldFilterOut}. Also, the script is used to choose which
- // proximity to pass to the dictionary descent algorithm.
- // IMPORTANT: this only contains languages - do not write countries in there.
- // Only the language is searched from the map.
- mSpellCheckerLanguageToScript = new TreeMap<>();
- mSpellCheckerLanguageToScript.put("cs", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("da", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("de", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("el", SCRIPT_GREEK);
- mSpellCheckerLanguageToScript.put("en", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("es", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("fi", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("fr", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("hr", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("it", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("lt", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("lv", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("nb", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("nl", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("pt", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("sl", SCRIPT_LATIN);
- mSpellCheckerLanguageToScript.put("ru", SCRIPT_CYRILLIC);
+ mIso15924toImeScriptCode = new TreeMap<>();
+ mIso15924toImeScriptCode.put("Arab", SCRIPT_ARABIC);
+ mIso15924toImeScriptCode.put("Armn", SCRIPT_ARMENIAN);
+ mIso15924toImeScriptCode.put("Beng", SCRIPT_BENGALI);
+ mIso15924toImeScriptCode.put("Cyrl", SCRIPT_CYRILLIC);
+ mIso15924toImeScriptCode.put("Deva", SCRIPT_DEVANAGARI);
+ mIso15924toImeScriptCode.put("Geor", SCRIPT_GEORGIAN);
+ mIso15924toImeScriptCode.put("Grek", SCRIPT_GREEK);
+ mIso15924toImeScriptCode.put("Hebr", SCRIPT_HEBREW);
+ mIso15924toImeScriptCode.put("Knda", SCRIPT_KANNADA);
+ mIso15924toImeScriptCode.put("Khmr", SCRIPT_KHMER);
+ mIso15924toImeScriptCode.put("Laoo", SCRIPT_LAO);
+ mIso15924toImeScriptCode.put("Latn", SCRIPT_LATIN);
+ mIso15924toImeScriptCode.put("Mlym", SCRIPT_MALAYALAM);
+ mIso15924toImeScriptCode.put("Mymr", SCRIPT_MYANMAR);
+ mIso15924toImeScriptCode.put("Sinh", SCRIPT_SINHALA);
+ mIso15924toImeScriptCode.put("Taml", SCRIPT_TAMIL);
+ mIso15924toImeScriptCode.put("Telu", SCRIPT_TELUGU);
+ mIso15924toImeScriptCode.put("Thai", SCRIPT_THAI);
}
/*
* Returns whether the code point is a letter that makes sense for the specified
@@ -181,12 +177,17 @@ public class ScriptUtils {
}
}
+ /**
+ * @param locale spell checker locale
+ * @return internal Latin IME script code that maps to an ISO 15924 script code
+ * {@see http://unicode.org/iso15924/iso15924-codes.html}
+ */
public static int getScriptFromSpellCheckerLocale(final Locale locale) {
- final Integer script = mSpellCheckerLanguageToScript.get(locale.getLanguage());
- if (null == script) {
- throw new RuntimeException("We have been called with an unsupported language: \""
- + locale.getLanguage() + "\". Framework bug?");
+ String isoScriptCode = locale.getScript();
+ Integer imeScriptCode = mIso15924toImeScriptCode.get(isoScriptCode);
+ if (imeScriptCode == null) {
+ throw new RuntimeException("Unsupported ISO 15924 code: " + isoScriptCode);
}
- return script;
+ return imeScriptCode;
}
}