summaryrefslogtreecommitdiff
path: root/tests/src/com/android/inputmethod/keyboard/layout/Khmer.java
blob: 7e4f159aba8648d062f2ce3dc4466b56e3062eb5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.inputmethod.keyboard.layout;

import com.android.inputmethod.keyboard.KeyboardId;
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
import com.android.inputmethod.latin.Constants;

import java.util.Locale;

/**
 * The Khmer alphabet keyboard.
 */
public final class Khmer extends LayoutBase {
    private static final String LAYOUT_NAME = "khmer";

    public Khmer(final LayoutCustomizer customizer) {
        super(customizer, Symbols.class, SymbolsShifted.class);
    }

    @Override
    public String getName() { return LAYOUT_NAME; }

    public static class KhmerCustomizer extends LayoutCustomizer {
        public KhmerCustomizer(final Locale locale) { super(locale); }

        @Override
        public int getNumberOfRows() { return 5; }

        @Override
        public ExpectedKey getAlphabetKey() { return KHMER_ALPHABET_KEY; }

        @Override
        public ExpectedKey getCurrencyKey() { return CURRENCY_DOLLAR_WITH_RIEL; }

        @Override
        public ExpectedKey[] getRightShiftKeys(final boolean isPhone) { return EMPTY_KEYS; }

        // U+1780: "ក" KHMER LETTER KA
        // U+1781: "ខ" KHMER LETTER KHA
        // U+1782: "គ" KHMER LETTER KO
        private static final ExpectedKey KHMER_ALPHABET_KEY = key(
                "\u1780\u1781\u1782", Constants.CODE_SWITCH_ALPHA_SYMBOL);

        // U+17DB: "៛" KHMER CURRENCY SYMBOL RIEL
        private static final ExpectedKey CURRENCY_DOLLAR_WITH_RIEL = key(Symbols.DOLLAR_SIGN,
                moreKey("\u17DB"), Symbols.CENT_SIGN, Symbols.POUND_SIGN, Symbols.EURO_SIGN,
                Symbols.YEN_SIGN, Symbols.PESO_SIGN);
    }

