Myanmar.java revision b657c053c4fa8d51a2f1eeb8945ca51939edce6d
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 Myanmar alphabet keyboard.
28 */
29public final class Myanmar extends LayoutBase {
30    private static final String LAYOUT_NAME = "myanmar";
31
32    public Myanmar(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 MyanmarCustomizer extends LayoutCustomizer {
40        public MyanmarCustomizer(final Locale locale) { super(locale); }
41
42        @Override
43        public ExpectedKey getAlphabetKey() { return MYANMAR_ALPHABET_KEY; }
44
45        @Override
46        public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
47            return isPhone ? EMPTY_KEYS : EXCLAMATION_AND_QUESTION_MARKS;
48        }
49
50        @Override
51        public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
52            // U+002C: "," COMMA
53            // U+104A: "၊" MYANMAR SIGN LITTLE SECTION
54            return isPhone ? joinKeys(key("\u002C", SETTINGS_KEY))
55                    : joinKeys(key("\u104A", moreKey(","), SETTINGS_KEY), "_");
56        }
57
58        @Override
59        public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
60            // U+104B: "။" MYANMAR SIGN SECTION
61            final ExpectedKey periodKey = key("\u104B", getPunctuationMoreKeys(isPhone));
62            return isPhone ? joinKeys(periodKey) : joinKeys("/", periodKey);
63        }
64
65        @Override
66        public ExpectedKey[] getPunctuationMoreKeys(final boolean isPhone) {
67            return isPhone ? MYANMAR_PHONE_PUNCTUATION_MORE_KEYS
68                    : MYANMAR_TABLET_PUNCTUATION_MORE_KEYS;
69        }
70
71        // U+1000: "က" MYANMAR LETTER KA
72        // U+1001: "ခ" MYANMAR LETTER KHA
73        // U+1002: "ဂ" MYANMAR LETTER GA
74        private static final ExpectedKey MYANMAR_ALPHABET_KEY = key(
75                "\u1000\u1001\u1002", Constants.CODE_SWITCH_ALPHA_SYMBOL);
76
77        // U+104A: "၊" MYANMAR SIGN LITTLE SECTION
78        // Punctuation more keys for phone form factor.
79        private static final ExpectedKey[] MYANMAR_PHONE_PUNCTUATION_MORE_KEYS = joinKeys(
80                "\u104A", ".", "?", "!", "#", ")", "(", "/", ";",
81                "...", "'", "@", ":", "-", "\"", "+", "%", "&");
82        // Punctuation more keys for tablet form factor.
83        private static final ExpectedKey[] MYANMAR_TABLET_PUNCTUATION_MORE_KEYS = joinKeys(
84                ".", "'", "#", ")", "(", "/", ";", "@",
85                "...", ":", "-", "\"", "+", "%", "&");
86    }
87
88    @Override
89    ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) { return ALPHABET_COMMON; }
90
91    @Override
92    public ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone,
93            final int elementId) {
94        if (elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
95            return getCommonAlphabetLayout(isPhone);
96        }
97        return ALPHABET_SHIFTED_COMMON;
98    }
99
100    // Helper method to create alphabet layout by adding special function keys.
101    @Override
102    ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder,
103            final boolean isPhone) {
104        final LayoutCustomizer customizer = getCustomizer();
105        builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone));
106        builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone));
107        builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone));
108        if (isPhone) {
109            builder.addKeysOnTheRightOfRow(4, DELETE_KEY)
110                    .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey())
111                    .addKeysOnTheRightOfRow(5, key(ENTER_KEY, EMOJI_KEY));
112        } else {
113            builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
114                    .addKeysOnTheRightOfRow(3, ENTER_KEY)
115                    .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey())
116                    .addKeysOnTheRightOfRow(5, EMOJI_KEY);
117        }
118        builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone))
119                .addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone));
120        return builder;
121    }
122
123    private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
124            .setKeysOfRow(1,
125                    // U+1041: "၁" MYANMAR DIGIT ONE
126                    key("\u1041", moreKey("1")),
127                    // U+1042: "၂" MYANMAR DIGIT TWO
128                    key("\u1042", moreKey("2")),
129                    // U+1043: "၃" MYANMAR DIGIT THREE
130                    key("\u1043", moreKey("3")),
131                    // U+1044: "၄" MYANMAR DIGIT FOUR
132                    key("\u1044", moreKey("4")),
133                    // U+1045: "၅" MYANMAR DIGIT FIVE
134                    key("\u1045", moreKey("5")),
135                    // U+1046: "၆" MYANMAR DIGIT SIX
136                    key("\u1046", moreKey("6")),
137                    // U+1047: "၇" MYANMAR DIGIT SEVEN
138                    key("\u1047", moreKey("7")),
139                    // U+1048: "၈" MYANMAR DIGIT EIGHT
140                    key("\u1048", moreKey("8")),
141                    // U+1049: "၉" MYANMAR DIGIT NINE
142                    key("\u1049", moreKey("9")),
143                    // U+1040: "၀" MYANMAR DIGIT ZERO
144                    key("\u1040", moreKey("0")))
145            .setKeysOfRow(2,
146                    // U+1006: "ဆ" MYANMAR LETTER CHA
147                    // U+1039/U+1006: "္ဆ" MYANMAR SIGN VIRAMA/MYANMAR LETTER CHA
148                    key("\u1006", moreKey("\u1039\u1006")),
149                    // U+1010: "တ" MYANMAR LETTER TA
150                    // U+1039/U+1010: "္တ" MYANMAR SIGN VIRAMA/MYANMAR LETTER TA
151                    key("\u1010", moreKey("\u1039\u1010")),
152                    // U+1014: "န" MYANMAR LETTER NA
153                    // U+1039/U+1014: "္န" MYANMAR SIGN VIRAMA/MYANMAR LETTER NA
154                    key("\u1014", moreKey("\u1039\u1014")),
155                    // U+1019: "မ" MYANMAR LETTER MA
156                    // U+1039/U+1019: "္မ" MYANMAR SIGN VIRAMA/MYANMAR LETTER MA
157                    key("\u1019", moreKey("\u1039\u1019")),
158                    // U+1021: "အ" MYANMAR LETTER A
159                    // U+1015: "ပ" MYANMAR LETTER PA
160                    "\u1021", "\u1015",
161                    // U+1000: "က" MYANMAR LETTER KA
162                    // U+1039/U+1000: "္က" MYANMAR SIGN VIRAMA/MYANMAR LETTER KA
163                    key("\u1000", moreKey("\u1039\u1000")),
164                    // U+1004: "င" MYANMAR LETTER NGA
165                    // U+101E: "သ" MYANMAR LETTER SA
166                    "\u1004", "\u101E",
167                    // U+1005: "စ" MYANMAR LETTER CA
168                    // U+1039/U+1005: "္စ" MYANMAR SIGN VIRAMA/MYANMAR LETTER CA
169                    key("\u1005", moreKey("\u1039\u1005")))
170            .setKeysOfRow(3,
171                    // U+1031: "ေ" MYANMAR VOWEL SIGN E
172                    // U+103B: "ျ" MYANMAR CONSONANT SIGN MEDIAL YA
173                    // U+103C: "ြ" MYANMAR CONSONANT SIGN MEDIAL RA
174                    "\u1031", "\u103B", "\u103C",
175                    // U+103D: "ွ" MYANMAR CONSONANT SIGN MEDIAL WA
176                    // U+103E: "ှ" MYANMAR CONSONANT SIGN MEDIAL HA
177                    // U+103D/U+103E:
178                    //     "ွှ" MYANMAR CONSONANT SIGN MEDIAL WA/MYANMAR CONSONANT SIGN MEDIAL HA
179                    key("\u103D", joinMoreKeys("\u103E", "\u103D\u103E")),
180                    // U+102D: "ိ" MYANMAR VOWEL SIGN I
181                    // U+102E: "ီ" MYANMAR VOWEL SIGN II
182                    key("\u102D", moreKey("\u102E")),
183                    // U+102F: "ု" MYANMAR VOWEL SIGN U
184                    // U+1030: "ူ" MYANMAR VOWEL SIGN UU
185                    key("\u102F", moreKey("\u1030")),
186                    // U+102C: "ာ" MYANMAR VOWEL SIGN AA
187                    // U+102B: "ါ" MYANMAR VOWEL SIGN TALL AA
188                    key("\u102C", moreKey("\u102B")),
189                    // U+103A: "်" MYANMAR SIGN ASAT
190                    // U+1032: "ဲ" MYANMAR VOWEL SIGN AI
191                    key("\u103A", moreKey("\u1032")),
192                    // U+1037: "့" MYANMAR SIGN DOT BELOW
193                    // U+1036: "ံ" MYANMAR SIGN ANUSVARA
194                    key("\u1037", moreKey("\u1036")),
195                    // U+1038: "း" MYANMAR SIGN VISARGA
196                    "\u1038")
197            .setKeysOfRow(4,
198                    // U+1016: "ဖ" MYANMAR LETTER PHA
199                    "\u1016",
200                    // U+1011: "ထ" MYANMAR LETTER THA
201                    // U+1039/U+1011: "္ထ" MYANMAR SIGN VIRAMA/MYANMAR LETTER THA
202                    key("\u1011", moreKey("\u1039\u1011")),
203                    // U+1001: "ခ" MYANMAR LETTER KHA
204                    // U+1039/U+1001: "္ခ" MYANMAR SIGN VIRAMA/MYANMAR LETTER KHA
205                    key("\u1001", moreKey("\u1039\u1001")),
206                    // U+101C: "လ" MYANMAR LETTER LA
207                    // U+1039/U+101C: "္လ" MYANMAR SIGN VIRAMA/MYANMAR LETTER LA
208                    key("\u101C", moreKey("\u1039\u101C")),
209                    // U+1018: "ဘ" MYANMAR LETTER BHA
210                    // U+1039/U+1018: "္ဘ" MYANMAR SIGN VIRAMA/MYANMAR LETTER BHA
211                    key("\u1018", moreKey("\u1039\u1018")),
212                    // U+100A: "ည" MYANMAR LETTER NNYA
213                    // U+1009: "ဉ" MYANMAR LETTER NYA
214                    key("\u100A", moreKey("\u1009")),
215                    // U+101B: "ရ" MYANMAR LETTER RA
216                    // U+101D: "ဝ" MYANMAR LETTER WA
217                    "\u101B", "\u101D")
218            .build();
219
220    private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
221            .setKeysOfRow(1,
222                    // U+1027: "ဧ" MYANMAR LETTER E
223                    // U+104F: "၏" MYANMAR SYMBOL GENITIVE
224                    // U+1024: "ဤ" MYANMAR LETTER II
225                    // U+1023: "ဣ" MYANMAR LETTER I
226                    // U+104E: "၎" MYANMAR SYMBOL AFOREMENTIONED
227                    // U+1000/U+103B/U+1015/U+103A: "ကျပ်" MYANMAR LETTER KA
228                    //     /MYANMAR CONSONANT SIGN MEDIAL YA/MYANMAR LETTER PA/MYANMAR SIGN ASAT
229                    // U+1029: "ဩ" MYANMAR LETTER O
230                    // U+102A: "ဪ" MYANMAR LETTER AU
231                    // U+104D: "၍" MYANMAR SYMBOL COMPLETED
232                    // U+104C: "၌" MYANMAR SYMBOL LOCATIVE
233                    "\u1027", "\u104F", "\u1024", "\u1023", "\u104E", "\u1000\u103B\u1015\u103A",
234                    "\u1029", "\u102A", "\u104D", "\u104C")
235            .setKeysOfRow(2,
236                    // U+1017: "ဗ" MYANMAR LETTER BA
237                    // U+1039/U+1017: "္ဗ" MYANMAR SIGN VIRAMA/MYANMAR LETTER BA
238                    key("\u1017", moreKey("\u1039\u1017")),
239                    // U+1012: "ဒ" MYANMAR LETTER DA
240                    // U+1039/U+1012: "္ဒ" MYANMAR SIGN VIRAMA/MYANMAR LETTER DA
241                    key("\u1012", moreKey("\u1039\u1012")),
242                    // U+1013: "ဓ" MYANMAR LETTER DHA
243                    // U+1039/U+1013: "္ဓ" MYANMAR SIGN VIRAMA/MYANMAR LETTER DHA
244                    key("\u1013", moreKey("\u1039\u1013")),
245                    // U+1003: "ဃ" MYANMAR LETTER GHA
246                    // U+100E: "ဎ" MYANMAR LETTER DDHA
247                    // U+103F: "ဿ" MYANMAR LETTER GREAT SA
248                    // U+100F: "ဏ" MYANMAR LETTER NNA
249                    "\u1003", "\u100E", "\u103F", "\u100F",
250                    // U+1008: "ဈ" MYANMAR LETTER JHA
251                    // U+1039/U+1008: "္ဈ" MYANMAR SIGN VIRAMA/MYANMAR LETTER JHA
252                    key("\u1008", moreKey("\u1039\u1008")),
253                    // U+1007: "ဇ" MYANMAR LETTER JA
254                    // U+1039/U+1007: "္ဇ" MYANMAR SIGN VIRAMA/MYANMAR LETTER JA
255                    key("\u1007", moreKey("\u1039\u1007")),
256                    // U+1002: "ဂ" MYANMAR LETTER GA
257                    // U+1039/U+1002: "္ဂ" MYANMAR SIGN VIRAMA/MYANMAR LETTER GA
258                    key("\u1002", moreKey("\u1039\u1002")))
259            .setKeysOfRow(3,
260                    // U+101A: "ယ" MYANMAR LETTER YA
261                    // U+1039: "္" MYANMAR SIGN VIRAMA
262                    // U+1004/U+103A/U+1039: "င်္င" MYANMAR LETTER NGA
263                    //     /MYANMAR SIGN ASAT/MYANMAR SIGN VIRAMA
264                    // U+103E: "ှ" MYANMAR CONSONANT SIGN MEDIAL HA
265                    // U+102E: "ီ" MYANMAR VOWEL SIGN II
266                    // U+1030: "ူ" MYANMAR VOWEL SIGN UU
267                    // U+102B: "ါ" MYANMAR VOWEL SIGN TALL AA
268                    // U+1032: "ဲ" MYANMAR VOWEL SIGN AI
269                    // U+1036: "ံ" MYANMAR SIGN ANUSVARA
270                    // U+101F: "ဟ" MYANMAR LETTER HA
271                    "\u101A", "\u1039", "\u1004\u103A\u1039", "\u103E", "\u102E", "\u1030",
272                    "\u102B", "\u1032", "\u1036", "\u101F")
273            .setKeysOfRow(4,
274                    // U+1025: "ဥ" MYANMAR LETTER U
275                    // U+1026: "ဦ" MYANMAR LETTER UU
276                    // U+100C: "ဌ" MYANMAR LETTER TTHA
277                    // U+100B: "ဋ" MYANMAR LETTER TTA
278                    // U+100D: "ဍ" MYANMAR LETTER DDA
279                    // U+1020: "ဠ" MYANMAR LETTER LLA
280                    // U+100B/U+1039/U+100C: "ဋ္ဌ" MYANMAR LETTER TTA
281                    //     /MYANMAR SIGN VIRAMA/MYANMAR LETTER TTHA
282                    "\u1025", "\u1026", "\u100C", "\u100B", "\u100D", "\u1020",
283                    "\u100B\u1039\u100C",
284                    // U+100F/U+1039/U+100D: "ဏ္ဍ" MYANMAR LETTER NNA
285                    //     /MYANMAR SIGN VIRAMA/MYANMAR LETTER DDA
286                    // U+100F/U+1039/U+100C: "ဏ္ဌ" MYANMAR LETTER NNA
287                    //     /MYANMAR SIGN VIRAMA/MYANMAR LETTER TTHA
288                    key("\u100F\u1039\u100D", moreKey("\u100F\u1039\u100C")))
289            .build();
290}
291