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