    @Override
    ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) {
        if (isPhone) {
            return ALPHABET_COMMON;
        }
        final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
        builder.addKeysOnTheRightOfRow(4, (Object[])EXCLAMATION_AND_QUESTION_MARKS);
        return builder.build();
    }

    @Override
    public ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone,
            final int elementId) {
        if (elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
            return getCommonAlphabetLayout(isPhone);
        }
        return ALPHABET_SHIFTED_COMMON;
    }

    private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
            .setKeysOfRow(1,
                    // U+17E1: "១" KHMER DIGIT ONE
                    // U+17F1: "៱" KHMER SYMBOL LEK ATTAK MUOY
                    key("\u17E1", joinMoreKeys("1", "\u17F1")),
                    // U+17E2: "២" KHMER DIGIT TWO
                    // U+17F2: "៲" KHMER SYMBOL LEK ATTAK PII
                    key("\u17E2", joinMoreKeys("2", "\u17F2")),
                    // U+17E3: "៣" KHMER DIGIT THREE
                    // U+17F3: "៳" KHMER SYMBOL LEK ATTAK BEI
                    key("\u17E3", joinMoreKeys("3", "\u17F3")),
                    // U+17E4: "៤" KHMER DIGIT FOUR
                    // U+17F4: "៴" KHMER SYMBOL LEK ATTAK BUON
                    key("\u17E4", joinMoreKeys("4", "\u17F4")),
                    // U+17E5: "៥" KHMER DIGIT FIVE
                    // U+17F5: "៵" KHMER SYMBOL LEK ATTAK PRAM
                    key("\u17E5", joinMoreKeys("5", "\u17F5")),
                    // U+17E6: "៦" KHMER DIGIT SIX
                    // U+17F6: "៶" KHMER SYMBOL LEK ATTAK PRAM-MUOY
                    key("\u17E6", joinMoreKeys("6", "\u17F6")),
                    // U+17E7: "៧" KHMER DIGIT SEVEN
                    // U+17F7: "៷" KHMER SYMBOL LEK ATTAK PRAM-PII
                    key("\u17E7", joinMoreKeys("7", "\u17F7")),
                    // U+17E8: "៨" KHMER DIGIT EIGHT
                    // U+17F8: "៸" KHMER SYMBOL LEK ATTAK PRAM-BEI
                    key("\u17E8", joinMoreKeys("8", "\u17F8")),
                    // U+17E9: "៩" KHMER DIGIT NINE
                    // U+17F9: "៹" KHMER SYMBOL LEK ATTAK PRAM-BUON
                    key("\u17E9", joinMoreKeys("9", "\u17F9")),
                    // U+17E0: "០" KHMER DIGIT ZERO
                    // U+17F0: "៰" KHMER SYMBOL LEK ATTAK SON
                    key("\u17E0", joinMoreKeys("0", "\u17F0")),
                    // U+17A5: "ឥ" KHMER INDEPENDENT VOWEL QI
                    // U+17A6: "ឦ" KHMER INDEPENDENT VOWEL QII
                    key("\u17A5", moreKey("\u17A6")),
                    // U+17B2: "ឲ" KHMER INDEPENDENT VOWEL QOO TYPE TWO
                    // U+17B1: "ឱ" KHMER INDEPENDENT VOWEL QOO TYPE ONE
                    key("\u17B2", moreKey("\u17B1")))
            .setKeysOfRow(2,
                    // U+1786: "ឆ" KHMER LETTER CHA
                    // U+17B9: "ឹ" KHMER VOWEL SIGN Y
                    // U+17C1: "េ" KHMER VOWEL SIGN E
                    // U+179A: "រ" KHMER LETTER RO
                    // U+178F: "ត" KHMER LETTER TA
                    // U+1799: "យ" KHMER LETTER YO
                    // U+17BB: "ុ" KHMER VOWEL SIGN U
                    // U+17B7: "ិ" KHMER VOWEL SIGN I
                    // U+17C4: "ោ" KHMER VOWEL SIGN OO
                    // U+1795: "ផ" KHMER LETTER PHA
                    // U+17C0: "ៀ" KHMER VOWEL SIGN IE
                    "\u1786", "\u17B9", "\u17C1", "\u179A", "\u178F", "\u1799", "\u17BB", "\u17B7",
                    "\u17C4", "\u1795", "\u17C0",
                    // U+17AA: "ឪ" KHMER INDEPENDENT VOWEL QUUV
                    // U+17A7: "ឧ" KHMER INDEPENDENT VOWEL QU
                    // U+17B1: "ឱ" KHMER INDEPENDENT VOWEL QOO TYPE ONE
                    // U+17B3: "ឳ" KHMER INDEPENDENT VOWEL QAU
                    // U+17A9: "ឩ" KHMER INDEPENDENT VOWEL QUU
                    // U+17A8: "ឨ" KHMER INDEPENDENT VOWEL QUK
                    key("\u17AA", joinMoreKeys("\u17A7", "\u17B1", "\u17B3", "\u17A9", "\u17A8")))
            .setKeysOfRow(3,
                    // U+17B6: "ា" KHMER VOWEL SIGN AA
                    // U+179F: "ស" KHMER LETTER SA
                    // U+178A: "ដ" KHMER LETTER DA
                    // U+1790: "ថ" KHMER LETTER THA
                    // U+1784: "ង" KHMER LETTER NGO
                    // U+17A0: "ហ" KHMER LETTER HA
                    // U+17D2: "្" KHMER SIGN COENG
                    // U+1780: "ក" KHMER LETTER KA
                    // U+179B: "ល" KHMER LETTER LO
                    // U+17BE: "ើ" KHMER VOWEL SIGN OE
                    // U+17CB: "់" KHMER SIGN BANTOC
                    "\u17B6", "\u179F", "\u178A", "\u1790", "\u1784", "\u17A0", "\u17D2", "\u1780",
                    "\u179B", "\u17BE", "\u17CB",
                    // U+17AE: "ឮ" KHMER INDEPENDENT VOWEL LYY
                    // U+17AD: "ឭ" KHMER INDEPENDENT VOWEL LY
                    // U+17B0: "ឰ" KHMER INDEPENDENT VOWEL QAI
                    key("\u17AE", joinMoreKeys("\u17AD", "\u17B0")))
            .setKeysOfRow(4,
                    // U+178B: "ឋ" KHMER LETTER TTHA
                    // U+1781: "ខ" KHMER LETTER KHA
                    // U+1785: "ច" KHMER LETTER CA
                    // U+179C: "វ" KHMER LETTER VO
                    // U+1794: "ប" KHMER LETTER BA
                    // U+1793: "ន" KHMER LETTER NO
                    // U+1798: "ម" KHMER LETTER MO
                    // U+17BB/U+17C6: "ុំ" KHMER VOWEL SIGN U/KHMER SIGN NIKAHIT
                    // U+17D4: "។" KHMER SIGN KHAN
                    // U+17CA: "៊" KHMER SIGN TRIISAP
                    "\u178B", "\u1781", "\u1785", "\u179C", "\u1794", "\u1793", "\u1798",
                    "\u17BB\u17C6", "\u17D4", "\u17CA")
            .build();

    private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
            .setKeysOfRow(1,
                    key("!", ZWJ_KEY),
                    // U+17D7: "ៗ" KHMER SIGN LEK TOO
                    key("\u17D7", ZWNJ_KEY),
                    // U+17D1: "៑" KHMER SIGN VIRIAM
                    key("\"", moreKey("\u17D1")),
                    // U+17DB: "៛" KHMER CURRENCY SYMBOL RIEL
                    key("\u17DB", joinMoreKeys(Symbols.DOLLAR_SIGN, Symbols.EURO_SIGN)),
                    // U+17D6: "៖" KHMER SIGN CAMNUC PII KUUH
                    key("%", moreKey("\u17D6")),
                    // U+17CD: "៍" KHMER SIGN TOANDAKHIAT
                    // U+17D9: "៙" KHMER SIGN PHNAEK MUAN
                    key("\u17CD", moreKey("\u17D9")),
                    // U+17D0: "័" KHMER SIGN SAMYOK SANNYA
                    // U+17DA: "៚" KHMER SIGN KOOMUUT
                    key("\u17D0", moreKey("\u17DA")),
                    // U+17CF: "៏" KHMER SIGN AHSDA
                    key("\u17CF", moreKey("*")),
                    // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
                    key("(", joinMoreKeys("{", "\u00AB")),
                    // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
                    key(")", joinMoreKeys("}", "\u00BB")),
                    // U+17CC: "៌" KHMER SIGN ROBAT
                    // U+00D7: "×" MULTIPLICATION SIGN
                    key("\u17CC", moreKey("\u00D7")),
                    // U+17CE: "៎" KHMER SIGN KAKABAT
                    "\u17CE")
            .setKeysOfRow(2,
                    // U+1788: "ឈ" KHMER LETTER CHO
                    // U+17DC: "ៜ" KHMER SIGN AVAKRAHASANYA
                    key("\u1788", moreKey("\u17DC")),
                    // U+17BA: "ឺ" KHMER VOWEL SIGN YY
                    // U+17DD: "៝" KHMER SIGN ATTHACAN
                    key("\u17BA", moreKey("\u17DD")),
                    // U+17C2: "ែ" KHMER VOWEL SIGN AE
                    "\u17C2",
                    // U+17AC: "ឬ" KHMER INDEPENDENT VOWEL RYY
                    // U+17AB: "ឫ" KHMER INDEPENDENT VOWEL RY
                    key("\u17AC", moreKey("\u17AB")),
                    // U+1791: "ទ" KHMER LETTER TO
                    // U+17BD: "ួ" KHMER VOWEL SIGN UA
                    // U+17BC: "ូ" KHMER VOWEL SIGN UU
                    // U+17B8: "ី" KHMER VOWEL SIGN II
                    // U+17C5: "ៅ" KHMER VOWEL SIGN AU
                    // U+1797: "ភ" KHMER LETTER PHO
                    // U+17BF: "ឿ" KHMER VOWEL SIGN YA
                    // U+17B0: "ឰ" KHMER INDEPENDENT VOWEL QAI
                    "\u1791", "\u17BD", "\u17BC", "\u17B8", "\u17C5", "\u1797", "\u17BF", "\u17B0")
            .setKeysOfRow(3,
                    // U+17B6/U+17C6: "ាំ" KHMER VOWEL SIGN AA/KHMER SIGN NIKAHIT
                    // U+17C3: "ៃ" KHMER VOWEL SIGN AI
                    // U+178C: "ឌ" KHMER LETTER DO
                    // U+1792: "ធ" KHMER LETTER THO
                    // U+17A2: "អ" KHMER LETTER QAE
                    "\u17B6\u17C6", "\u17C3", "\u178C", "\u1792", "\u17A2",
                    // U+17C7: "ះ" KHMER SIGN REAHMUK
                    // U+17C8: "ៈ" KHMER SIGN YUUKALEAPINTU
                    key("\u17C7", moreKey("\u17C8")),
                    // U+1789: "ញ" KHMER LETTER NYO
                    "\u1789",
                    // U+1782: "គ" KHMER LETTER KO
                    // U+179D: "ឝ" KHMER LETTER SHA
                    key("\u1782", moreKey("\u179D")),
                    // U+17A1: "ឡ" KHMER LETTER LA
                    // U+17C4/U+17C7: "ោះ" KHMER VOWEL SIGN OO/KHMER SIGN REAHMUK
                    // U+17C9: "៉" KHMER SIGN MUUSIKATOAN
                    // U+17AF: "ឯ" KHMER INDEPENDENT VOWEL QE
                    "\u17A1", "\u17C4\u17C7", "\u17C9", "\u17AF")
            .setKeysOfRow(4,
                    // U+178D: "ឍ" KHMER LETTER TTHO
                    // U+1783: "ឃ" KHMER LETTER KHO
                    // U+1787: "ជ" KHMER LETTER CO
                    // U+17C1/U+17C7: "េះ" KHMER VOWEL SIGN E/KHMER SIGN REAHMUK
                    "\u178D", "\u1783", "\u1787", "\u17C1\u17C7",
                    // U+1796: "ព" KHMER LETTER PO
                    // U+179E: "ឞ" KHMER LETTER SSO
                    key("\u1796", moreKey("\u179E")),
                    // U+178E: "ណ" KHMER LETTER NNO
                    // U+17C6: "ំ" KHMER SIGN NIKAHIT
                    // U+17BB/U+17C7: "ុះ" KHMER VOWEL SIGN U/KHMER SIGN REAHMUK
                    // U+17D5: "៕" KHMER SIGN BARIYOOSAN
                    "\u178E", "\u17C6", "\u17BB\u17C7", "\u17D5", "?")
            .build();
}