Home | History | Annotate | Download | only in layout
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.inputmethod.keyboard.layout;
     18 
     19 import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.*;
     20 
     21 import com.android.inputmethod.keyboard.KeyboardId;
     22 import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
     23 import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
     24 import com.android.inputmethod.latin.Constants;
     25 
     26 import java.util.Locale;
     27 
     28 /**
     29  * The Hindi keyboard.
     30  */
     31 public final class Hindi extends LayoutBase {
     32     private static final String LAYOUT_NAME = "hindi";
     33 
     34     public Hindi(final LayoutCustomizer customizer) {
     35         super(customizer, HindiSymbols.class, SymbolsShifted.class);
     36     }
     37 
     38     @Override
     39     public String getName() { return LAYOUT_NAME; }
     40 
     41     public static class HindiCustomizer extends LayoutCustomizer {
     42         public HindiCustomizer(final Locale locale) { super(locale); }
     43 
     44         @Override
     45         public ExpectedKey getAlphabetKey() { return HINDI_ALPHABET_KEY; }
     46 
     47         @Override
     48         public ExpectedKey getSymbolsKey() { return HINDI_SYMBOLS_KEY; }
     49 
     50         @Override
     51         public ExpectedKey getBackToSymbolsKey() { return HINDI_BACK_TO_SYMBOLS_KEY; }
     52 
     53         @Override
     54         public ExpectedKey getCurrencyKey() { return CURRENCY_RUPEE; }
     55 
     56         @Override
     57         public ExpectedKey[] getOtherCurrencyKeys() {
     58             return SymbolsShifted.CURRENCIES_OTHER_GENERIC;
     59         }
     60 
     61         @Override
     62         public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
     63             return isPhone ? EMPTY_KEYS : EXCLAMATION_AND_QUESTION_MARKS;
     64         }
     65 
     66         // U+0915: "" DEVANAGARI LETTER KA
     67         // U+0916: "" DEVANAGARI LETTER KHA
     68         // U+0917: "" DEVANAGARI LETTER GA
     69         private static final ExpectedKey HINDI_ALPHABET_KEY = key(
     70                 "\u0915\u0916\u0917", Constants.CODE_SWITCH_ALPHA_SYMBOL);
     71         // U+0967: "" DEVANAGARI DIGIT ONE
     72         // U+0968: "" DEVANAGARI DIGIT TWO
     73         // U+0969: "" DEVANAGARI DIGIT THREE
     74         private static final String HINDI_SYMBOLS_LABEL = "?\u0967\u0968\u0969";
     75         private static final ExpectedKey HINDI_SYMBOLS_KEY = key(HINDI_SYMBOLS_LABEL,
     76                 Constants.CODE_SWITCH_ALPHA_SYMBOL);
     77         private static final ExpectedKey HINDI_BACK_TO_SYMBOLS_KEY = key(HINDI_SYMBOLS_LABEL,
     78                 Constants.CODE_SHIFT);
     79 
     80         // U+20B9: "" INDIAN RUPEE SIGN
     81         private static final ExpectedKey CURRENCY_RUPEE = key("\u20B9",
     82                 Symbols.CURRENCY_GENERIC_MORE_KEYS);
     83     }
     84 
     85     @Override
     86     ExpectedKey[][] getCommonAlphabetLayout(boolean isPhone) { return ALPHABET_COMMON; }
     87 
     88     @Override
     89     ExpectedKey[][] getCommonAlphabetShiftLayout(boolean isPhone, final int elementId) {
     90         if (elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
     91             return getCommonAlphabetLayout(isPhone);
     92         }
     93         return ALPHABET_SHIFTED_COMMON;
     94     }
     95 
     96     private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
     97             .setKeysOfRow(1,
     98                     // U+094C: "" DEVANAGARI VOWEL SIGN AU
     99                     // U+094C/U+0902: "" DEVANAGARI VOWEL SIGN AU/DEVANAGARI SIGN ANUSVARA
    100                     // U+0967: "" DEVANAGARI DIGIT ONE
    101                     key(VOWEL_SIGN_AU, "\u094C", joinMoreKeys(
    102                             moreKey(VOWEL_SIGN_AU + "\u0902", "\u094C\u0902"),
    103                             "\u0967", "1")),
    104                     // U+0948: "" DEVANAGARI VOWEL SIGN AI
    105                     // U+0948/U+0902: "" DEVANAGARI VOWEL SIGN AI/DEVANAGARI SIGN ANUSVARA
    106                     // U+0968: "" DEVANAGARI DIGIT TWO
    107                     key(VOWEL_SIGN_AI, "\u0948", joinMoreKeys(
    108                             moreKey(VOWEL_SIGN_AI + "\u0902", "\u0948\u0902"),
    109                             "\u0968", "2")),
    110                     // U+093E: "" DEVANAGARI VOWEL SIGN AA
    111                     // U+093E/U+0902: "" DEVANAGARI VOWEL SIGN AA/DEVANAGARI SIGN ANUSVARA
    112                     // U+093E/U+0901: "" DEVANAGARI VOWEL SIGN AA/DEVANAGARI SIGN CANDRABINDU
    113                     // U+0969: "" DEVANAGARI DIGIT THREE
    114                     key(VOWEL_SIGN_AA, "\u093E", joinMoreKeys(
    115                             moreKey(VOWEL_SIGN_AA + "\u0902", "\u093E\u0902"),
    116                             moreKey(VOWEL_SIGN_AA + "\u0901", "\u093E\u0901"),
    117                             "\u0969", "3")),
    118                     // U+0940: "" DEVANAGARI VOWEL SIGN II
    119                     // U+0940/U+0902: "" DEVANAGARI VOWEL SIGN II/DEVANAGARI SIGN ANUSVARA
    120                     // U+096A: "" DEVANAGARI DIGIT FOUR
    121                     key(VOWEL_SIGN_II, "\u0940", joinMoreKeys(
    122                             moreKey(VOWEL_SIGN_II + "\u0902", "\u0940\u0902"),
    123                             "\u096A", "4")),
    124                     // U+0942: "" DEVANAGARI VOWEL SIGN UU
    125                     // U+0942/U+0902: "" DEVANAGARI VOWEL SIGN UU/DEVANAGARI SIGN ANUSVARA
    126                     // U+0942/U+0901: "" DEVANAGARI VOWEL SIGN UU/DEVANAGARI SIGN CANDRABINDU
    127                     // U+096B: "" DEVANAGARI DIGIT FIVE
    128                     key(VOWEL_SIGN_UU, "\u0942", joinMoreKeys(
    129                             moreKey(VOWEL_SIGN_UU + "\u0902", "\u0942\u0902"),
    130                             moreKey(VOWEL_SIGN_UU + "\u0901", "\u0942\u0901"),
    131                             "\u096B", "5")),
    132                     // U+092C: "" DEVANAGARI LETTER BA
    133                     // U+092C/U+0952: "" DEVANAGARI LETTER BA/DEVANAGARI STRESS SIGN ANUDATTA
    134                     // U+096C: "" DEVANAGARI DIGIT SIX
    135                     key("\u092C", joinMoreKeys("\u092C\u0952", "\u096C", "6")),
    136                     // U+0939: "" DEVANAGARI LETTER HA
    137                     // U+096D: "" DEVANAGARI DIGIT SEVEN
    138                     key("\u0939", joinMoreKeys("\u096D", "7")),
    139                     // U+0917: "" DEVANAGARI LETTER GA
    140                     // U+091C/U+094D/U+091E:
    141                     //     "" DEVANAGARI LETTER JA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER NYA
    142                     // U+0917/U+093C: "" DEVANAGARI LETTER GA/DEVANAGARI SIGN NUKTA
    143                     // U+0917/U+0952: "" DEVANAGARI LETTER GA/DEVANAGARI STRESS SIGN ANUDATTA
    144                     // U+096E: "" DEVANAGARI DIGIT EIGHT
    145                     key("\u0917", joinMoreKeys("\u091C\u094D\u091E", "\u0917\u093C", "\u0917\u0952",
    146                             "\u096E", "8")),
    147                     // U+0926: "" DEVANAGARI LETTER DA
    148                     // U+096F: "" DEVANAGARI DIGIT NINE
    149                     key("\u0926", joinMoreKeys("\u096F", "9")),
    150                     // U+091C: "" DEVANAGARI LETTER JA
    151                     // U+091C/U+0952: "" DEVANAGARI LETTER JA/DEVANAGARI STRESS SIGN ANUDATTA
    152                     // U+091C/U+094D/U+091E:
    153                     //     "" DEVANAGARI LETTER JA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER NYA
    154                     // U+091C/U+093C: "" DEVANAGARI LETTER JA/DEVANAGARI SIGN NUKTA
    155                     // U+0966: "" DEVANAGARI DIGIT ZERO
    156                     key("\u091C", joinMoreKeys("\u091C\u0952", "\u091C\u094D\u091E", "\u091C\u093C",
    157                             "\u0966", "0")),
    158                     // U+0921: "" DEVANAGARI LETTER DDA
    159                     // U+0921/U+0952: "" DEVANAGARI LETTER DDA/DEVANAGARI STRESS SIGN ANUDATTA
    160                     // U+0921/U+093C: "" DEVANAGARI LETTER DDA/DEVANAGARI SIGN NUKTA
    161                     key("\u0921", joinMoreKeys("\u0921\u0952", "\u0921\u093C")))
    162             .setKeysOfRow(2,
    163                     // U+094B: "" DEVANAGARI VOWEL SIGN O
    164                     // U+094B/U+0902: "" DEVANAGARI VOWEL SIGN O/DEVANAGARI SIGN ANUSVARA
    165                     // U+0949: "" DEVANAGARI VOWEL SIGN CANDRA O
    166                     // U+094A: "" DEVANAGARI VOWEL SIGN SHORT O
    167                     key(VOWEL_SIGN_O, "\u094B", joinMoreKeys(
    168                             moreKey(VOWEL_SIGN_O + "\u0902", "\u094B\u0902"),
    169                             moreKey(VOWEL_SIGN_CANDRA_O, "\u0949"),
    170                             moreKey(VOWEL_SIGN_SHORT_O, "\u094A"))),
    171                     // U+0947: "" DEVANAGARI VOWEL SIGN E
    172                     // U+0947/U+0902: "" DEVANAGARI VOWEL SIGN E/DEVANAGARI SIGN ANUSVARA
    173                     key(VOWEL_SIGN_E, "\u0947",
    174                             moreKey(VOWEL_SIGN_E + "\u0902", "\u0947\u0902")),
    175                     // U+094D: "" DEVANAGARI SIGN VIRAMA
    176                     key(SIGN_VIRAMA, "\u094D"),
    177                     // U+093F: "" DEVANAGARI VOWEL SIGN I
    178                     // U+093F/U+0902: "" DEVANAGARI VOWEL SIGN I/DEVANAGARI SIGN ANUSVARA
    179                     key(VOWEL_SIGN_I, "\u093F",
    180                             moreKey("\u093F" + SIGN_ANUSVARA, "\u093F\u0902")),
    181                     // U+0941: "" DEVANAGARI VOWEL SIGN U
    182                     // U+0941/U+0902: "" DEVANAGARI VOWEL SIGN U/DEVANAGARI SIGN ANUSVARA
    183                     // U+0941/U+0901: "" DEVANAGARI VOWEL SIGN U/DEVANAGARI SIGN CANDRABINDU
    184                     key(VOWEL_SIGN_U, "\u0941", joinMoreKeys(
    185                             moreKey(VOWEL_SIGN_U + "\u0902", "\u0941\u0902"),
    186                             moreKey(VOWEL_SIGN_U + "\u0901", "\u0941\u0901"))),
    187                     // U+092A: "" DEVANAGARI LETTER PA
    188                     "\u092A",
    189                     // U+0930: "" DEVANAGARI LETTER RA
    190                     // U+090B: "" DEVANAGARI LETTER VOCALIC R
    191                     // U+0930/U+093C: "" DEVANAGARI LETTER RA/DEVANAGARI SIGN NUKTA
    192                     // U+0960: "" DEVANAGARI LETTER VOCALIC RR
    193                     key("\u0930", joinMoreKeys("\u090B", "\u0930\u093C", "\u0960")),
    194                     // U+0915: "" DEVANAGARI LETTER KA
    195                     // U+0915/U+093C: "" DEVANAGARI LETTER KA/DEVANAGARI SIGN NUKTA
    196                     key("\u0915", moreKey("\u0915\u093C")),
    197                     // U+0924: "" DEVANAGARI LETTER TA
    198                     // U+0924/U+094D/U+0930:
    199                     //     "" DEVANAGARI LETTER TA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA
    200                     key("\u0924", moreKey("\u0924\u094D\u0930")),
    201                     // U+091A: "" DEVANAGARI LETTER CA
    202                     // U+091F: "" DEVANAGARI LETTER TTA
    203                     "\u091A","\u091F")
    204             .setKeysOfRow(3,
    205                     // U+0949: "" DEVANAGARI VOWEL SIGN CANDRA O
    206                     key(VOWEL_SIGN_CANDRA_O, "\u0949"),
    207                     // U+0902: "" DEVANAGARI SIGN ANUSVARA
    208                     key(SIGN_ANUSVARA, "\u0902"),
    209                     // U+092E: "" DEVANAGARI LETTER MA
    210                     // U+0950: "" DEVANAGARI OM
    211                     key("\u092E", moreKey("\u0950")),
    212                     // U+0928: "" DEVANAGARI LETTER NA
    213                     // U+091E: "" DEVANAGARI LETTER NYA
    214                     // U+0919: "" DEVANAGARI LETTER NGA
    215                     // U+0928/U+093C: "" DEVANAGARI LETTER NA/DEVANAGARI SIGN NUKTA
    216                     key("\u0928", joinMoreKeys("\u091E", "\u0919", "\u0928\u093C")),
    217                     // U+0935: "" DEVANAGARI LETTER VA
    218                     "\u0935",
    219                     // U+0932: "" DEVANAGARI LETTER LA
    220                     // U+090C: "" DEVANAGARI LETTER VOCALIC L
    221                     // U+0961: "" DEVANAGARI LETTER VOCALIC LL
    222                     key("\u0932", joinMoreKeys("\u090C", "\u0961")),
    223                     // U+0938: "" DEVANAGARI LETTER SA
    224                     "\u0938",
    225                     // U+092F: "" DEVANAGARI LETTER YA
    226                     // U+095F: "" DEVANAGARI LETTER YYA
    227                     key("\u092F", moreKey("\u095F")),
    228                     // U+093C: "" DEVANAGARI SIGN NUKTA
    229                     // U+097D: "" DEVANAGARI LETTER GLOTTAL STOP
    230                     // U+0970: "" DEVANAGARI ABBREVIATION SIGN
    231                     // U+093D: "" DEVANAGARI SIGN AVAGRAHA
    232                     key(SIGN_NUKTA, "\u093C", joinMoreKeys(
    233                             moreKey(LETTER_GLOTTAL_STOP, "\u097D"),
    234                             moreKey(ABBREVIATION_SIGN, "\u0970"),
    235                             moreKey(SIGN_AVAGRAHA, "\u093D"))))
    236             .build();
    237 
    238     private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
    239             .setKeysOfRow(1,
    240                     // U+0914: "" DEVANAGARI LETTER AU
    241                     // U+0912/U+0902: "" DEVANAGARI LETTER SHORT O//DEVANAGARI SIGN ANUSVARA
    242                     key("\u0914", moreKey("\u0912\u0902")),
    243                     // U+0910: "" DEVANAGARI LETTER AI
    244                     // U+0910/U+0902: "" DEVANAGARI LETTER AI/DEVANAGARI SIGN ANUSVARA
    245                     key("\u0910", moreKey("\u0910\u0902")),
    246                     // U+0906: "" DEVANAGARI LETTER AA
    247                     // U+0906/U+0902: "" DEVANAGARI LETTER AA/DEVANAGARI SIGN ANUSVARA
    248                     // U+0906/U+0901: "" DEVANAGARI LETTER AA/DEVANAGARI SIGN CANDRABINDU
    249                     key("\u0906", joinMoreKeys("\u0906\u0902", "\u0906\u0901")),
    250                     // U+0908: "" DEVANAGARI LETTER II
    251                     // U+0908/U+0902: "" DEVANAGARI LETTER II/DEVANAGARI SIGN ANUSVARA
    252                     key("\u0908", moreKey("\u0908\u0902")),
    253                     // U+090A: "" DEVANAGARI LETTER UU
    254                     // U+090A/U+0902: "" DEVANAGARI LETTER UU/DEVANAGARI SIGN ANUSVARA
    255                     // U+090A/U+0901: "" DEVANAGARI LETTER UU/DEVANAGARI SIGN CANDRABINDU
    256                     key("\u090A", joinMoreKeys("\u090A\u0902", "\u090A\u0901")),
    257                     // U+092D: "" DEVANAGARI LETTER BHA
    258                     // U+0903: "" DEVANAGARI SIGN VISARGA
    259                     // U+0918: "" DEVANAGARI LETTER GHA
    260                     "\u092D", key(SIGN_VISARGA, "\u0903"), "\u0918",
    261                     // U+0927: "" DEVANAGARI LETTER DHA
    262                     // U+0915/U+094D/U+0937:
    263                     //     "" DEVANAGARI LETTER KA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER SSA
    264                     // U+0936/U+094D/U+0930:
    265                     //     "" DEVANAGARI LETTER SHA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA
    266                     key("\u0927", joinMoreKeys("\u0915\u094D\u0937", "\u0936\u094D\u0930")),
    267                     // U+091D: "" DEVANAGARI LETTER JHA
    268                     // U+0922: "" DEVANAGARI LETTER DDHA
    269                     "\u091D", "\u0922")
    270             .setKeysOfRow(2,
    271                     // U+0913: "" DEVANAGARI LETTER O
    272                     // U+0913/U+0902: "" DEVANAGARI LETTER O/DEVANAGARI SIGN ANUSVARA
    273                     // U+0911: "" DEVANAGARI LETTER CANDRA O
    274                     // U+0912: "" DEVANAGARI LETTER SHORT O
    275                     key("\u0913", joinMoreKeys("\u0913\u0902", "\u0911", "\u0912")),
    276                     // U+090F: "" DEVANAGARI LETTER E
    277                     // U+090F/U+0902: "" DEVANAGARI LETTER E/DEVANAGARI SIGN ANUSVARA
    278                     // U+090F/U+0901: "" DEVANAGARI LETTER E/DEVANAGARI SIGN CANDRABINDU
    279                     // U+090D: "" DEVANAGARI LETTER CANDRA E
    280                     // U+090E: "" DEVANAGARI LETTER SHORT E
    281                     key("\u090F", joinMoreKeys("\u090F\u0902", "\u090F\u0901", "\u090D", "\u090E")),
    282                     // U+0905: "" DEVANAGARI LETTER A
    283                     // U+0905/U+0902: "" DEVANAGARI LETTER A/DEVANAGARI SIGN ANUSVARA
    284                     // U+0905/U+0901: "" DEVANAGARI LETTER A/DEVANAGARI SIGN CANDRABINDU
    285                     key("\u0905", joinMoreKeys("\u0905\u0902", "\u0905\u0901")),
    286                     // U+0907: "" DEVANAGARI LETTER I
    287                     // U+0907/U+0902: "" DEVANAGARI LETTER I/DEVANAGARI SIGN ANUSVARA
    288                     // U+0907/U+0901: "" DEVANAGARI LETTER I/DEVANAGARI SIGN CANDRABINDU
    289                     key("\u0907", joinMoreKeys("\u0907\u0902", "\u0907\u0901")),
    290                     // U+0909: "" DEVANAGARI LETTER U
    291                     // U+0909/U+0902: "" DEVANAGARI LETTER U/DEVANAGARI SIGN ANUSVARA
    292                     // U+0909/U+0901: "" DEVANAGARI LETTER U/DEVANAGARI SIGN CANDRABINDU
    293                     key("\u0909", joinMoreKeys("\u0909\u0902", "\u0909\u0901")),
    294                     // U+092B: "" DEVANAGARI LETTER PHA
    295                     // U+092B/U+093C: "" DEVANAGARI LETTER PHA/DEVANAGARI SIGN NUKTA
    296                     key("\u092B", moreKey("\u092B\u093C")),
    297                     // U+0931: "" DEVANAGARI LETTER RRA
    298                     // U+094D/U+0930: "" DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA
    299                     // U+0930/U+094D: "" DEVANAGARI LETTER RA/DEVANAGARI SIGN VIRAMA
    300                     key("\u0931", joinMoreKeys("\u094D\u0930", "\u0930\u094D")),
    301                     // U+0916: "" DEVANAGARI LETTER KHA
    302                     // U+0916/U+093C: "" DEVANAGARI LETTER KHA/DEVANAGARI SIGN NUKTA
    303                     key("\u0916", moreKey("\u0916\u093C")),
    304                     // U+0925: "" DEVANAGARI LETTER THA
    305                     // U+091B: "" DEVANAGARI LETTER CHA
    306                     // U+0920: "" DEVANAGARI LETTER TTHA
    307                     "\u0925", "\u091B", "\u0920")
    308             .setKeysOfRow(3,
    309                     // U+0911: "" DEVANAGARI LETTER CANDRA O
    310                     "\u0911",
    311                     // U+0901: "" DEVANAGARI SIGN CANDRABINDU
    312                     // U+0945: "" DEVANAGARI VOWEL SIGN CANDRA E
    313                     key(SIGN_CANDRABINDU, "\u0901", moreKey(VOWEL_SIGN_CANDRA_E, "\u0945")),
    314                     // U+0923: "" DEVANAGARI LETTER NNA
    315                     // U+0929: "" DEVANAGARI LETTER NNNA
    316                     "\u0923", "\u0929",
    317                     // U+0933: "" DEVANAGARI LETTER LLA
    318                     // U+0934: "" DEVANAGARI LETTER LLLA
    319                     key("\u0933", moreKey("\u0934")),
    320                     // U+0936: "" DEVANAGARI LETTER SHA
    321                     // U+0937: "" DEVANAGARI LETTER SSA
    322                     "\u0936", "\u0937",
    323                     // U+0943: "" DEVANAGARI VOWEL SIGN VOCALIC R
    324                     // U+0944: "" DEVANAGARI VOWEL SIGN VOCALIC RR
    325                     key(VOWEL_SIGN_VOCALIC_R, "\u0943", moreKey(VOWEL_SIGN_VOCALIC_RR, "\u0944")),
    326                     // U+091E: "" DEVANAGARI LETTER NYA
    327                     "\u091E")
    328             .build();
    329 
    330     static class HindiSymbols extends Symbols {
    331         public HindiSymbols(final LayoutCustomizer customizer) {
    332             super(customizer);
    333         }
    334 
    335         @Override
    336         public ExpectedKey[][] getLayout(final boolean isPhone) {
    337             return new ExpectedKeyboardBuilder(super.getLayout(isPhone))
    338                     // U+0967: "" DEVANAGARI DIGIT ONE
    339                     // U+00B9: "" SUPERSCRIPT ONE
    340                     // U+00BD: "" VULGAR FRACTION ONE HALF
    341                     // U+2153: "" VULGAR FRACTION ONE THIRD
    342                     // U+00BC: "" VULGAR FRACTION ONE QUARTER
    343                     // U+215B: "" VULGAR FRACTION ONE EIGHTH
    344                     .replaceKeyOfLabel("1", key("\u0967",
    345                             joinMoreKeys("1", "\u00B9", "\u00BD", "\u2153", "\u00BC", "\u215B")))
    346                     // U+0968: "" DEVANAGARI DIGIT TWO
    347                     // U+00B2: "" SUPERSCRIPT TWO
    348                     // U+2154: "" VULGAR FRACTION TWO THIRDS
    349                     .replaceKeyOfLabel("2", key("\u0968", joinMoreKeys("2", "\u00B2", "\u2154")))
    350                     // U+0969: "" DEVANAGARI DIGIT THREE
    351                     // U+00B3: "" SUPERSCRIPT THREE
    352                     // U+00BE: "" VULGAR FRACTION THREE QUARTERS
    353                     // U+215C: "" VULGAR FRACTION THREE EIGHTHS
    354                     .replaceKeyOfLabel("3", key("\u0969",
    355                             joinMoreKeys("3", "\u00B3", "\u00BE","\u215C")))
    356                     // U+096A: "" DEVANAGARI DIGIT FOUR
    357                     // U+2074: "" SUPERSCRIPT FOUR
    358                     .replaceKeyOfLabel("4", key("\u096A", joinMoreKeys("4", "\u2074")))
    359                     // U+096B: "" DEVANAGARI DIGIT FIVE
    360                     // U+215D: "" VULGAR FRACTION FIVE EIGHTHS
    361                     .replaceKeyOfLabel("5", key("\u096B", joinMoreKeys("5", "\u215D")))
    362                     // U+096C: "" DEVANAGARI DIGIT SIX
    363                     .replaceKeyOfLabel("6", key("\u096C", moreKey("6")))
    364                     // U+096D: "" DEVANAGARI DIGIT SEVEN
    365                     // U+215E: "" VULGAR FRACTION SEVEN EIGHTHS
    366                     .replaceKeyOfLabel("7", key("\u096D", joinMoreKeys("7", "\u215E")))
    367                     // U+096E: "" DEVANAGARI DIGIT EIGHT
    368                     .replaceKeyOfLabel("8", key("\u096E", moreKey("8")))
    369                     // U+096F: "" DEVANAGARI DIGIT NINE
    370                     .replaceKeyOfLabel("9", key("\u096F", moreKey("9")))
    371                     // U+0966: "" DEVANAGARI DIGIT ZERO
    372                     // U+207F: "" SUPERSCRIPT LATIN SMALL LETTER N
    373                     // U+2205: "" EMPTY SET
    374                     .replaceKeyOfLabel("0", key("\u0966", joinMoreKeys("0", "\u207F", "\u2205")))
    375                     .build();
    376         }
    377     }
    378 }
    379