Khmer.java revision 139773d0167a2cf09c4b6c2c47aa7d980dc413bd
1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.inputmethod.keyboard.layout; 18 19import com.android.inputmethod.keyboard.KeyboardId; 20import com.android.inputmethod.keyboard.layout.expected.ExpectedKey; 21import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder; 22import com.android.inputmethod.latin.Constants; 23 24import java.util.Locale; 25 26/** 27 * The Khmer alphabet keyboard. 28 */ 29public final class Khmer extends LayoutBase { 30 private static final String LAYOUT_NAME = "khmer"; 31 32 public Khmer(final LayoutCustomizer customizer) { 33 super(customizer, Symbols.class, SymbolsShifted.class); 34 } 35 36 @Override 37 public String getName() { return LAYOUT_NAME; } 38 39 public static class KhmerCustomizer extends LayoutCustomizer { 40 public KhmerCustomizer(final Locale locale) { super(locale); } 41 42 @Override 43 public ExpectedKey getAlphabetKey() { return KHMER_ALPHABET_KEY; } 44 45 @Override 46 public ExpectedKey getCurrencyKey() { return CURRENCY_DOLLAR_WITH_RIEL; } 47 48 @Override 49 public ExpectedKey[] getRightShiftKeys(final boolean isPhone) { return EMPTY_KEYS; } 50 51 // U+1780: "ក" KHMER LETTER KA 52 // U+1781: "ខ" KHMER LETTER KHA 53 // U+1782: "គ" KHMER LETTER KO 54 private static final ExpectedKey KHMER_ALPHABET_KEY = key( 55 "\u1780\u1781\u1782", Constants.CODE_SWITCH_ALPHA_SYMBOL); 56 57 // U+17DB: "៛" KHMER CURRENCY SYMBOL RIEL 58 private static final ExpectedKey CURRENCY_DOLLAR_WITH_RIEL = key(Symbols.DOLLAR_SIGN, 59 moreKey("\u17DB"), Symbols.CENT_SIGN, Symbols.POUND_SIGN, Symbols.EURO_SIGN, 60 Symbols.YEN_SIGN, Symbols.PESO_SIGN); 61 } 62 63 @Override 64 ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) { 65 if (isPhone) { 66 return ALPHABET_COMMON; 67 } 68 final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON); 69 builder.addKeysOnTheRightOfRow(4, (Object[])EXCLAMATION_AND_QUESTION_MARKS); 70 return builder.build(); 71 } 72 73 @Override 74 public ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone, 75 final int elementId) { 76 if (elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) { 77 return getCommonAlphabetLayout(isPhone); 78 } 79 return ALPHABET_SHIFTED_COMMON; 80 } 81 82 // Helper method to create alphabet layout by adding special function keys. 83 @Override 84 ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder, 85 final boolean isPhone) { 86 final LayoutCustomizer customizer = getCustomizer(); 87 builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone)); 88 builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone)); 89 builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone)); 90 if (isPhone) { 91 builder.addKeysOnTheRightOfRow(4, DELETE_KEY) 92 .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) 93 .addKeysOnTheRightOfRow(5, key(ENTER_KEY, EMOJI_KEY)); 94 } else { 95 builder.addKeysOnTheRightOfRow(1, DELETE_KEY) 96 .addKeysOnTheRightOfRow(3, ENTER_KEY) 97 .addKeysOnTheLeftOfRow(5, 98 customizer.getSymbolsKey(), key(SHORTCUT_KEY, SETTINGS_KEY)) 99 .addKeysOnTheRightOfRow(5, EMOJI_KEY); 100 } 101 builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone)) 102 .addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone)); 103 return builder; 104 } 105 106 private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder() 107 .setKeysOfRow(1, 108 // U+17E1: "១" KHMER DIGIT ONE 109 // U+17F1: "៱" KHMER SYMBOL LEK ATTAK MUOY 110 key("\u17E1", joinMoreKeys("1", "\u17F1")), 111 // U+17E2: "២" KHMER DIGIT TWO 112 // U+17F2: "៲" KHMER SYMBOL LEK ATTAK PII 113 key("\u17E2", joinMoreKeys("2", "\u17F2")), 114 // U+17E3: "៣" KHMER DIGIT THREE 115 // U+17F3: "៳" KHMER SYMBOL LEK ATTAK BEI 116 key("\u17E3", joinMoreKeys("3", "\u17F3")), 117 // U+17E4: "៤" KHMER DIGIT FOUR 118 // U+17F4: "៴" KHMER SYMBOL LEK ATTAK BUON 119 key("\u17E4", joinMoreKeys("4", "\u17F4")), 120 // U+17E5: "៥" KHMER DIGIT FIVE 121 // U+17F5: "៵" KHMER SYMBOL LEK ATTAK PRAM 122 key("\u17E5", joinMoreKeys("5", "\u17F5")), 123 // U+17E6: "៦" KHMER DIGIT SIX 124 // U+17F6: "៶" KHMER SYMBOL LEK ATTAK PRAM-MUOY 125 key("\u17E6", joinMoreKeys("6", "\u17F6")), 126 // U+17E7: "៧" KHMER DIGIT SEVEN 127 // U+17F7: "៷" KHMER SYMBOL LEK ATTAK PRAM-PII 128 key("\u17E7", joinMoreKeys("7", "\u17F7")), 129 // U+17E8: "៨" KHMER DIGIT EIGHT 130 // U+17F8: "៸" KHMER SYMBOL LEK ATTAK PRAM-BEI 131 key("\u17E8", joinMoreKeys("8", "\u17F8")), 132 // U+17E9: "៩" KHMER DIGIT NINE 133 // U+17F9: "៹" KHMER SYMBOL LEK ATTAK PRAM-BUON 134 key("\u17E9", joinMoreKeys("9", "\u17F9")), 135 // U+17E0: "០" KHMER DIGIT ZERO 136 // U+17F0: "៰" KHMER SYMBOL LEK ATTAK SON 137 key("\u17E0", joinMoreKeys("0", "\u17F0")), 138 // U+17A5: "ឥ" KHMER INDEPENDENT VOWEL QI 139 // U+17A6: "ឦ" KHMER INDEPENDENT VOWEL QII 140 key("\u17A5", moreKey("\u17A6")), 141 // U+17B2: "ឲ" KHMER INDEPENDENT VOWEL QOO TYPE TWO 142 // U+17B1: "ឱ" KHMER INDEPENDENT VOWEL QOO TYPE ONE 143 key("\u17B2", moreKey("\u17B1"))) 144 .setKeysOfRow(2, 145 // U+1786: "ឆ" KHMER LETTER CHA 146 // U+17B9: "ឹ" KHMER VOWEL SIGN Y 147 // U+17C1: "េ" KHMER VOWEL SIGN E 148 // U+179A: "រ" KHMER LETTER RO 149 // U+178F: "ត" KHMER LETTER TA 150 // U+1799: "យ" KHMER LETTER YO 151 // U+17BB: "ុ" KHMER VOWEL SIGN U 152 // U+17B7: "ិ" KHMER VOWEL SIGN I 153 // U+17C4: "ោ" KHMER VOWEL SIGN OO 154 // U+1795: "ផ" KHMER LETTER PHA 155 // U+17C0: "ៀ" KHMER VOWEL SIGN IE 156 "\u1786", "\u17B9", "\u17C1", "\u179A", "\u178F", "\u1799", "\u17BB", "\u17B7", 157 "\u17C4", "\u1795", "\u17C0", 158 // U+17AA: "ឪ" KHMER INDEPENDENT VOWEL QUUV 159 // U+17A7: "ឧ" KHMER INDEPENDENT VOWEL QU 160 // U+17B1: "ឱ" KHMER INDEPENDENT VOWEL QOO TYPE ONE 161 // U+17B3: "ឳ" KHMER INDEPENDENT VOWEL QAU 162 // U+17A9: "ឩ" KHMER INDEPENDENT VOWEL QUU 163 // U+17A8: "ឨ" KHMER INDEPENDENT VOWEL QUK 164 key("\u17AA", joinMoreKeys("\u17A7", "\u17B1", "\u17B3", "\u17A9", "\u17A8"))) 165 .setKeysOfRow(3, 166 // U+17B6: "ា" KHMER VOWEL SIGN AA 167 // U+179F: "ស" KHMER LETTER SA 168 // U+178A: "ដ" KHMER LETTER DA 169 // U+1790: "ថ" KHMER LETTER THA 170 // U+1784: "ង" KHMER LETTER NGO 171 // U+17A0: "ហ" KHMER LETTER HA 172 // U+17D2: "្" KHMER SIGN COENG 173 // U+1780: "ក" KHMER LETTER KA 174 // U+179B: "ល" KHMER LETTER LO 175 // U+17BE: "ើ" KHMER VOWEL SIGN OE 176 // U+17CB: "់" KHMER SIGN BANTOC 177 "\u17B6", "\u179F", "\u178A", "\u1790", "\u1784", "\u17A0", "\u17D2", "\u1780", 178 "\u179B", "\u17BE", "\u17CB", 179 // U+17AE: "ឮ" KHMER INDEPENDENT VOWEL LYY 180 // U+17AD: "ឭ" KHMER INDEPENDENT VOWEL LY 181 // U+17B0: "ឰ" KHMER INDEPENDENT VOWEL QAI 182 key("\u17AE", joinMoreKeys("\u17AD", "\u17B0"))) 183 .setKeysOfRow(4, 184 // U+178B: "ឋ" KHMER LETTER TTHA 185 // U+1781: "ខ" KHMER LETTER KHA 186 // U+1785: "ច" KHMER LETTER CA 187 // U+179C: "វ" KHMER LETTER VO 188 // U+1794: "ប" KHMER LETTER BA 189 // U+1793: "ន" KHMER LETTER NO 190 // U+1798: "ម" KHMER LETTER MO 191 // U+17BB/U+17C6: "ុំ" KHMER VOWEL SIGN U/KHMER SIGN NIKAHIT 192 // U+17D4: "។" KHMER SIGN KHAN 193 // U+17CA: "៊" KHMER SIGN TRIISAP 194 "\u178B", "\u1781", "\u1785", "\u179C", "\u1794", "\u1793", "\u1798", 195 "\u17BB\u17C6", "\u17D4", "\u17CA") 196 .build(); 197 198 private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder() 199 .setKeysOfRow(1, 200 key("!", ZWJ_KEY), 201 // U+17D7: "ៗ" KHMER SIGN LEK TOO 202 key("\u17D7", ZWNJ_KEY), 203 // U+17D1: "៑" KHMER SIGN VIRIAM 204 key("\"", moreKey("\u17D1")), 205 // U+17DB: "៛" KHMER CURRENCY SYMBOL RIEL 206 key("\u17DB", joinMoreKeys(Symbols.DOLLAR_SIGN, Symbols.EURO_SIGN)), 207 // U+17D6: "៖" KHMER SIGN CAMNUC PII KUUH 208 key("%", moreKey("\u17D6")), 209 // U+17CD: "៍" KHMER SIGN TOANDAKHIAT 210 // U+17D9: "៙" KHMER SIGN PHNAEK MUAN 211 key("\u17CD", moreKey("\u17D9")), 212 // U+17D0: "័" KHMER SIGN SAMYOK SANNYA 213 // U+17DA: "៚" KHMER SIGN KOOMUUT 214 key("\u17D0", moreKey("\u17DA")), 215 // U+17CF: "៏" KHMER SIGN AHSDA 216 key("\u17CF", moreKey("*")), 217 // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 218 key("(", joinMoreKeys("{", "\u00AB")), 219 // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 220 key(")", joinMoreKeys("}", "\u00BB")), 221 // U+17CC: "៌" KHMER SIGN ROBAT 222 // U+00D7: "×" MULTIPLICATION SIGN 223 key("\u17CC", moreKey("\u00D7")), 224 // U+17CE: "៎" KHMER SIGN KAKABAT 225 "\u17CE") 226 .setKeysOfRow(2, 227 // U+1788: "ឈ" KHMER LETTER CHO 228 // U+17DC: "ៜ" KHMER SIGN AVAKRAHASANYA 229 key("\u1788", moreKey("\u17DC")), 230 // U+17BA: "ឺ" KHMER VOWEL SIGN YY 231 // U+17DD: "៝" KHMER SIGN ATTHACAN 232 key("\u17BA", moreKey("\u17DD")), 233 // U+17C2: "ែ" KHMER VOWEL SIGN AE 234 "\u17C2", 235 // U+17AC: "ឬ" KHMER INDEPENDENT VOWEL RYY 236 // U+17AB: "ឫ" KHMER INDEPENDENT VOWEL RY 237 key("\u17AC", moreKey("\u17AB")), 238 // U+1791: "ទ" KHMER LETTER TO 239 // U+17BD: "ួ" KHMER VOWEL SIGN UA 240 // U+17BC: "ូ" KHMER VOWEL SIGN UU 241 // U+17B8: "ី" KHMER VOWEL SIGN II 242 // U+17C5: "ៅ" KHMER VOWEL SIGN AU 243 // U+1797: "ភ" KHMER LETTER PHO 244 // U+17BF: "ឿ" KHMER VOWEL SIGN YA 245 // U+17B0: "ឰ" KHMER INDEPENDENT VOWEL QAI 246 "\u1791", "\u17BD", "\u17BC", "\u17B8", "\u17C5", "\u1797", "\u17BF", "\u17B0") 247 .setKeysOfRow(3, 248 // U+17B6/U+17C6: "ាំ" KHMER VOWEL SIGN AA/KHMER SIGN NIKAHIT 249 // U+17C3: "ៃ" KHMER VOWEL SIGN AI 250 // U+178C: "ឌ" KHMER LETTER DO 251 // U+1792: "ធ" KHMER LETTER THO 252 // U+17A2: "អ" KHMER LETTER QAE 253 "\u17B6\u17C6", "\u17C3", "\u178C", "\u1792", "\u17A2", 254 // U+17C7: "ះ" KHMER SIGN REAHMUK 255 // U+17C8: "ៈ" KHMER SIGN YUUKALEAPINTU 256 key("\u17C7", moreKey("\u17C8")), 257 // U+1789: "ញ" KHMER LETTER NYO 258 "\u1789", 259 // U+1782: "គ" KHMER LETTER KO 260 // U+179D: "ឝ" KHMER LETTER SHA 261 key("\u1782", moreKey("\u179D")), 262 // U+17A1: "ឡ" KHMER LETTER LA 263 // U+17C4/U+17C7: "ោះ" KHMER VOWEL SIGN OO/KHMER SIGN REAHMUK 264 // U+17C9: "៉" KHMER SIGN MUUSIKATOAN 265 // U+17AF: "ឯ" KHMER INDEPENDENT VOWEL QE 266 "\u17A1", "\u17C4\u17C7", "\u17C9", "\u17AF") 267 .setKeysOfRow(4, 268 // U+178D: "ឍ" KHMER LETTER TTHO 269 // U+1783: "ឃ" KHMER LETTER KHO 270 // U+1787: "ជ" KHMER LETTER CO 271 // U+17C1/U+17C7: "េះ" KHMER VOWEL SIGN E/KHMER SIGN REAHMUK 272 "\u178D", "\u1783", "\u1787", "\u17C1\u17C7", 273 // U+1796: "ព" KHMER LETTER PO 274 // U+179E: "ឞ" KHMER LETTER SSO 275 key("\u1796", moreKey("\u179E")), 276 // U+178E: "ណ" KHMER LETTER NNO 277 // U+17C6: "ំ" KHMER SIGN NIKAHIT 278 // U+17BB/U+17C7: "ុះ" KHMER VOWEL SIGN U/KHMER SIGN REAHMUK 279 // U+17D5: "៕" KHMER SIGN BARIYOOSAN 280 "\u178E", "\u17C6", "\u17BB\u17C7", "\u17D5", "?") 281 .build(); 282} 283