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.LetterConverter; 20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport jp.co.omronsoft.openwnn.ComposingText; 21053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport jp.co.omronsoft.openwnn.StrSegment; 22053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport java.util.HashMap; 23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.SharedPreferences; 24053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/** 26e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa * The Romaji to full-width Katakana converter class for Japanese IME. 27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 283feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved. 29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpublic class RomkanFullKatakana implements LetterConverter { 31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** HashMap for Romaji-to-Kana conversion (Japanese mode) */ 327b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa private static final HashMap<String, String> mRomkanTable = new HashMap<String, String>() {{ 33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("la", "\u30a1"); put("xa", "\u30a1"); put("a", "\u30a2"); 34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("li", "\u30a3"); put("lyi", "\u30a3"); put("xi", "\u30a3"); 35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xyi", "\u30a3"); put("i", "\u30a4"); put("yi", "\u30a4"); 36053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ye", "\u30a4\u30a7"); put("lu", "\u30a5"); put("xu", "\u30a5"); 37053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("u", "\u30a6"); put("whu", "\u30a6"); put("wu", "\u30a6"); 38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("wha", "\u30a6\u30a1"); put("whi", "\u30a6\u30a3"); put("wi", "\u30a6\u30a3"); 39053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("we", "\u30a6\u30a7"); put("whe", "\u30a6\u30a7"); put("who", "\u30a6\u30a9"); 40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("le", "\u30a7"); put("lye", "\u30a7"); put("xe", "\u30a7"); 41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xye", "\u30a7"); put("e", "\u30a8"); put("lo", "\u30a9"); 42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xo", "\u30a9"); put("o", "\u30aa"); put("ca", "\u30ab"); 432d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("lka", "\u30f5"); put("xka", "\u30f5"); 44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ka", "\u30ab"); put("ga", "\u30ac"); put("ki", "\u30ad"); 45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("kyi", "\u30ad\u30a3"); put("kye", "\u30ad\u30a7"); put("kya", "\u30ad\u30e3"); 46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("kyu", "\u30ad\u30e5"); put("kyo", "\u30ad\u30e7"); put("gi", "\u30ae"); 47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("gyi", "\u30ae\u30a3"); put("gye", "\u30ae\u30a7"); put("gya", "\u30ae\u30e3"); 48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("gyu", "\u30ae\u30e5"); put("gyo", "\u30ae\u30e7"); put("cu", "\u30af"); 49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ku", "\u30af"); put("qu", "\u30af"); put("kwa", "\u30af\u30a1"); 50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("qa", "\u30af\u30a1"); put("qwa", "\u30af\u30a1"); put("qi", "\u30af\u30a3"); 51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("qwi", "\u30af\u30a3"); put("qyi", "\u30af\u30a3"); put("qwu", "\u30af\u30a5"); 52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("qe", "\u30af\u30a7"); put("qwe", "\u30af\u30a7"); put("qye", "\u30af\u30a7"); 53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("qo", "\u30af\u30a9"); put("qwo", "\u30af\u30a9"); put("qya", "\u30af\u30e3"); 54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("qyu", "\u30af\u30e5"); put("qyo", "\u30af\u30e7"); put("gu", "\u30b0"); 55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("gwa", "\u30b0\u30a1"); put("gwi", "\u30b0\u30a3"); put("gwu", "\u30b0\u30a5"); 562d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("gwe", "\u30b0\u30a7"); put("gwo", "\u30b0\u30a9"); 572d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("lke", "\u30f6"); put("xke", "\u30f6"); put("ke", "\u30b1"); 58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ge", "\u30b2"); put("co", "\u30b3"); put("ko", "\u30b3"); 59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("go", "\u30b4"); put("sa", "\u30b5"); put("za", "\u30b6"); 60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ci", "\u30b7"); put("shi", "\u30b7"); put("si", "\u30b7"); 61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("syi", "\u30b7\u30a3"); put("she", "\u30b7\u30a7"); put("sye", "\u30b7\u30a7"); 62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("sha", "\u30b7\u30e3"); put("sya", "\u30b7\u30e3"); put("shu", "\u30b7\u30e5"); 63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("syu", "\u30b7\u30e5"); put("sho", "\u30b7\u30e7"); put("syo", "\u30b7\u30e7"); 64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ji", "\u30b8"); put("zi", "\u30b8"); put("jyi", "\u30b8\u30a3"); 65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("zyi", "\u30b8\u30a3"); put("je", "\u30b8\u30a7"); put("jye", "\u30b8\u30a7"); 66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("zye", "\u30b8\u30a7"); put("ja", "\u30b8\u30e3"); put("jya", "\u30b8\u30e3"); 67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("zya", "\u30b8\u30e3"); put("ju", "\u30b8\u30e5"); put("jyu", "\u30b8\u30e5"); 68053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("zyu", "\u30b8\u30e5"); put("jo", "\u30b8\u30e7"); put("jyo", "\u30b8\u30e7"); 69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("zyo", "\u30b8\u30e7"); put("su", "\u30b9"); put("swa", "\u30b9\u30a1"); 70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("swi", "\u30b9\u30a3"); put("swu", "\u30b9\u30a5"); put("swe", "\u30b9\u30a7"); 71053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("swo", "\u30b9\u30a9"); put("zu", "\u30ba"); put("ce", "\u30bb"); 72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("se", "\u30bb"); put("ze", "\u30bc"); put("so", "\u30bd"); 73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("zo", "\u30be"); put("ta", "\u30bf"); put("da", "\u30c0"); 74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("chi", "\u30c1"); put("ti", "\u30c1"); put("cyi", "\u30c1\u30a3"); 75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tyi", "\u30c1\u30a3"); put("che", "\u30c1\u30a7"); put("cye", "\u30c1\u30a7"); 76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tye", "\u30c1\u30a7"); put("cha", "\u30c1\u30e3"); put("cya", "\u30c1\u30e3"); 77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tya", "\u30c1\u30e3"); put("chu", "\u30c1\u30e5"); put("cyu", "\u30c1\u30e5"); 78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tyu", "\u30c1\u30e5"); put("cho", "\u30c1\u30e7"); put("cyo", "\u30c1\u30e7"); 79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tyo", "\u30c1\u30e7"); put("di", "\u30c2"); put("dyi", "\u30c2\u30a3"); 80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("dye", "\u30c2\u30a7"); put("dya", "\u30c2\u30e3"); put("dyu", "\u30c2\u30e5"); 81053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("dyo", "\u30c2\u30e7"); put("ltsu", "\u30c3"); put("ltu", "\u30c3"); 82053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xtu", "\u30c3"); put("", "\u30c3"); put("tsu", "\u30c4"); 83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tu", "\u30c4"); put("tsa", "\u30c4\u30a1"); put("tsi", "\u30c4\u30a3"); 84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tse", "\u30c4\u30a7"); put("tso", "\u30c4\u30a9"); put("du", "\u30c5"); 85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("te", "\u30c6"); put("thi", "\u30c6\u30a3"); put("the", "\u30c6\u30a7"); 86053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("tha", "\u30c6\u30e3"); put("thu", "\u30c6\u30e5"); put("tho", "\u30c6\u30e7"); 87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("de", "\u30c7"); put("dhi", "\u30c7\u30a3"); put("dhe", "\u30c7\u30a7"); 88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("dha", "\u30c7\u30e3"); put("dhu", "\u30c7\u30e5"); put("dho", "\u30c7\u30e7"); 89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("to", "\u30c8"); put("twa", "\u30c8\u30a1"); put("twi", "\u30c8\u30a3"); 90053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("twu", "\u30c8\u30a5"); put("twe", "\u30c8\u30a7"); put("two", "\u30c8\u30a9"); 91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("do", "\u30c9"); put("dwa", "\u30c9\u30a1"); put("dwi", "\u30c9\u30a3"); 92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("dwu", "\u30c9\u30a5"); put("dwe", "\u30c9\u30a7"); put("dwo", "\u30c9\u30a9"); 93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("na", "\u30ca"); put("ni", "\u30cb"); put("nyi", "\u30cb\u30a3"); 94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("nye", "\u30cb\u30a7"); put("nya", "\u30cb\u30e3"); put("nyu", "\u30cb\u30e5"); 95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("nyo", "\u30cb\u30e7"); put("nu", "\u30cc"); put("ne", "\u30cd"); 96053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("no", "\u30ce"); put("ha", "\u30cf"); put("ba", "\u30d0"); 97053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("pa", "\u30d1"); put("hi", "\u30d2"); put("hyi", "\u30d2\u30a3"); 98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("hye", "\u30d2\u30a7"); put("hya", "\u30d2\u30e3"); put("hyu", "\u30d2\u30e5"); 99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("hyo", "\u30d2\u30e7"); put("bi", "\u30d3"); put("byi", "\u30d3\u30a3"); 100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("bye", "\u30d3\u30a7"); put("bya", "\u30d3\u30e3"); put("byu", "\u30d3\u30e5"); 101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("byo", "\u30d3\u30e7"); put("pi", "\u30d4"); put("pyi", "\u30d4\u30a3"); 102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("pye", "\u30d4\u30a7"); put("pya", "\u30d4\u30e3"); put("pyu", "\u30d4\u30e5"); 103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("pyo", "\u30d4\u30e7"); put("fu", "\u30d5"); put("hu", "\u30d5"); 104053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("fa", "\u30d5\u30a1"); put("fwa", "\u30d5\u30a1"); put("fi", "\u30d5\u30a3"); 105053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("fwi", "\u30d5\u30a3"); put("fyi", "\u30d5\u30a3"); put("fwu", "\u30d5\u30a5"); 106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("fe", "\u30d5\u30a7"); put("fwe", "\u30d5\u30a7"); put("fye", "\u30d5\u30a7"); 107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("fo", "\u30d5\u30a9"); put("fwo", "\u30d5\u30a9"); put("fya", "\u30d5\u30e3"); 108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("fyu", "\u30d5\u30e5"); put("fyo", "\u30d5\u30e7"); put("bu", "\u30d6"); 109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("pu", "\u30d7"); put("he", "\u30d8"); put("be", "\u30d9"); 110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("pe", "\u30da"); put("ho", "\u30db"); put("bo", "\u30dc"); 111053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("po", "\u30dd"); put("ma", "\u30de"); put("mi", "\u30df"); 112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("myi", "\u30df\u30a3"); put("mye", "\u30df\u30a7"); put("mya", "\u30df\u30e3"); 113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("myu", "\u30df\u30e5"); put("myo", "\u30df\u30e7"); put("mu", "\u30e0"); 114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("me", "\u30e1"); put("mo", "\u30e2"); put("lya", "\u30e3"); 115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xya", "\u30e3"); put("ya", "\u30e4"); put("lyu", "\u30e5"); 116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xyu", "\u30e5"); put("yu", "\u30e6"); put("lyo", "\u30e7"); 117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("xyo", "\u30e7"); put("yo", "\u30e8"); put("ra", "\u30e9"); 118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ri", "\u30ea"); put("ryi", "\u30ea\u30a3"); put("rye", "\u30ea\u30a7"); 119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("rya", "\u30ea\u30e3"); put("ryu", "\u30ea\u30e5"); put("ryo", "\u30ea\u30e7"); 120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("ru", "\u30eb"); put("re", "\u30ec"); put("ro", "\u30ed"); 121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("lwa", "\u30ee"); put("xwa", "\u30ee"); put("wa", "\u30ef"); 122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("wo", "\u30f2"); put("nn", "\u30f3"); put("xn", "\u30f3"); 123053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("vu", "\u30f4"); put("va", "\u30f4\u30a1"); put("vi", "\u30f4\u30a3"); 124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("vyi", "\u30f4\u30a3"); put("ve", "\u30f4\u30a7"); put("vye", "\u30f4\u30a7"); 125053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("vo", "\u30f4\u30a9"); put("vya", "\u30f4\u30e3"); put("vyu", "\u30f4\u30e5"); 1262d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("vyo", "\u30f4\u30e7"); 1272d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("bb", "\u30c3b"); put("cc", "\u30c3c"); put("dd", "\u30c3d"); 1282d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("ff", "\u30c3f"); put("gg", "\u30c3g"); put("hh", "\u30c3h"); 1292d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("jj", "\u30c3j"); put("kk", "\u30c3k"); put("ll", "\u30c3l"); 1302d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("mm", "\u30c3m"); put("pp", "\u30c3p"); put("qq", "\u30c3q"); 1312d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("rr", "\u30c3r"); put("ss", "\u30c3s"); put("tt", "\u30c3t"); 1322d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("vv", "\u30c3v"); put("ww", "\u30c3w"); put("xx", "\u30c3x"); 1332d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("yy", "\u30c3y"); put("zz", "\u30c3z"); put("nb", "\u30f3b"); 1342d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("nc", "\u30f3c"); put("nd", "\u30f3d"); put("nf", "\u30f3f"); 1352d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("ng", "\u30f3g"); put("nh", "\u30f3h"); put("nj", "\u30f3j"); 1362d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("nk", "\u30f3k"); put("nm", "\u30f3m"); put("np", "\u30f3p"); 1372d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("nq", "\u30f3q"); put("nr", "\u30f3r"); put("ns", "\u30f3s"); 1382d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("nt", "\u30f3t"); put("nv", "\u30f3v"); put("nw", "\u30f3w"); 1392d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa put("nx", "\u30f3x"); put("nz", "\u30f3z"); put("nl", "\u30f3l"); 140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project put("-", "\u30fc"); put(".", "\u3002"); put(",", "\u3001"); put("?", "\uff1f"); put("/", "\u30fb"); 141053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project }}; 142053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1432d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa /** Max length of the target text */ 1442d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa private static final int MAX_LENGTH = 4; 1452d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa 1462d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa 1472d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa /** 1482d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa * Default constructor 1492d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa */ 1502d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa public RomkanFullKatakana() { 1512d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa super(); 1522d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa } 1532d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa 154053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see LetterConverter#convert */ 155053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public boolean convert(ComposingText text) { 156053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return convert(text, mRomkanTable); 157053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 158053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 159053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 160053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * convert Romaji to Full Katakana 161053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 1622d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa * @param text The input/output text 1632d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa * @param table HashMap for Romaji-to-Kana conversion 1642d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa * @return {@code true} if conversion is compleated; {@code false} if not 165053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 1667b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa public static boolean convert(ComposingText text, HashMap<String, String> table) { 167053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int cursor = text.getCursor(1); 168053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 169053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (cursor <= 0) { 170053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return false; 171053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 172053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1732d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa StrSegment[] str = new StrSegment[MAX_LENGTH]; 1742d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa int start = MAX_LENGTH; 1752d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa int checkLength = Math.min(cursor, MAX_LENGTH); 1762d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa for (int i = 1; i <= checkLength; i++) { 1772d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa str[MAX_LENGTH - i] = text.getStrSegment(1, cursor - i); 1782d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa start--; 179053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 181053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project StringBuffer key = new StringBuffer(); 1822d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa while (start < MAX_LENGTH) { 1832d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa for (int i = start; i < MAX_LENGTH; i++) { 184053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project key.append(str[i].string); 185053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1867b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa boolean upper = Character.isUpperCase(key.charAt(key.length() - 1)); 1877b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa String match = table.get(key.toString().toLowerCase()); 188053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (match != null) { 1897b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa if (upper) { 1907b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa match = match.toUpperCase(); 1917b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa } 192053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project StrSegment[] out; 193053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (match.length() == 1) { 194053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project out = new StrSegment[1]; 1952d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa out[0] = new StrSegment(match, str[start].from, str[MAX_LENGTH - 1].to); 1962d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa text.replaceStrSegment(ComposingText.LAYER1, out, MAX_LENGTH - start); 197053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 198053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project out = new StrSegment[2]; 1992d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa out[0] = new StrSegment(match.substring(0, match.length() - 1), 2002d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa str[start].from, str[MAX_LENGTH - 1].to - 1); 2012d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa out[1] = new StrSegment(match.substring(match.length() - 1), 2022d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa str[MAX_LENGTH - 1].to, str[MAX_LENGTH - 1].to); 2032d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa text.replaceStrSegment(1, out, MAX_LENGTH - start); 204053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 205053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return true; 206053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 207053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project start++; 208053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project key.delete(0, key.length()); 209053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 210053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 211053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return false; 212053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 213053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 214053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see LetterConverter#setPreferences */ 215053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void setPreferences(SharedPreferences pref) {} 216053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 217