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 GurmukhiInputMethodDescriptor extends IndicIMDescriptor
15{
16    private static final Locale GURMUKHI = new Locale("pa", "IN"); // pa = Punjabi
17
18    public GurmukhiInputMethodDescriptor() {
19    super(GURMUKHI, "Gurmukhi");
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 */ '\u0A0D',   // '!'
64        /* 22 */ '\u0A20',   // '"'
65        /* 23 */ '\uFF00',   // '#'
66        /* 24 */ '\uFFFF',   // '$'
67        /* 25 */ '\uFFFF',   // '%'
68        /* 26 */ '\uFFFF',   // '&'
69        /* 27 */ '\u0A1F',   // '''
70        /* 28 */ '\u0028',   // '('
71        /* 29 */ '\u0029',   // ')'
72        /* 2A */ '\uFFFF',   // '*'
73        /* 2B */ '\u0A0B',   // '+'
74        /* 2C */ '\u002C',   // ','
75        /* 2D */ '\u002D',   // '-'
76        /* 2E */ '\u002E',   // '.'
77        /* 2F */ '\u0A2F',   // '/'
78        /* 30 */ '\u0A66',   // '0'
79        /* 31 */ '\u0A67',   // '1'
80        /* 32 */ '\u0A68',   // '2'
81        /* 33 */ '\u0A69',   // '3'
82        /* 34 */ '\u0A6A',   // '4'
83        /* 35 */ '\u0A6B',   // '5'
84        /* 36 */ '\u0A6C',   // '6'
85        /* 37 */ '\u0A6D',   // '7'
86        /* 38 */ '\u0A6E',   // '8'
87        /* 39 */ '\u0A6F',   // '9'
88        /* 3A */ '\u0A1B',   // ':'
89        /* 3B */ '\u0A1A',   // ';'
90        /* 3C */ '\u0A37',   // '<'
91        /* 3D */ '\u0A43',   // '='
92        /* 3E */ '\u0964',   // '>'  (Devanagari danda)
93        /* 3F */ '\u0A5F',   // '?'
94        /* 40 */ '\u0A45',   // '@'
95        /* 41 */ '\u0A13',   // 'A'
96        /* 42 */ '\u0A34',   // 'B'
97        /* 43 */ '\u0A23',   // 'C'
98        /* 44 */ '\u0A05',   // 'D'
99        /* 45 */ '\u0A06',   // 'E'
100        /* 46 */ '\u0A07',   // 'F'
101        /* 47 */ '\u0A09',   // 'G'
102        /* 48 */ '\u0A2B',   // 'H'
103        /* 49 */ '\u0A18',   // 'I'
104        /* 4A */ '\u0A31',   // 'J'
105        /* 4B */ '\u0A16',   // 'K'
106        /* 4C */ '\u0A25',   // 'L'
107        /* 4D */ '\u0A36',   // 'M'
108        /* 4E */ '\u0A33',   // 'N'
109        /* 4F */ '\u0A27',   // 'O'
110        /* 50 */ '\u0A1D',   // 'P'
111        /* 51 */ '\u0A14',   // 'Q'
112        /* 52 */ '\u0A08',   // 'R'
113        /* 53 */ '\u0A0F',   // 'S'
114        /* 54 */ '\u0A0A',   // 'T'
115        /* 55 */ '\u0A19',   // 'U'
116        /* 56 */ '\u0A29',   // 'V'
117        /* 57 */ '\u0A10',   // 'W'
118        /* 58 */ '\u0A01',   // 'X'
119        /* 59 */ '\u0A2D',   // 'Y'
120        /* 5A */ '\u0A0E',   // 'Z'
121        /* 5B */ '\u0A21',   // '['
122        /* 5C */ '\u0A49',   // '\'
123        /* 5D */ '\u0A3C',   // ']'
124        /* 5E */ '\uFFFF',   // '^'
125        /* 5F */ '\u0A03',   // '_'
126        /* 60 */ '\u0A4A',   // '`'
127        /* 61 */ '\u0A4B',   // 'a'
128        /* 62 */ '\u0A35',   // 'b'
129        /* 63 */ '\u0A2E',   // 'c'
130        /* 64 */ '\u0A4D',   // 'd'
131        /* 65 */ '\u0A3E',   // 'e'
132        /* 66 */ '\u0A3F',   // 'f'
133        /* 67 */ '\u0A41',   // 'g'
134        /* 68 */ '\u0A2A',   // 'h'
135        /* 69 */ '\u0A17',   // 'i'
136        /* 6A */ '\u0A30',   // 'j'
137        /* 6B */ '\u0A15',   // 'k'
138        /* 6C */ '\u0A24',   // 'l'
139        /* 6D */ '\u0A38',   // 'm'
140        /* 6E */ '\u0A32',   // 'n'
141        /* 6F */ '\u0A26',   // 'o'
142        /* 70 */ '\u0A1C',   // 'p'
143        /* 71 */ '\u0A4C',   // 'q'
144        /* 72 */ '\u0A40',   // 'r'
145        /* 73 */ '\u0A47',   // 's'
146        /* 74 */ '\u0A42',   // 't'
147        /* 75 */ '\u0A39',   // 'u'
148        /* 76 */ '\u0A28',   // 'v'
149        /* 77 */ '\u0A48',   // 'w'
150        /* 78 */ '\u0A70',   // 'x' (Gurmukhi TIPPI rather than BINDI)
151        /* 79 */ '\u0A2C',   // 'y'
152        /* 7A */ '\u0A46',   // 'z'
153        /* 7B */ '\u0A22',   // '{'
154        /* 7C */ '\u0A11',   // '|'
155        /* 7D */ '\u0A1E',   // '}'
156        /* 7E */ '\u0A12',   // '~'
157        /* 7F */ '\u007F'    // ''
158        };
159
160        char[] RA_SUB = {'\u0A4D', '\u0A30'};
161
162        substitutionTable = new char[][] {
163        RA_SUB
164        };
165
166        // The following characters followed by Nukta should be replaced
167        // by the corresponding character as defined in ISCII91
168        char LETTER_KHA            = '\u0A16';
169        char LETTER_GA             = '\u0A17';
170        char LETTER_JA             = '\u0A1C';
171        char LETTER_DDA            = '\u0A21';
172        char LETTER_PHA            = '\u0A2B';
173
174        // The following characters replace the above characters followed by Nukta. These
175        // are defined in one to one correspondence order.
176        // NOTE: the inscript keyboard doc. lists a KA + NUKTA and a DDHA + NUKTA
177        // neither of which seem to have Unicode code points...
178        char LETTER_KHHA           = '\u0A59';
179        char LETTER_GHHA           = '\u0A5A';
180        char LETTER_ZA             = '\u0A5B';
181        char LETTER_RRA            = '\u0A5C';
182        char LETTER_FA             = '\u0A5E';
183
184        joinWithNukta = new char[] {
185        LETTER_KHA,
186        LETTER_GA,
187        LETTER_JA,
188        LETTER_DDA,
189        LETTER_PHA
190        };
191
192        nuktaForm = new char[] {
193        LETTER_KHHA,
194        LETTER_GHHA,
195        LETTER_ZA,
196        LETTER_RRA,
197        LETTER_FA
198        };
199    }
200
201        return new IndicInputMethodImpl(keyboardMap, joinWithNukta, nuktaForm, substitutionTable);
202    }
203}
204
205