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
10package com.ibm.icu.dev.tool.ime.indic;
11
12import java.util.Locale;
13
14public 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