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