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 
17 package com.android.inputmethod.keyboard.layout;
18 
19 import com.android.inputmethod.keyboard.KeyboardId;
20 import com.android.inputmethod.keyboard.layout.customizer.LayoutCustomizer;
21 import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
22 import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
23 import com.android.inputmethod.latin.common.Constants;
24 
25 import java.util.Locale;
26 
27 /**
28  * The Khmer alphabet keyboard.
29  */
30 public final class Lao extends LayoutBase {
31     private static final String LAYOUT_NAME = "lao";
32 
Lao(final Locale locale)33     public Lao(final Locale locale) {
34         super(new LaoCustomizer(locale), Symbols.class, SymbolsShifted.class);
35     }
36 
37     @Override
getName()38     public String getName() { return LAYOUT_NAME; }
39 
40     private static class LaoCustomizer extends LayoutCustomizer {
LaoCustomizer(final Locale locale)41         LaoCustomizer(final Locale locale) { super(locale); }
42 
43         @Override
getNumberOfRows()44         public int getNumberOfRows() { return 5; }
45 
46         @Override
getAlphabetKey()47         public ExpectedKey getAlphabetKey() { return LAO_ALPHABET_KEY; }
48 
49         @Override
getCurrencyKey()50         public ExpectedKey getCurrencyKey() { return CURRENCY_KIP; }
51 
52         @Override
getOtherCurrencyKeys()53         public ExpectedKey[] getOtherCurrencyKeys() {
54             return SymbolsShifted.CURRENCIES_OTHER_GENERIC;
55         }
56 
57         @Override
getRightShiftKeys(final boolean isPhone)58         public ExpectedKey[] getRightShiftKeys(final boolean isPhone) { return EMPTY_KEYS; }
59 
60         // U+0E81: "ກ" LAO LETTER KO
61         // U+0E82: "ຂ" LAO LETTER KHO SUNG
62         // U+0E84: "ຄ" LAO LETTER KHO TAM
63         private static final ExpectedKey LAO_ALPHABET_KEY = key(
64                 "\u0E81\u0E82\u0E84", Constants.CODE_SWITCH_ALPHA_SYMBOL);
65 
66         // U+20AD: "₭" KIP SIGN
67         private static final ExpectedKey CURRENCY_KIP = key("\u20AD",
68                 Symbols.CURRENCY_GENERIC_MORE_KEYS);
69     }
70 
71     @Override
getCommonAlphabetLayout(final boolean isPhone)72     ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) {
73         if (isPhone) {
74             return ALPHABET_COMMON;
75         }
76         final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
77         builder.addKeysOnTheRightOfRow(4, (Object[])EXCLAMATION_AND_QUESTION_MARKS);
78         return builder.build();
79     }
80 
81     @Override
getCommonAlphabetShiftLayout(final boolean isPhone, final int elementId)82     public ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone,
83             final int elementId) {
84         if (elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
85             return getCommonAlphabetLayout(isPhone);
86         }
87         return ALPHABET_SHIFTED_COMMON;
88     }
89 
90     private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
91             .setKeysOfRow(1,
92                     // U+0EA2: "ຢ" LAO LETTER YO
93                     // U+0ED1: "໑" LAO DIGIT ONE
94                     key("\u0EA2", joinMoreKeys("1", "\u0ED1")),
95                     // U+0E9F: "ຟ" LAO LETTER FO SUNG
96                     // U+0ED2: "໒" LAO DIGIT TWO
97                     key("\u0E9F", joinMoreKeys("2", "\u0ED2")),
98                     // U+0EC2: "ໂ" LAO VOWEL SIGN O
99                     // U+0ED3: "໓" LAO DIGIT THREE
100                     key("\u0EC2", joinMoreKeys("3", "\u0ED3")),
101                     // U+0E96: "ຖ" LAO LETTER THO SUNG
102                     // U+0ED4: "໔" LAO DIGIT FOUR
103                     key("\u0E96", joinMoreKeys("4", "\u0ED4")),
104                     // U+0EB8: "ຸ" LAO VOWEL SIGN U
105                     // U+0EB9: "ູ" LAO VOWEL SIGN UU
106                     "\u0EB8", "\u0EB9",
107                     // U+0E84: "ຄ" LAO LETTER KHO TAM
108                     // U+0ED5: "໕" LAO DIGIT FIVE
109                     key("\u0E84", joinMoreKeys("5", "\u0ED5")),
110                     // U+0E95: "ຕ" LAO LETTER TO
111                     // U+0ED6: "໖" LAO DIGIT SIX
112                     key("\u0E95", joinMoreKeys("6", "\u0ED6")),
113                     // U+0E88: "ຈ" LAO LETTER CO
114                     // U+0ED7: "໗" LAO DIGIT SEVEN
115                     key("\u0E88", joinMoreKeys("7", "\u0ED7")),
116                     // U+0E82: "ຂ" LAO LETTER KHO SUNG
117                     // U+0ED8: "໘" LAO DIGIT EIGHT
118                     key("\u0E82", joinMoreKeys("8", "\u0ED8")),
119                     // U+0E8A: "ຊ" LAO LETTER SO TAM
120                     // U+0ED9: "໙" LAO DIGIT NINE
121                     key("\u0E8A", joinMoreKeys("9", "\u0ED9")),
122                     // U+0ECD: "ໍ" LAO NIGGAHITA
123                     "\u0ECD")
124             .setKeysOfRow(2,
125                     // U+0EBB: "ົ" LAO VOWEL SIGN MAI KON
126                     "\u0EBB",
127                     // U+0EC4: "ໄ" LAO VOWEL SIGN AI
128                     // U+0ED0: "໐" LAO DIGIT ZERO
129                     key("\u0EC4", joinMoreKeys("0", "\u0ED0")),
130                     // U+0EB3: "ຳ" LAO VOWEL SIGN AM
131                     // U+0E9E: "ພ" LAO LETTER PHO TAM
132                     // U+0EB0: "ະ" LAO VOWEL SIGN A
133                     // U+0EB4: "ິ" LAO VOWEL SIGN I
134                     // U+0EB5: "ີ" LAO VOWEL SIGN II
135                     // U+0EAE: "ຮ" LAO LETTER HO TAM
136                     // U+0E99: "ນ" LAO LETTER NO
137                     // U+0E8D: "ຍ" LAO LETTER NYO
138                     // U+0E9A: "ບ" LAO LETTER BO
139                     // U+0EA5: "ລ" LAO LETTER LO LOOT
140                     "\u0EB3", "\u0E9E", "\u0EB0", "\u0EB4", "\u0EB5", "\u0EAE", "\u0E99", "\u0E8D",
141                     "\u0E9A", "\u0EA5")
142             .setKeysOfRow(3,
143                     // U+0EB1: "ັ" LAO VOWEL SIGN MAI KAN
144                     // U+0EAB: "ຫ" LAO LETTER HO SUNG
145                     // U+0E81: "ກ" LAO LETTER KO
146                     // U+0E94: "ດ" LAO LETTER DO
147                     // U+0EC0: "ເ" LAO VOWEL SIGN E
148                     // U+0EC9: "້" LAO TONE MAI THO
149                     // U+0EC8: "່" LAO TONE MAI EK
150                     // U+0EB2: "າ" LAO VOWEL SIGN AA
151                     // U+0EAA: "ສ" LAO LETTER SO SUNG
152                     // U+0EA7: "ວ" LAO LETTER WO
153                     // U+0E87: "ງ" LAO LETTER NGO
154                     // U+201C: "“" LEFT DOUBLE QUOTATION MARK
155                     "\u0EB1", "\u0EAB", "\u0E81", "\u0E94", "\u0EC0", "\u0EC9", "\u0EC8", "\u0EB2",
156                     "\u0EAA", "\u0EA7", "\u0E87", "\u201C")
157             .setKeysOfRow(4,
158                     // U+0E9C: "ຜ" LAO LETTER PHO SUNG
159                     // U+0E9B: "ປ" LAO LETTER PO
160                     // U+0EC1: "ແ" LAO VOWEL SIGN EI
161                     // U+0EAD: "ອ" LAO LETTER O
162                     // U+0EB6: "ຶ" LAO VOWEL SIGN Y
163                     // U+0EB7: "ື" LAO VOWEL SIGN YY
164                     // U+0E97: "ທ" LAO LETTER THO TAM
165                     // U+0EA1: "ມ" LAO LETTER MO
166                     // U+0EC3: "ໃ" LAO VOWEL SIGN AY
167                     // U+0E9D: "ຝ" LAO LETTER FO TAM
168                     "\u0E9C", "\u0E9B", "\u0EC1", "\u0EAD", "\u0EB6", "\u0EB7", "\u0E97", "\u0EA1",
169                     "\u0EC3", "\u0E9D")
170             .build();
171 
172     private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
173             .setKeysOfRow(1,
174                     // U+0ED1: "໑" LAO DIGIT ONE
175                     // U+0ED2: "໒" LAO DIGIT TWO
176                     // U+0ED3: "໓" LAO DIGIT THREE
177                     // U+0ED4: "໔" LAO DIGIT FOUR
178                     // U+0ECC: "໌" LAO CANCELLATION MARK
179                     // U+0EBC: "ຼ" LAO SEMIVOWEL SIGN LO
180                     // U+0ED5: "໕" LAO DIGIT FIVE
181                     // U+0ED6: "໖" LAO DIGIT SIX
182                     // U+0ED7: "໗" LAO DIGIT SEVEN
183                     // U+0ED8: "໘" LAO DIGIT EIGHT
184                     // U+0ED9: "໙" LAO DIGIT NINE
185                     // U+0ECD/U+0EC8: "ໍ່" LAO NIGGAHITA/LAO TONE MAI EK
186                     "\u0ED1", "\u0ED2", "\u0ED3", "\u0ED4", "\u0ECC", "\u0EBC", "\u0ED5", "\u0ED6",
187                     "\u0ED7", "\u0ED8", "\u0ED9", "\u0ECD\u0EC8")
188             .setKeysOfRow(2,
189                     // U+0EBB/U+0EC9: "" LAO VOWEL SIGN MAI KON/LAO TONE MAI THO
190                     // U+0ED0: "໐" LAO DIGIT ZERO
191                     // U+0EB3/U+0EC9: "ຳ້" LAO VOWEL SIGN AM/LAO TONE MAI THO
192                     // U+0EB4/U+0EC9: "ິ້" LAO VOWEL SIGN I/LAO TONE MAI THO
193                     // U+0EB5/U+0EC9: "ີ້" LAO VOWEL SIGN II/LAO TONE MAI THO
194                     // U+0EA3: "ຣ" LAO LETTER LO LING
195                     // U+0EDC: "ໜ" LAO HO NO
196                     // U+0EBD: "ຽ" LAO SEMIVOWEL SIGN NYO
197                     // U+0EAB/U+0EBC: "" LAO LETTER HO SUNG/LAO SEMIVOWEL SIGN LO
198                     // U+201D: "”" RIGHT DOUBLE QUOTATION MARK
199                     "\u0EBB\u0EC9", "\u0ED0", "\u0EB3\u0EC9", "_", "+", "\u0EB4\u0EC9",
200                     "\u0EB5\u0EC9", "\u0EA3", "\u0EDC", "\u0EBD", "\u0EAB\u0EBC", "\u201D")
201             .setKeysOfRow(3,
202                     // U+0EB1/U+0EC9: "ັ້" LAO VOWEL SIGN MAI KAN/LAO TONE MAI THO
203                     // U+0ECA: "໊" LAO TONE MAI TI
204                     // U+0ECB: "໋" LAO TONE MAI CATAWA
205                     // U+201C: "“" LEFT DOUBLE QUOTATION MARK
206                     "\u0EB1\u0EC9", ";", ".", ",", ":", "\u0ECA", "\u0ECB", "!", "?", "%", "=",
207                     "\u201C")
208             .setKeysOfRow(4,
209                     // U+20AD: "₭" KIP SIGN
210                     // U+0EAF: "ຯ" LAO ELLIPSIS
211                     // U+0EB6/U+0EC9: "ຶ້" LAO VOWEL SIGN Y/LAO TONE MAI THO
212                     // U+0EB7/U+0EC9: "ື້" LAO VOWEL SIGN YY/LAO TONE MAI THO
213                     // U+0EC6: "ໆ" LAO KO LA
214                     // U+0EDD: "ໝ" LAO HO MO
215                     "\u20AD", "(", "\u0EAF", "@", "\u0EB6\u0EC9", "\u0EB7\u0EC9", "\u0EC6",
216                     "\u0EDD", "$", ")")
217             .build();
218 }
219