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.layout.expected.ExpectedKey;
20 import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
21 import com.android.inputmethod.latin.Constants;
22 
23 import java.util.Locale;
24 
25 /**
26  * The Bengali keyboard.
27  */
28 public final class Bengali extends LayoutBase {
29     private static final String LAYOUT_NAME = "bengali";
30 
Bengali(final LayoutCustomizer customizer)31     public Bengali(final LayoutCustomizer customizer) {
32         super(customizer, Symbols.class, SymbolsShifted.class);
33     }
34 
35     @Override
getName()36     public String getName() { return LAYOUT_NAME; }
37 
38     public static class BengaliCustomizer extends LayoutCustomizer {
BengaliCustomizer(final Locale locale)39         public BengaliCustomizer(final Locale locale) { super(locale); }
40 
41         @Override
getAlphabetKey()42         public ExpectedKey getAlphabetKey() { return BENGALI_ALPHABET_KEY; }
43 
44         @Override
getOtherCurrencyKeys()45         public ExpectedKey[] getOtherCurrencyKeys() {
46             return SymbolsShifted.CURRENCIES_OTHER_GENERIC;
47         }
48 
49         @Override
getLeftShiftKeys(final boolean isPhone)50         public ExpectedKey[] getLeftShiftKeys(final boolean isPhone) { return EMPTY_KEYS; }
51 
52         @Override
getRightShiftKeys(final boolean isPhone)53         public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
54             return isPhone ? EMPTY_KEYS : EXCLAMATION_AND_QUESTION_MARKS;
55         }
56 
57         // U+0995: "क" BENGALI LETTER KA
58         // U+0996: "ख" BENGALI LETTER KHA
59         // U+0997: "ग" BENGALI LETTER GA
60         private static final ExpectedKey BENGALI_ALPHABET_KEY = key(
61                 "\u0995\u0996\u0997", Constants.CODE_SWITCH_ALPHA_SYMBOL);
62     }
63 
64     @Override
getCommonAlphabetLayout(boolean isPhone)65     ExpectedKey[][] getCommonAlphabetLayout(boolean isPhone) { return ALPHABET_COMMON; }
66 
67     @Override
getCommonAlphabetShiftLayout(boolean isPhone, final int elementId)68     ExpectedKey[][] getCommonAlphabetShiftLayout(boolean isPhone, final int elementId) {
69         return null;
70     }
71 
72     private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
73             .setKeysOfRow(1,
74                     // U+0994: "ঔ" BENGALI LETTER AU
75                     // U+09CC: "ৌ" BENGALI VOWEL SIGN AU
76                     // U+09E7: "১" BENGALI DIGIT ONE
77                     key("\u0994", joinMoreKeys("\u09CC", "\u09E7", "1")),
78                     // U+0990: "ঐ" BENGALI LETTER AI
79                     // U+09C8: "ৈ" BENGALI VOWEL SIGN AI
80                     // U+09E8: "২" BENGALI DIGIT TWO
81                     key("\u0990", joinMoreKeys("\u09C8", "\u09E8", "2")),
82                     // U+0986: "আ" BENGALI LETTER AA
83                     // U+09BE: "া" BENGALI VOWEL SIGN AA
84                     // U+09E9: "৩" BENGALI DIGIT THREE
85                     key("\u0986", joinMoreKeys("\u09BE", "\u09E9", "3")),
86                     // U+0988: "ঈ" BENGALI LETTER II
87                     // U+09C0: "ী" BENGALI VOWEL SIGN II
88                     // U+09EA: "৪" BENGALI DIGIT FOUR
89                     key("\u0988", joinMoreKeys("\u09C0", "\u09EA", "4")),
90                     // U+098A: "ঊ" BENGALI LETTER UU
91                     // U+09C2: "ূ" BENGALI VOWEL SIGN UU
92                     // U+09EB: "৫" BENGALI DIGIT FIVE
93                     key("\u098A", joinMoreKeys("\u09C2", "\u09EB", "5")),
94                     // U+09AC: "ব" BENGALI LETTER BA
95                     // U+09AD: "ভ" BENGALI LETTER BHA
96                     // U+09EC: "৬" BENGALI DIGIT SIX
97                     key("\u09AC", joinMoreKeys("\u09AD", "\u09EC", "6")),
98                     // U+09B9: "হ" BENGALI LETTER HA
99                     // U+09ED: "৭" BENGALI DIGIT SEVEN
100                     key("\u09B9", joinMoreKeys("\u09ED", "7")),
101                     // U+0997: "গ" BENGALI LETTER GA
102                     // U+0998: "ঘ" BENGALI LETTER GHA
103                     // U+09EE: "৮" BENGALI DIGIT EIGHT
104                     key("\u0997", joinMoreKeys("\u0998", "\u09EE", "8")),
105                     // U+09A6: "দ" BENGALI LETTER DA
106                     // U+09A7: "ধ" BENGALI LETTER DHA
107                     // U+09EF: "৯" BENGALI DIGIT NINE
108                     key("\u09A6", joinMoreKeys("\u09A7", "\u09EF", "9")),
109                     // U+099C: "জ" BENGALI LETTER JA
110                     // U+099D: "ঝ" BENGALI LETTER JHA
111                     // U+099C/U+09CD/U+099E:
112                     //     "জ্ঞ" BENGALI LETTER JA/BENGALI SIGN VIRAMA/BENGALI LETTER NYA
113                     // U+09E6: "০" BENGALI DIGIT ZERO
114                     key("\u099C", joinMoreKeys("\u099D", "\u099C\u09CD\u099E", "\u09E6", "0")),
115                     // U+09A1: "ড" BENGALI LETTER DDA
116                     // U+09A1/U+09BC: "ড়" BENGALI LETTER DDA/BENGALI SIGN NUKTA
117                     key("\u09A1", moreKey("\u09A1\u09BC")))
118             .setKeysOfRow(2,
119                     // U+0993: "ও" BENGALI LETTER O
120                     // U+09CB: "ো" BENGALI VOWEL SIGN O
121                     key("\u0993", moreKey("\u09CB")),
122                     // U+098F: "এ" BENGALI LETTER E
123                     // U+09C7: "ে" BENGALI VOWEL SIGN E
124                     key("\u098F", moreKey("\u09C7")),
125                     // U+0985: "অ" BENGALI LETTER A
126                     // U+09CD: "্" BENGALI SIGN VIRAMA
127                     key("\u0985", moreKey("\u09CD")),
128                     // U+0987: "ই" BENGALI LETTER I
129                     // U+09BF: "ি" BENGALI VOWEL SIGN I
130                     key("\u0987", moreKey("\u09BF")),
131                     // U+0989: "উ" BENGALI LETTER U
132                     // U+09C1: "ু" BENGALI VOWEL SIGN U
133                     key("\u0989", moreKey("\u09C1")),
134                     // U+09AA: "প" BENGALI LETTER PA
135                     // U+09AB: "ফ" BENGALI LETTER PHA
136                     key("\u09AA", moreKey("\u09AB")),
137                     // U+09B0: "র" BENGALI LETTER RA
138                     // U+09C3: "ৃ" BENGALI VOWEL SIGN VOCALIC R
139                     // U+098B: "ঋ" BENGALI LETTER VOCALIC R
140                     // U+09A4/U+09CD/U+09B0:
141                     //     "ত্র" BENGALI LETTER TA/BENGALI SIGN VIRAMA/BENGALI LETTER RA
142                     key("\u09B0", joinMoreKeys("\u09C3", "\u098B", "\u09A4\u09CD\u09B0")),
143                     // U+0995: "ক" BENGALI LETTER KA
144                     // U+0996: "খ" BENGALI LETTER KHA
145                     key("\u0995", moreKey("\u0996")),
146                     // U+09A4: "ত" BENGALI LETTER TA
147                     // U+09CE: "ৎ" BENGALI LETTER KHANDA TA
148                     // U+09A5: "থ" BENGALI LETTER THA
149                     // U+09A4/U+09CD/U+09A4:
150                     //     "ত্ত" BENGALI LETTER TA/BENGALI SIGN VIRAMA/BENGALI LETTER TA
151                     key("\u09A4", joinMoreKeys("\u09CE", "\u09A5", "\u09A4\u09CD\u09A4")),
152                     // U+099A: "চ" BENGALI LETTER CA
153                     // U+099B: "ছ" BENGALI LETTER CHA
154                     key("\u099A", moreKey("\u099B")),
155                     // U+099F: "ট" BENGALI LETTER TTA
156                     // U+09A0: "ঠ" BENGALI LETTER TTHA
157                     key("\u099F", moreKey("\u09A0")))
158             .setKeysOfRow(3,
159                     // U+0981: "ঁ" BENGALI SIGN CANDRABINDU
160                     // U+0983: "ঃ" BENGALI SIGN VISARGA
161                     // U+0982: "ং" BENGALI SIGN ANUSVARA
162                     key("\u0981", joinMoreKeys("\u0983", "\u0982")),
163                     // U+09A2: "ঢ" BENGALI LETTER DDHA
164                     // U+09A2/U+09BC: "ঢ়" BENGALI LETTER DDHA/BENGALI SIGN NUKTA
165                     key("\u09A2", moreKey("\u09A2\u09BC")),
166                     // U+09AE: "ম" BENGALI LETTER MA
167                     "\u09AE",
168                     // U+09A8: "ন" BENGALI LETTER NA
169                     // U+09A3: "ণ" BENGALI LETTER NNA
170                     key("\u09A8", moreKey("\u09A3")),
171                     // U+099E: "ঞ" BENGALI LETTER NYA
172                     // U+0999: "ঙ" BENGALI LETTER NGA
173                     // U+099E/U+09CD/U+099C:
174                     //     "ঞ্জ" BENGALI LETTER NYA/BENGALI SIGN VIRAMA/BENGALI LETTER JA
175                     key("\u099E", joinMoreKeys("\u0999", "\u099E\u09CD\u099C")),
176                     // U+09B2: "ল" BENGALI LETTER LA
177                     "\u09B2",
178                     // U+09B7: "ষ" BENGALI LETTER SSA
179                     // U+0995/U+09CD/U+09B7:
180                     //     "ক্ষ" BENGALI LETTER KA/BENGALI SIGN VIRAMA/BENGALI LETTER SSA
181                     key("\u09B7", moreKey("\u0995\u09CD\u09B7")),
182                     // U+09B8: "স" BENGALI LETTER SA
183                     // U+09B6: "শ" BENGALI LETTER SHA
184                     key("\u09B8", moreKey("\u09B6")),
185                     // U+09DF: "য়" BENGALI LETTER YYA
186                     // U+09AF: "য" BENGALI LETTER YA
187                     key("\u09DF", moreKey("\u09AF")),
188                     // U+0964: "।" DEVANAGARI DANDA
189                     // U+0965: "॥" DEVANAGARI DOUBLE DANDA
190                     key("\u0964", moreKey("\u0965")))
191             .build();
192 }
193