1 // 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html#License 3 /* 4 ******************************************************************************* 5 * Copyright (C) 2000-2004, International Business Machines Corporation and * 6 * others. All Rights Reserved. * 7 ******************************************************************************* 8 */ 9 10 package com.ibm.icu.dev.tool.ime.indic; 11 12 import java.util.Locale; 13 14 public class BengaliInputMethodDescriptor extends IndicIMDescriptor 15 { 16 private static final Locale BENGALI = new Locale("bn", "IN"); 17 18 public BengaliInputMethodDescriptor() { 19 super(BENGALI, "Bengali"); 20 } 21 22 private static char[] keyboardMap; 23 private static char[][] substitutionTable; 24 private static char[] joinWithNukta; 25 private static char[] nuktaForm; 26 27 protected IndicInputMethodImpl getImpl() { 28 if (keyboardMap == null) { 29 keyboardMap = new char[] { 30 /* 00 */ '\u0000', 31 /* 01 */ '\u0001', 32 /* 02 */ '\u0002', 33 /* 03 */ '\u0003', 34 /* 04 */ '\u0004', 35 /* 05 */ '\u0005', 36 /* 06 */ '\u0006', 37 /* 07 */ '\u0007', 38 /* 08 */ '\u0008', 39 /* 09 */ '\u0009', 40 /* 0A */ '\012', 41 /* 0B */ '\u000B', 42 /* 0C */ '\u000C', 43 /* 0D */ '\015', 44 /* 0E */ '\u000E', 45 /* 0F */ '\u000F', 46 /* 10 */ '\u0010', 47 /* 11 */ '\u0011', 48 /* 12 */ '\u0012', 49 /* 13 */ '\u0013', 50 /* 14 */ '\u0014', 51 /* 15 */ '\u0015', 52 /* 16 */ '\u0016', 53 /* 17 */ '\u0017', 54 /* 18 */ '\u0018', 55 /* 19 */ '\u0019', 56 /* 1A */ '\u001A', 57 /* 1B */ '\u001B', 58 /* 1C */ '\u001C', 59 /* 1D */ '\u001D', 60 /* 1E */ '\u001E', 61 /* 1F */ '\u001F', 62 /* 20 */ '\u0020', 63 /* 21 */ '\uFFFF', // '!' 64 /* 22 */ '\u09A0', // '"' 65 /* 23 */ '\uFF00', // '#' 66 /* 24 */ '\uFF01', // '$' 67 /* 25 */ '\uFF02', // '%' 68 /* 26 */ '\uFF04', // '&' 69 /* 27 */ '\u099F', // ''' 70 /* 28 */ '\u0028', // '(' 71 /* 29 */ '\u0029', // ')' 72 /* 2A */ '\uFF05', // '*' 73 /* 2B */ '\u098B', // '+' 74 /* 2C */ '\u002C', // ',' 75 /* 2D */ '\u002D', // '-' 76 /* 2E */ '\u002E', // '.' 77 /* 2F */ '\u09DF', // '/' 78 /* 30 */ '\u09E6', // '0' 79 /* 31 */ '\u09E7', // '1' 80 /* 32 */ '\u09E8', // '2' 81 /* 33 */ '\u09E9', // '3' 82 /* 34 */ '\u09EA', // '4' 83 /* 35 */ '\u09EB', // '5' 84 /* 36 */ '\u09EC', // '6' 85 /* 37 */ '\u09ED', // '7' 86 /* 38 */ '\u09EE', // '8' 87 /* 39 */ '\u09EF', // '9' 88 /* 3A */ '\u099B', // ':' 89 /* 3B */ '\u099A', // ';' 90 /* 3C */ '\u09B7', // '<' 91 /* 3D */ '\u09C3', // '=' 92 /* 3E */ '\u0964', // '>' (Devanagari danda) 93 /* 3F */ '\u09AF', // '?' 94 /* 40 */ '\uFFFF', // '@' 95 /* 41 */ '\u0993', // 'A' 96 /* 42 */ '\uFFFF', // 'B' 97 /* 43 */ '\u09A3', // 'C' 98 /* 44 */ '\u0985', // 'D' 99 /* 45 */ '\u0986', // 'E' 100 /* 46 */ '\u0987', // 'F' 101 /* 47 */ '\u0989', // 'G' 102 /* 48 */ '\u09AB', // 'H' 103 /* 49 */ '\u0998', // 'I' 104 /* 4A */ '\uFFFF', // 'J' 105 /* 4B */ '\u0996', // 'K' 106 /* 4C */ '\u09A5', // 'L' 107 /* 4D */ '\u09B6', // 'M' 108 /* 4E */ '\uFFFF', // 'N' 109 /* 4F */ '\u09A7', // 'O' 110 /* 50 */ '\u099D', // 'P' 111 /* 51 */ '\u0994', // 'Q' 112 /* 52 */ '\u0988', // 'R' 113 /* 53 */ '\u098F', // 'S' 114 /* 54 */ '\u098A', // 'T' 115 /* 55 */ '\u0999', // 'U' 116 /* 56 */ '\uFFFF', // 'V' 117 /* 57 */ '\u0990', // 'W' 118 /* 58 */ '\u0981', // 'X' 119 /* 59 */ '\u09AD', // 'Y' 120 /* 5A */ '\uFFFF', // 'Z' 121 /* 5B */ '\u09A1', // '[' 122 /* 5C */ '\uFFFF', // '\' 123 /* 5D */ '\u09BC', // ']' 124 /* 5E */ '\uFF03', // '^' 125 /* 5F */ '\u0983', // '_' 126 /* 60 */ '\uFFFF', // '`' 127 /* 61 */ '\u09CB', // 'a' 128 /* 62 */ '\u09AC', // 'b' (this is a BA instead of a VA) 129 /* 63 */ '\u09AE', // 'c' 130 /* 64 */ '\u09CD', // 'd' 131 /* 65 */ '\u09BE', // 'e' 132 /* 66 */ '\u09BF', // 'f' 133 /* 67 */ '\u09C1', // 'g' 134 /* 68 */ '\u09AA', // 'h' 135 /* 69 */ '\u0997', // 'i' 136 /* 6A */ '\u09B0', // 'j' 137 /* 6B */ '\u0995', // 'k' 138 /* 6C */ '\u09A4', // 'l' 139 /* 6D */ '\u09B8', // 'm' 140 /* 6E */ '\u09B2', // 'n' 141 /* 6F */ '\u09A6', // 'o' 142 /* 70 */ '\u099C', // 'p' 143 /* 71 */ '\u09CC', // 'q' 144 /* 72 */ '\u09C0', // 'r' 145 /* 73 */ '\u09C7', // 's' 146 /* 74 */ '\u09C2', // 't' 147 /* 75 */ '\u09B9', // 'u' 148 /* 76 */ '\u09A8', // 'v' 149 /* 77 */ '\u09C8', // 'w' 150 /* 78 */ '\u0982', // 'x' 151 /* 79 */ '\u09AC', // 'y' (this is also a BA...) 152 /* 7A */ '\uFFFF', // 'z' 153 /* 7B */ '\u09A2', // '{' 154 /* 7C */ '\uFFFF', // '|' 155 /* 7D */ '\u099E', // '}' 156 /* 7E */ '\uFFFF', // '~' 157 /* 7F */ '\u007F' // '' 158 }; 159 160 char[] RA_SUB = {'\u09CD', '\u09B0'}; 161 char[] RA_SUP = {'\u09B0', '\u09CD'}; 162 char[] CONJ_JA_NYA = {'\u099C', '\u09CD', '\u099E'}; 163 char[] CONJ_TA_RA = {'\u09A4', '\u09CD', '\u09B0'}; 164 char[] CONJ_KA_SSA = {'\u0995', '\u09CD', '\u09B7'}; 165 char[] CONJ_SHA_RA = {'\u09B6', '\u09CD', '\u09B0'}; 166 167 substitutionTable = new char[][] { 168 RA_SUB, RA_SUP, CONJ_JA_NYA, CONJ_TA_RA, CONJ_KA_SSA, CONJ_SHA_RA 169 }; 170 171 // The following characters followed by Nukta should be replaced 172 // by the corresponding character as defined in ISCII91 173 char LETTER_I = '\u0987'; 174 char LETTER_II = '\u0988'; 175 char LETTER_VOCALIC_R = '\u098B'; 176 char LETTER_DDA = '\u09A1'; 177 char LETTER_DDHA = '\u09A2'; 178 char VOWEL_SIGN_I = '\u09BF'; 179 char VOWEL_SIGN_II = '\u09C0'; 180 char VOWEL_SIGN_VOCALIC_R = '\u09C3'; 181 182 // The following characters replace the above characters followed by Nukta. These 183 // are defined in one to one correspondence order. 184 char LETTER_VOCALIC_L = '\u098C'; 185 char LETTER_VOCALIC_LL = '\u09E1'; 186 char LETTER_VOCALIC_RR = '\u09E0'; 187 char LETTER_DDDHA = '\u09DC'; 188 char LETTER_RHA = '\u09DD'; 189 char VOWEL_SIGN_VOCALIC_L = '\u09E2'; 190 char VOWEL_SIGN_VOCALIC_LL = '\u09E3'; 191 char VOWEL_SIGN_VOCALIC_RR = '\u09C4'; 192 193 joinWithNukta = new char[] { 194 LETTER_I, 195 LETTER_II, 196 LETTER_VOCALIC_R, 197 LETTER_DDA, 198 LETTER_DDHA, 199 VOWEL_SIGN_I, 200 VOWEL_SIGN_II, 201 VOWEL_SIGN_VOCALIC_R 202 }; 203 204 nuktaForm = new char[] { 205 LETTER_VOCALIC_L, 206 LETTER_VOCALIC_LL, 207 LETTER_VOCALIC_RR, 208 LETTER_DDDHA, 209 LETTER_RHA, 210 VOWEL_SIGN_VOCALIC_L, 211 VOWEL_SIGN_VOCALIC_LL, 212 VOWEL_SIGN_VOCALIC_RR 213 }; 214 } 215 216 return new IndicInputMethodImpl(keyboardMap, joinWithNukta, nuktaForm, substitutionTable); 217 } 218 } 219