1053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd. 3053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 4053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * you may not use this file except in compliance with the License. 6053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * You may obtain a copy of the License at 7053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 8053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 10053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * See the License for the specific language governing permissions and 14053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * limitations under the License. 15053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 16053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 17053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpackage jp.co.omronsoft.openwnn.JAJP; 18053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 19053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport jp.co.omronsoft.openwnn.*; 20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport java.util.HashMap; 21053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.SharedPreferences; 22053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/** 24d56eddfd5e0f193359f93e7ef665338cace9e2e9Daisuke Miyakawa * The Romaji to Hiragana converter class for Japanese IME. 25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 26d56eddfd5e0f193359f93e7ef665338cace9e2e9Daisuke Miyakawa * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved. 27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpublic class Romkan implements LetterConverter { 29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** HashMap for Romaji-to-Kana conversion (Japanese mode) */ 30f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa private static final HashMap<String, String> romkanTable = new HashMap<String, String>() {{ 31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("la", "\u3041"); put("xa", "\u3041"); put("a", "\u3042"); 32053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("li", "\u3043"); put("lyi", "\u3043"); put("xi", "\u3043"); 33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xyi", "\u3043"); put("i", "\u3044"); put("yi", "\u3044"); 34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ye", "\u3044\u3047"); put("lu", "\u3045"); put("xu", "\u3045"); 35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("u", "\u3046"); put("whu", "\u3046"); put("wu", "\u3046"); 36053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("wha", "\u3046\u3041"); put("whi", "\u3046\u3043"); put("wi", "\u3046\u3043"); 37053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("we", "\u3046\u3047"); put("whe", "\u3046\u3047"); put("who", "\u3046\u3049"); 38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("le", "\u3047"); put("lye", "\u3047"); put("xe", "\u3047"); 39053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xye", "\u3047"); put("e", "\u3048"); put("lo", "\u3049"); 40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xo", "\u3049"); put("o", "\u304a"); put("ca", "\u304b"); 41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ka", "\u304b"); put("ga", "\u304c"); put("ki", "\u304d"); 42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("kyi", "\u304d\u3043"); put("kye", "\u304d\u3047"); put("kya", "\u304d\u3083"); 43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("kyu", "\u304d\u3085"); put("kyo", "\u304d\u3087"); put("gi", "\u304e"); 44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("gyi", "\u304e\u3043"); put("gye", "\u304e\u3047"); put("gya", "\u304e\u3083"); 45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("gyu", "\u304e\u3085"); put("gyo", "\u304e\u3087"); put("cu", "\u304f"); 46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ku", "\u304f"); put("qu", "\u304f"); put("kwa", "\u304f\u3041"); 47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("qa", "\u304f\u3041"); put("qwa", "\u304f\u3041"); put("qi", "\u304f\u3043"); 48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("qwi", "\u304f\u3043"); put("qyi", "\u304f\u3043"); put("qwu", "\u304f\u3045"); 49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("qe", "\u304f\u3047"); put("qwe", "\u304f\u3047"); put("qye", "\u304f\u3047"); 50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("qo", "\u304f\u3049"); put("qwo", "\u304f\u3049"); put("qya", "\u304f\u3083"); 51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("qyu", "\u304f\u3085"); put("qyo", "\u304f\u3087"); put("gu", "\u3050"); 52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("gwa", "\u3050\u3041"); put("gwi", "\u3050\u3043"); put("gwu", "\u3050\u3045"); 53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("gwe", "\u3050\u3047"); put("gwo", "\u3050\u3049"); put("ke", "\u3051"); 54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ge", "\u3052"); put("co", "\u3053"); put("ko", "\u3053"); 55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("go", "\u3054"); put("sa", "\u3055"); put("za", "\u3056"); 56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ci", "\u3057"); put("shi", "\u3057"); put("si", "\u3057"); 57053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("syi", "\u3057\u3043"); put("she", "\u3057\u3047"); put("sye", "\u3057\u3047"); 58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("sha", "\u3057\u3083"); put("sya", "\u3057\u3083"); put("shu", "\u3057\u3085"); 59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("syu", "\u3057\u3085"); put("sho", "\u3057\u3087"); put("syo", "\u3057\u3087"); 60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ji", "\u3058"); put("zi", "\u3058"); put("jyi", "\u3058\u3043"); 61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("zyi", "\u3058\u3043"); put("je", "\u3058\u3047"); put("jye", "\u3058\u3047"); 62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("zye", "\u3058\u3047"); put("ja", "\u3058\u3083"); put("jya", "\u3058\u3083"); 63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("zya", "\u3058\u3083"); put("ju", "\u3058\u3085"); put("jyu", "\u3058\u3085"); 64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("zyu", "\u3058\u3085"); put("jo", "\u3058\u3087"); put("jyo", "\u3058\u3087"); 65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("zyo", "\u3058\u3087"); put("su", "\u3059"); put("swa", "\u3059\u3041"); 66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("swi", "\u3059\u3043"); put("swu", "\u3059\u3045"); put("swe", "\u3059\u3047"); 67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("swo", "\u3059\u3049"); put("zu", "\u305a"); put("ce", "\u305b"); 68053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("se", "\u305b"); put("ze", "\u305c"); put("so", "\u305d"); 69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("zo", "\u305e"); put("ta", "\u305f"); put("da", "\u3060"); 70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("chi", "\u3061"); put("ti", "\u3061"); put("cyi", "\u3061\u3043"); 71053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tyi", "\u3061\u3043"); put("che", "\u3061\u3047"); put("cye", "\u3061\u3047"); 72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tye", "\u3061\u3047"); put("cha", "\u3061\u3083"); put("cya", "\u3061\u3083"); 73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tya", "\u3061\u3083"); put("chu", "\u3061\u3085"); put("cyu", "\u3061\u3085"); 74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tyu", "\u3061\u3085"); put("cho", "\u3061\u3087"); put("cyo", "\u3061\u3087"); 75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tyo", "\u3061\u3087"); put("di", "\u3062"); put("dyi", "\u3062\u3043"); 76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("dye", "\u3062\u3047"); put("dya", "\u3062\u3083"); put("dyu", "\u3062\u3085"); 77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("dyo", "\u3062\u3087"); put("ltsu", "\u3063"); put("ltu", "\u3063"); 78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xtu", "\u3063"); put("", "\u3063"); put("tsu", "\u3064"); 79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tu", "\u3064"); put("tsa", "\u3064\u3041"); put("tsi", "\u3064\u3043"); 80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tse", "\u3064\u3047"); put("tso", "\u3064\u3049"); put("du", "\u3065"); 81053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("te", "\u3066"); put("thi", "\u3066\u3043"); put("the", "\u3066\u3047"); 82053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tha", "\u3066\u3083"); put("thu", "\u3066\u3085"); put("tho", "\u3066\u3087"); 83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("de", "\u3067"); put("dhi", "\u3067\u3043"); put("dhe", "\u3067\u3047"); 84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("dha", "\u3067\u3083"); put("dhu", "\u3067\u3085"); put("dho", "\u3067\u3087"); 85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("to", "\u3068"); put("twa", "\u3068\u3041"); put("twi", "\u3068\u3043"); 86053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("twu", "\u3068\u3045"); put("twe", "\u3068\u3047"); put("two", "\u3068\u3049"); 87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("do", "\u3069"); put("dwa", "\u3069\u3041"); put("dwi", "\u3069\u3043"); 88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("dwu", "\u3069\u3045"); put("dwe", "\u3069\u3047"); put("dwo", "\u3069\u3049"); 89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("na", "\u306a"); put("ni", "\u306b"); put("nyi", "\u306b\u3043"); 90053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("nye", "\u306b\u3047"); put("nya", "\u306b\u3083"); put("nyu", "\u306b\u3085"); 91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("nyo", "\u306b\u3087"); put("nu", "\u306c"); put("ne", "\u306d"); 92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("no", "\u306e"); put("ha", "\u306f"); put("ba", "\u3070"); 93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("pa", "\u3071"); put("hi", "\u3072"); put("hyi", "\u3072\u3043"); 94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("hye", "\u3072\u3047"); put("hya", "\u3072\u3083"); put("hyu", "\u3072\u3085"); 95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("hyo", "\u3072\u3087"); put("bi", "\u3073"); put("byi", "\u3073\u3043"); 96053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("bye", "\u3073\u3047"); put("bya", "\u3073\u3083"); put("byu", "\u3073\u3085"); 97053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("byo", "\u3073\u3087"); put("pi", "\u3074"); put("pyi", "\u3074\u3043"); 98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("pye", "\u3074\u3047"); put("pya", "\u3074\u3083"); put("pyu", "\u3074\u3085"); 99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("pyo", "\u3074\u3087"); put("fu", "\u3075"); put("hu", "\u3075"); 100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("fa", "\u3075\u3041"); put("fwa", "\u3075\u3041"); put("fi", "\u3075\u3043"); 101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("fwi", "\u3075\u3043"); put("fyi", "\u3075\u3043"); put("fwu", "\u3075\u3045"); 102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("fe", "\u3075\u3047"); put("fwe", "\u3075\u3047"); put("fye", "\u3075\u3047"); 103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("fo", "\u3075\u3049"); put("fwo", "\u3075\u3049"); put("fya", "\u3075\u3083"); 104053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("fyu", "\u3075\u3085"); put("fyo", "\u3075\u3087"); put("bu", "\u3076"); 105053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("pu", "\u3077"); put("he", "\u3078"); put("be", "\u3079"); 106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("pe", "\u307a"); put("ho", "\u307b"); put("bo", "\u307c"); 107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("po", "\u307d"); put("ma", "\u307e"); put("mi", "\u307f"); 108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("myi", "\u307f\u3043"); put("mye", "\u307f\u3047"); put("mya", "\u307f\u3083"); 109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("myu", "\u307f\u3085"); put("myo", "\u307f\u3087"); put("mu", "\u3080"); 110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("me", "\u3081"); put("mo", "\u3082"); put("lya", "\u3083"); 111053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xya", "\u3083"); put("ya", "\u3084"); put("lyu", "\u3085"); 112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xyu", "\u3085"); put("yu", "\u3086"); put("lyo", "\u3087"); 113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xyo", "\u3087"); put("yo", "\u3088"); put("ra", "\u3089"); 114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ri", "\u308a"); put("ryi", "\u308a\u3043"); put("rye", "\u308a\u3047"); 115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("rya", "\u308a\u3083"); put("ryu", "\u308a\u3085"); put("ryo", "\u308a\u3087"); 116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ru", "\u308b"); put("re", "\u308c"); put("ro", "\u308d"); 117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("lwa", "\u308e"); put("xwa", "\u308e"); put("wa", "\u308f"); 118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("wo", "\u3092"); put("nn", "\u3093"); put("xn", "\u3093"); 119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("vu", "\u30f4"); put("va", "\u30f4\u3041"); put("vi", "\u30f4\u3043"); 120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("vyi", "\u30f4\u3043"); put("ve", "\u30f4\u3047"); put("vye", "\u30f4\u3047"); 121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("vo", "\u30f4\u3049"); put("vya", "\u30f4\u3083"); put("vyu", "\u30f4\u3085"); 1222d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("vyo", "\u30f4\u3087"); 1232d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("bb", "\u3063b"); put("cc", "\u3063c"); put("dd", "\u3063d"); 1242d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("ff", "\u3063f"); put("gg", "\u3063g"); put("hh", "\u3063h"); 1252d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("jj", "\u3063j"); put("kk", "\u3063k"); put("ll", "\u3063l"); 1262d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("mm", "\u3063m"); put("pp", "\u3063p"); put("qq", "\u3063q"); 1272d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("rr", "\u3063r"); put("ss", "\u3063s"); put("tt", "\u3063t"); 1282d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("vv", "\u3063v"); put("ww", "\u3063w"); put("xx", "\u3063x"); 1292d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("yy", "\u3063y"); put("zz", "\u3063z"); put("nb", "\u3093b"); 1302d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("nc", "\u3093c"); put("nd", "\u3093d"); put("nf", "\u3093f"); 1312d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("ng", "\u3093g"); put("nh", "\u3093h"); put("nj", "\u3093j"); 1322d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("nk", "\u3093k"); put("nm", "\u3093m"); put("np", "\u3093p"); 1332d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("nq", "\u3093q"); put("nr", "\u3093r"); put("ns", "\u3093s"); 1342d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("nt", "\u3093t"); put("nv", "\u3093v"); put("nw", "\u3093w"); 1352d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("nx", "\u3093x"); put("nz", "\u3093z"); put("nl", "\u3093l"); 136053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("-", "\u30fc"); put(".", "\u3002"); put(",", "\u3001"); put("?", "\uff1f"); put("/", "\u30fb"); 137053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("@", "\uff20"); put("#", "\uff03"); put("%", "\uff05"); put("&", "\uff06"); put("*", "\uff0a"); 138053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("+", "\uff0b"); put("=", "\uff1d"); put("(", "\uff08"); put(")", "\uff09"); 139053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("~", "\uff5e"); put("\"", "\uff02"); put("'", "\uff07"); put(":", "\uff1a"); put(";", "\uff1b"); 140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("!", "\uff01"); put("^", "\uff3e"); put("\u00a5", "\uffe5"); put("$", "\uff04"); put("[", "\u300c"); 141f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa put("]", "\u300d"); put("_", "\uff3f"); put("{", "\uff5b"); put("}", "\uff5d"); 142053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("`", "\uff40"); put("<", "\uff1c"); put(">", "\uff1e"); put("\\", "\uff3c"); put("|", "\uff5c"); 143053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("1", "\uff11"); put("2", "\uff12"); put("3", "\uff13"); put("4", "\uff14"); put("5", "\uff15"); 144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("6", "\uff16"); put("7", "\uff17"); put("8", "\uff18"); put("9", "\uff19"); put("0", "\uff10"); 145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project }}; 146053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1472d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa /** Max length of the target text */ 1482d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa private static final int MAX_LENGTH = 4; 1492d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa 1502d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa 1512d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa /** 1522d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa * Default constructor 1532d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa */ 1542d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa public Romkan() { 1552d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa super(); 1562d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa } 1572d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa 158053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /*********************************************************************** 159053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * LetterConverter's interface 160053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ***********************************************************************/ 161053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see LetterConverter#convert */ 162053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public boolean convert(ComposingText text) { 163053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int cursor = text.getCursor(1); 164053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 165053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (cursor <= 0) { 166053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return false; 167053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 168053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1692d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa StrSegment[] str = new StrSegment[MAX_LENGTH]; 1702d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa int start = MAX_LENGTH; 1712d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa int checkLength = Math.min(cursor, MAX_LENGTH); 1722d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa for (int i = 1; i <= checkLength; i++) { 1732d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa str[MAX_LENGTH - i] = text.getStrSegment(1, cursor - i); 1742d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa start--; 175053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 176053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 177053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project StringBuffer key = new StringBuffer(); 1782d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa while (start < MAX_LENGTH) { 1792d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa for (int i = start; i < MAX_LENGTH; i++) { 180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project key.append(str[i].string); 181053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 182f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa boolean upper = Character.isUpperCase(key.charAt(key.length() - 1)); 183f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa String match = Romkan.romkanTable.get(key.toString().toLowerCase()); 184053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (match != null) { 185f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa if (upper) { 186f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa match = match.toUpperCase(); 187f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa } 188053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project StrSegment[] out; 189053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (match.length() == 1) { 190053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project out = new StrSegment[1]; 1912d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa out[0] = new StrSegment(match, str[start].from, str[MAX_LENGTH - 1].to); 1922d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa text.replaceStrSegment(ComposingText.LAYER1, out, MAX_LENGTH - start); 193053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 194053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project out = new StrSegment[2]; 1952d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa out[0] = new StrSegment(match.substring(0, match.length() - 1), 1962d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa str[start].from, str[MAX_LENGTH - 1].to - 1); 1972d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa out[1] = new StrSegment(match.substring(match.length() - 1), 1982d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa str[MAX_LENGTH - 1].to, str[MAX_LENGTH - 1].to); 1992d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa text.replaceStrSegment(1, out, MAX_LENGTH - start); 200053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 201053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return true; 202053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 203053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project start++; 204053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project key.delete(0, key.length()); 205053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 206053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 207053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return false; 208053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 209053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 210053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see LetterConverter#setPreferences */ 211053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void setPreferences(SharedPreferences pref) {} 212053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 213