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 DevanagariInputMethodDescriptor extends IndicIMDescriptor 15 { 16 private static final Locale DEVANAGARI = new Locale("hi", "IN"); 17 18 public DevanagariInputMethodDescriptor() { 19 super(DEVANAGARI, "Devanagari"); 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 */ '\u090D', // '!' 64 /* 22 */ '\u0920', // '"' 65 /* 23 */ '\uFF00', // '#' 66 /* 24 */ '\uFF01', // '$' 67 /* 25 */ '\uFF02', // '%' 68 /* 26 */ '\uFF04', // '&' 69 /* 27 */ '\u091F', // ''' 70 /* 28 */ '\u0028', // '(' 71 /* 29 */ '\u0029', // ')' 72 /* 2A */ '\uFF05', // '*' 73 /* 2B */ '\u090B', // '+' 74 /* 2C */ '\u002C', // ',' 75 /* 2D */ '\u002D', // '-' 76 /* 2E */ '\u002E', // '.' 77 /* 2F */ '\u092F', // '/' 78 /* 30 */ '\u0966', // '0' 79 /* 31 */ '\u0967', // '1' 80 /* 32 */ '\u0968', // '2' 81 /* 33 */ '\u0969', // '3' 82 /* 34 */ '\u096A', // '4' 83 /* 35 */ '\u096B', // '5' 84 /* 36 */ '\u096C', // '6' 85 /* 37 */ '\u096D', // '7' 86 /* 38 */ '\u096E', // '8' 87 /* 39 */ '\u096F', // '9' 88 /* 3A */ '\u091B', // ':' 89 /* 3B */ '\u091A', // ';' 90 /* 3C */ '\u0937', // '<' 91 /* 3D */ '\u0943', // '=' 92 /* 3E */ '\u0964', // '>' 93 /* 3F */ '\u095F', // '?' 94 /* 40 */ '\u0945', // '@' 95 /* 41 */ '\u0913', // 'A' 96 /* 42 */ '\u0934', // 'B' 97 /* 43 */ '\u0923', // 'C' 98 /* 44 */ '\u0905', // 'D' 99 /* 45 */ '\u0906', // 'E' 100 /* 46 */ '\u0907', // 'F' 101 /* 47 */ '\u0909', // 'G' 102 /* 48 */ '\u092B', // 'H' 103 /* 49 */ '\u0918', // 'I' 104 /* 4A */ '\u0931', // 'J' 105 /* 4B */ '\u0916', // 'K' 106 /* 4C */ '\u0925', // 'L' 107 /* 4D */ '\u0936', // 'M' 108 /* 4E */ '\u0933', // 'N' 109 /* 4F */ '\u0927', // 'O' 110 /* 50 */ '\u091D', // 'P' 111 /* 51 */ '\u0914', // 'Q' 112 /* 52 */ '\u0908', // 'R' 113 /* 53 */ '\u090F', // 'S' 114 /* 54 */ '\u090A', // 'T' 115 /* 55 */ '\u0919', // 'U' 116 /* 56 */ '\u0929', // 'V' 117 /* 57 */ '\u0910', // 'W' 118 /* 58 */ '\u0901', // 'X' 119 /* 59 */ '\u092D', // 'Y' 120 /* 5A */ '\u090E', // 'Z' 121 /* 5B */ '\u0921', // '[' 122 /* 5C */ '\u0949', // '\' 123 /* 5D */ '\u093C', // ']' 124 /* 5E */ '\uFF03', // '^' 125 /* 5F */ '\u0903', // '_' 126 /* 60 */ '\u094A', // '`' 127 /* 61 */ '\u094B', // 'a' 128 /* 62 */ '\u0935', // 'b' 129 /* 63 */ '\u092E', // 'c' 130 /* 64 */ '\u094D', // 'd' 131 /* 65 */ '\u093E', // 'e' 132 /* 66 */ '\u093F', // 'f' 133 /* 67 */ '\u0941', // 'g' 134 /* 68 */ '\u092A', // 'h' 135 /* 69 */ '\u0917', // 'i' 136 /* 6A */ '\u0930', // 'j' 137 /* 6B */ '\u0915', // 'k' 138 /* 6C */ '\u0924', // 'l' 139 /* 6D */ '\u0938', // 'm' 140 /* 6E */ '\u0932', // 'n' 141 /* 6F */ '\u0926', // 'o' 142 /* 70 */ '\u091C', // 'p' 143 /* 71 */ '\u094C', // 'q' 144 /* 72 */ '\u0940', // 'r' 145 /* 73 */ '\u0947', // 's' 146 /* 74 */ '\u0942', // 't' 147 /* 75 */ '\u0939', // 'u' 148 /* 76 */ '\u0928', // 'v' 149 /* 77 */ '\u0948', // 'w' 150 /* 78 */ '\u0902', // 'x' 151 /* 79 */ '\u092C', // 'y' 152 /* 7A */ '\u0946', // 'z' 153 /* 7B */ '\u0922', // '{' 154 /* 7C */ '\u0911', // '|' 155 /* 7D */ '\u091E', // '}' 156 /* 7E */ '\u0912', // '~' 157 /* 7F */ '\u007F' // '' 158 }; 159 160 // the character substitutions for the meta characters. 161 char[] RA_SUB = {'\u094D', '\u0930'}; 162 char[] RA_SUP = {'\u0930', '\u094D'}; 163 char[] CONJ_JA_NYA = {'\u091C', '\u094D', '\u091E'}; 164 char[] CONJ_TA_RA = {'\u0924', '\u094D', '\u0930'}; 165 char[] CONJ_KA_SSA = {'\u0915', '\u094D', '\u0937'}; 166 char[] CONJ_SHA_RA = {'\u0936', '\u094D', '\u0930'}; 167 168 substitutionTable = new char[][] { 169 RA_SUB, RA_SUP, CONJ_JA_NYA, CONJ_TA_RA, CONJ_KA_SSA, CONJ_SHA_RA 170 }; 171 172 // The following characters followed by Nukta should be replaced 173 // by the corresponding character as defined in ISCII91 174 char SIGN_CANDRABINDU = '\u0901'; 175 char LETTER_I = '\u0907'; 176 char LETTER_II = '\u0908'; 177 char LETTER_VOCALIC_R = '\u090B'; 178 char LETTER_KA = '\u0915'; 179 char LETTER_KHA = '\u0916'; 180 char LETTER_GA = '\u0917'; 181 char LETTER_JA = '\u091C'; 182 char LETTER_DDA = '\u0921'; 183 char LETTER_DDHA = '\u0922'; 184 char LETTER_PHA = '\u092B'; 185 char VOWEL_SIGN_I = '\u093F'; 186 char VOWEL_SIGN_II = '\u0940'; 187 char VOWEL_SIGN_VOCALIC_R = '\u0943'; 188 char DANDA = '\u0964'; 189 190 // The following characters replace the above characters followed by Nukta. These 191 // are defined in one to one correspondence order. 192 char SIGN_OM = '\u0950'; 193 char LETTER_VOCALIC_L = '\u090C'; 194 char LETTER_VOCALIC_LL = '\u0961'; 195 char LETTER_VOCALIC_RR = '\u0960'; 196 char LETTER_QA = '\u0958'; 197 char LETTER_KHHA = '\u0959'; 198 char LETTER_GHHA = '\u095A'; 199 char LETTER_ZA = '\u095B'; 200 char LETTER_DDDHA = '\u095C'; 201 char LETTER_RHA = '\u095D'; 202 char LETTER_FA = '\u095E'; 203 char VOWEL_SIGN_VOCALIC_L = '\u0962'; 204 char VOWEL_SIGN_VOCALIC_LL = '\u0963'; 205 char VOWEL_SIGN_VOCALIC_RR = '\u0944'; 206 char SIGN_AVAGRAHA = '\u093D'; 207 208 joinWithNukta = new char[] { 209 SIGN_CANDRABINDU, 210 LETTER_I, 211 LETTER_II, 212 LETTER_VOCALIC_R , 213 LETTER_KA, 214 LETTER_KHA, 215 LETTER_GA, 216 LETTER_JA, 217 LETTER_DDA, 218 LETTER_DDHA, 219 LETTER_PHA, 220 VOWEL_SIGN_I, 221 VOWEL_SIGN_II, 222 VOWEL_SIGN_VOCALIC_R, 223 DANDA 224 }; 225 226 nuktaForm = new char[] { 227 SIGN_OM, 228 LETTER_VOCALIC_L, 229 LETTER_VOCALIC_LL, 230 LETTER_VOCALIC_RR, 231 LETTER_QA, 232 LETTER_KHHA, 233 LETTER_GHHA, 234 LETTER_ZA, 235 LETTER_DDDHA, 236 LETTER_RHA, 237 LETTER_FA, 238 VOWEL_SIGN_VOCALIC_L, 239 VOWEL_SIGN_VOCALIC_LL, 240 VOWEL_SIGN_VOCALIC_RR, 241 SIGN_AVAGRAHA 242 }; 243 } 244 245 return new IndicInputMethodImpl(keyboardMap, joinWithNukta, nuktaForm, substitutionTable); 246 } 247 } 248 249