/**
*******************************************************************************
* Copyright (C) 2001, International Business Machines Corporation and         *
* others. All Rights Reserved.                                                *
*******************************************************************************
*/

package com.ibm.text;

import com.ibm.text.resources.LocaleScript;
import java.util.ResourceBundle;
import java.util.Locale;
import java.util.MissingResourceException;
import com.ibm.text.UCharacter;

/**
 * A class to reflect UTR #24: Script Names
 * (based on ISO 15924:2000, "Code for the representation of names of
 * scripts".)  UTR #24 describes the basis for a new Unicode data file,
 * Scripts.txt.
 */
public final class UScript {
    /**
     * Puts a copyright in the .class file
     */
    private static final String copyrightNotice
        = "Copyright \u00a92001 IBM Corp.  All rights reserved.";
        
    public static final int INVALID_CODE = -1;
    public static final int COMMON       =  0;  /* Zyyy */
    public static final int INHERITED    =  1;  /* Qaai */
    public static final int ARABIC       =  2;  /* Arab */
    public static final int ARMENIAN     =  3;  /* Armn */
    public static final int BENGALI      =  4;  /* Beng */
    public static final int BOPOMOFO     =  5;  /* Bopo */
    public static final int CHEROKEE     =  6;  /* Cher */
    public static final int COPTIC       =  7;  /* Qaac */
    public static final int CYRILLIC     =  8;  /* Cyrl (Cyrs) */
    public static final int DESERET      =  9;  /* Dsrt */
    public static final int DEVANAGARI   = 10;  /* Deva */
    public static final int ETHIOPIC     = 11;  /* Ethi */
    public static final int GEORGIAN     = 12;  /* Geor (Geon; Geoa) */
    public static final int GOTHIC       = 13;  /* Goth */
    public static final int GREEK        = 14;  /* Grek */
    public static final int GUJARATI     = 15;  /* Gujr */
    public static final int GURMUKHI     = 16;  /* Guru */
    public static final int HAN          = 17;  /* Hani */
    public static final int HANGUL       = 18;  /* Hang */
    public static final int HEBREW       = 19;  /* Hebr */
    public static final int HIRAGANA     = 20;  /* Hira */
    public static final int KANNADA      = 21;  /* Knda */
    public static final int KATAKANA     = 22;  /* Kana */
    public static final int KHMER        = 23;  /* Khmr */
    public static final int LAO          = 24;  /* Laoo */
    public static final int LATIN        = 25;  /* Latn (Latf; Latg) */
    public static final int MALAYALAM    = 26;  /* Mlym */
    public static final int MONGOLIAN    = 27;  /* Mong */
    public static final int MYANMAR      = 28;  /* Mymr */
    public static final int OGHAM        = 29;  /* Ogam */
    public static final int OLD_ITALIC   = 30;  /* Ital */
    public static final int ORIYA        = 31;  /* Orya */
    public static final int RUNIC        = 32;  /* Runr */
    public static final int SINHALA      = 33;  /* Sinh */
    public static final int SYRIAC       = 34;  /* Syrc (Syrj; Syrn; Syre) */
    public static final int TAMIL        = 35;  /* Taml */
    public static final int TELUGU       = 36;  /* Telu */
    public static final int THAANA       = 37;  /* Thaa */
    public static final int THAI         = 38;  /* Thai */
    public static final int TIBETAN      = 39;  /* Tibt */
    public static final int UCAS         = 40;  /* Cans */
    public static final int YI           = 41;  /* Yiii */
    public static final int CODE_LIMIT   = 42; 
    
    private static final String scriptNames[]={
        "ARABIC",               /* ARABIC     */
        "ARMENIAN",             /* ARMENIAN   */
        "BENGALI",              /* BENGALI    */
        "BOPOMOFO",             /* BOPOMOFO   */
        "CANADIAN-ABORIGINAL",  /* UCAS       */
        "CHEROKEE",             /* CHEROKEE   */
        "CYRILLIC",             /* CYRILLIC   */
        "DESERET",              /* DESERET    */
        "DEVANAGARI",           /* DEVANAGARI */
        "ETHIOPIC",             /* ETHIOPIC   */
        "GEORGIAN",             /* GEORGIAN   */
        "GOTHIC",               /* GOTHIC     */
        "GREEK",                /* GREEK      */
        "GUJARATI",             /* GUJARATI   */
        "GURMUKHI",             /* GURMUKHI   */
        "HAN",                  /* HAN        */
        "HANGUL",               /* HANGUL     */
        "HEBREW",               /* HEBREW     */
        "HIRAGANA",             /* HIRAGANA   */
        "INHERITED",            /* INHERITED  */
        "KANNADA",              /* KANNADA    */
        "KATAKANA",             /* KATAKANA   */
        "KHMER",                /* KHMER      */
        "LATIN",                /* LATIN      */
        "MALAYALAM",            /* MALAYALAM  */
        "MONGOLIAN",            /* MONGOLIAN  */
        "MYANMAR",              /* MYANMAR    */
        "OGHAM",                /* OGHAM      */
        "OLD-ITALIC",           /* OLD_ITALIC */
        "ORIYA",                /* ORIYA      */
        "RUNIC",                /* RUNIC      */
        "SINHALA",              /* SINHALA    */
        "SYRIAC",               /* SYRIAC     */
        "TAMIL",                /* TAMIL      */
        "TELUGU",               /* TELUGU     */
        "THAANA",               /* THANA      */
        "THAI",                 /* THAI       */
        "TIBETAN",              /* TIBETAN    */
        "UCAS",                 /* UCAS       */
        "YI",                   /* YI         */
        
    };

    private static final String scriptAbbr[]= {
        "Arab",       /* ARABIC     */
        "Armn",       /* ARMENIAN   */
        "Beng",       /* BENGALI    */
        "Bopo",       /* BOPOMOFO   */
        "Cans",       /* UCAS       */
        "Cher",       /* CHEROKEE   */
        "Cyrl",       /* CYRILLIC   */
       /* "Cyrs",  */ /* CYRILLIC   */
        "Deva",       /* DEVANAGARI */
        "Dsrt",       /* DESERET    */
        "Ethi",       /* ETHIOPIC   */
       /* "Geoa",  */ /* GEORGIAN   */
       /* "Geon",  */ /* GEORGIAN   */
        "Geor",       /* GEORGIAN   */
        "Goth",       /* GOTHIC     */
        "Grek",       /* GREEK      */
        "Gujr",       /* GUJARATI   */
        "Guru",       /* GURMUKHI   */
        "Hang",       /* HANGUL     */
        "Hani",       /* HAN        */
        "Hebr",       /* HEBREW     */
        "Hira",       /* HIRAGANA   */
        "Ital",       /* OLD_ITALIC */
        "Kana",       /* KATAKANA   */
        "Khmr",       /* KHMER      */
        "Knda",       /* KANNADA    */
        "Lao",        /* LAO        */
        /*"Laoo",  */ /* LAO        */
        /*"Latf",  */ /* LATIN      */
        /*"Latg",  */ /* LATIN      */
        "Latn",       /* LATIN      */
        "Mlym",       /* MALAYALAM  */
        "Mong",       /* MONGOLIAN  */
        "Mymr",       /* MYANMAR    */
        "Ogam",       /* OGHAM      */
        "Orya",       /* ORIYA      */
        "Qaac",       /* COPTIC     */
        "Qaai",       /* INHERITED  */
        "Runr",       /* RUNIC      */
        "Sinh",       /* SINHALA    */
        "Syrc",       /* SYRIAC     */
       /* "Syre",  */ /* SYRIAC     */
       /* "Syrj",  */ /* SYRIAC     */
       /* "Syrn",  */ /* SYRIAC     */
        "Taml",       /* TAMIL      */
        "Telu",       /* TELUGU     */
        "Thaa",       /* THANA      */
        "Thai",       /* THAI       */
        "Tibt",       /* TIBETAN    */
        "Yiii",       /* YI         */
        "Zyyy",       /* COMMON     */   
    };


    private static final int scriptNameCodes[]= {
         ARABIC     ,
         ARMENIAN   ,
         BENGALI    ,
         BOPOMOFO   ,
         UCAS       ,
         CHEROKEE   ,
         CYRILLIC   ,
         DESERET    ,
         DEVANAGARI ,
         ETHIOPIC   ,
         GEORGIAN   ,
         GOTHIC     ,
         GREEK      ,
         GUJARATI   ,
         GURMUKHI   ,
         HAN        ,
         HANGUL     ,
         HEBREW     ,
         HIRAGANA   ,
         INHERITED  ,
         KANNADA    ,
         KATAKANA   ,
         KHMER      ,
         LATIN      ,
         MALAYALAM  ,
         MONGOLIAN  ,
         MYANMAR    ,
         OGHAM      ,
         OLD_ITALIC ,
         ORIYA      ,
         RUNIC      ,
         SINHALA    ,
         SYRIAC     ,
         TAMIL      ,
         TELUGU     ,
         THAANA     ,
         THAI       ,
         TIBETAN    ,
         UCAS       ,
         YI
    };


    private static final int scriptAbbrCodes[] = {
        ARABIC     ,
        ARMENIAN   ,
        BENGALI    ,
        BOPOMOFO   ,
        UCAS       ,
        CHEROKEE   ,
        CYRILLIC   ,
       /* CYRILLIC   , */
        DEVANAGARI ,
        DESERET    ,
        ETHIOPIC   ,
      /*  GEORGIAN   , */
      /*  GEORGIAN   , */
        GEORGIAN   ,
        GOTHIC     ,
        GREEK      ,
        GUJARATI   ,
        GURMUKHI   ,
        HANGUL     ,
        HAN        ,
        HEBREW     ,
        HIRAGANA   ,
        OLD_ITALIC ,
        KATAKANA   ,
        KHMER      ,
        KANNADA    ,
        LAO        ,
      /*  LAO        , */
      /*  LATIN      , */
      /*  LATIN      , */
        LATIN      ,
        MALAYALAM  ,
        MONGOLIAN  ,
        MYANMAR    ,
        OGHAM      ,
        ORIYA      ,
        COPTIC     ,
        INHERITED  ,
        RUNIC      ,
        SINHALA    ,
      /*  SYRIAC     , */
      /*  SYRIAC     , */
      /*  SYRIAC     , */
        SYRIAC     ,
        TAMIL      ,
        TELUGU     ,
        THAANA     ,
        THAI       ,
        TIBETAN    ,
        YI         ,
        COMMON     , 
    };
    /**********************************************************
     *
     * WARNING: The below map is machine generated
     * by genscrpt after parsing Scripts.txt,
     * plese donot edit unless you know what you are doing
     *
     * TODO: Remove after merging script names to uprops.dat
     *
     **********************************************************
     */
    private static final class UScriptCodeMap {
        int  firstCodepoint;
        int  lastCodepoint;
        int  scriptCode;
        public UScriptCodeMap(int firstCp, int lastCp, int code){
            firstCodepoint = firstCp;
            lastCodepoint  = lastCp;
            scriptCode     = code ;
        }
    };
    
    private static final UScriptCodeMap[] scriptCodeIndex = {
         new UScriptCodeMap(0x00000000, 0x00000000, COMMON) ,
         new UScriptCodeMap(0x00000041, 0x0000005A, LATIN ) ,
         new UScriptCodeMap(0x00000061, 0x0000007A, LATIN ) ,
         new UScriptCodeMap(0x000000AA, 0x000000AA, LATIN ) ,
         new UScriptCodeMap(0x000000B5, 0x000000B5, GREEK ) ,
         new UScriptCodeMap(0x000000BA, 0x000000BA, LATIN ) ,
         new UScriptCodeMap(0x000000C0, 0x000000D6, LATIN ) ,
         new UScriptCodeMap(0x000000D8, 0x000000F6, LATIN ) ,
         new UScriptCodeMap(0x000000F8, 0x000001BA, LATIN ) ,
         new UScriptCodeMap(0x000001BB, 0x000001BB, LATIN ) ,
         new UScriptCodeMap(0x000001BC, 0x000001BF, LATIN ) ,
         new UScriptCodeMap(0x000001C0, 0x000001C3, LATIN ) ,
         new UScriptCodeMap(0x000001C4, 0x0000021F, LATIN ) ,
         new UScriptCodeMap(0x00000222, 0x00000233, LATIN ) ,
         new UScriptCodeMap(0x00000250, 0x000002AD, LATIN ) ,
         new UScriptCodeMap(0x000002B0, 0x000002B8, LATIN ) ,
         new UScriptCodeMap(0x000002E0, 0x000002E4, LATIN ) ,
         new UScriptCodeMap(0x00000300, 0x0000034E, INHERITED ) ,
         new UScriptCodeMap(0x00000360, 0x00000362, INHERITED ) ,
         new UScriptCodeMap(0x0000037A, 0x0000037A, GREEK ) ,
         new UScriptCodeMap(0x00000386, 0x00000386, GREEK ) ,
         new UScriptCodeMap(0x00000388, 0x0000038A, GREEK ) ,
         new UScriptCodeMap(0x0000038C, 0x0000038C, GREEK ) ,
         new UScriptCodeMap(0x0000038E, 0x000003A1, GREEK ) ,
         new UScriptCodeMap(0x000003A3, 0x000003CE, GREEK ) ,
         new UScriptCodeMap(0x000003D0, 0x000003D7, GREEK ) ,
         new UScriptCodeMap(0x000003DA, 0x000003F5, GREEK ) ,
         new UScriptCodeMap(0x00000400, 0x00000481, CYRILLIC ) ,
         new UScriptCodeMap(0x00000483, 0x00000486, CYRILLIC ) ,
         new UScriptCodeMap(0x00000488, 0x00000489, INHERITED ) ,
         new UScriptCodeMap(0x0000048C, 0x000004C4, CYRILLIC ) ,
         new UScriptCodeMap(0x000004C7, 0x000004C8, CYRILLIC ) ,
         new UScriptCodeMap(0x000004CB, 0x000004CC, CYRILLIC ) ,
         new UScriptCodeMap(0x000004D0, 0x000004F5, CYRILLIC ) ,
         new UScriptCodeMap(0x000004F8, 0x000004F9, CYRILLIC ) ,
         new UScriptCodeMap(0x00000531, 0x00000556, ARMENIAN ) ,
         new UScriptCodeMap(0x00000559, 0x00000559, ARMENIAN ) ,
         new UScriptCodeMap(0x00000561, 0x00000587, ARMENIAN ) ,
         new UScriptCodeMap(0x00000591, 0x000005A1, INHERITED ) ,
         new UScriptCodeMap(0x000005A3, 0x000005B9, INHERITED ) ,
         new UScriptCodeMap(0x000005BB, 0x000005BD, INHERITED ) ,
         new UScriptCodeMap(0x000005BF, 0x000005BF, INHERITED ) ,
         new UScriptCodeMap(0x000005C1, 0x000005C2, INHERITED ) ,
         new UScriptCodeMap(0x000005C4, 0x000005C4, INHERITED ) ,
         new UScriptCodeMap(0x000005D0, 0x000005EA, HEBREW ) ,
         new UScriptCodeMap(0x000005F0, 0x000005F2, HEBREW ) ,
         new UScriptCodeMap(0x00000621, 0x0000063A, ARABIC ) ,
         new UScriptCodeMap(0x00000641, 0x0000064A, ARABIC ) ,
         new UScriptCodeMap(0x0000064B, 0x00000655, INHERITED ) ,
         new UScriptCodeMap(0x00000670, 0x00000670, INHERITED ) ,
         new UScriptCodeMap(0x00000671, 0x000006D3, ARABIC ) ,
         new UScriptCodeMap(0x000006D5, 0x000006D5, ARABIC ) ,
         new UScriptCodeMap(0x000006D6, 0x000006DC, INHERITED ) ,
         new UScriptCodeMap(0x000006DD, 0x000006DE, INHERITED ) ,
         new UScriptCodeMap(0x000006DF, 0x000006E4, INHERITED ) ,
         new UScriptCodeMap(0x000006E5, 0x000006E6, ARABIC ) ,
         new UScriptCodeMap(0x000006E7, 0x000006E8, INHERITED ) ,
         new UScriptCodeMap(0x000006EA, 0x000006ED, INHERITED ) ,
         new UScriptCodeMap(0x000006FA, 0x000006FC, ARABIC ) ,
         new UScriptCodeMap(0x00000710, 0x00000710, SYRIAC ) ,
         new UScriptCodeMap(0x00000711, 0x00000711, SYRIAC ) ,
         new UScriptCodeMap(0x00000712, 0x0000072C, SYRIAC ) ,
         new UScriptCodeMap(0x00000730, 0x0000074A, SYRIAC ) ,
         new UScriptCodeMap(0x00000780, 0x000007A5, THAANA ) ,
         new UScriptCodeMap(0x000007A6, 0x000007B0, THAANA ) ,
         new UScriptCodeMap(0x00000901, 0x00000902, DEVANAGARI ) ,
         new UScriptCodeMap(0x00000903, 0x00000903, DEVANAGARI ) ,
         new UScriptCodeMap(0x00000905, 0x00000939, DEVANAGARI ) ,
         new UScriptCodeMap(0x0000093C, 0x0000093C, DEVANAGARI ) ,
         new UScriptCodeMap(0x0000093D, 0x0000093D, DEVANAGARI ) ,
         new UScriptCodeMap(0x0000093E, 0x00000940, DEVANAGARI ) ,
         new UScriptCodeMap(0x00000941, 0x00000948, DEVANAGARI ) ,
         new UScriptCodeMap(0x00000949, 0x0000094C, DEVANAGARI ) ,
         new UScriptCodeMap(0x0000094D, 0x0000094D, DEVANAGARI ) ,
         new UScriptCodeMap(0x00000950, 0x00000950, DEVANAGARI ) ,
         new UScriptCodeMap(0x00000951, 0x00000954, DEVANAGARI ) ,
         new UScriptCodeMap(0x00000958, 0x00000961, DEVANAGARI ) ,
         new UScriptCodeMap(0x00000962, 0x00000963, DEVANAGARI ) ,
         new UScriptCodeMap(0x00000966, 0x0000096F, DEVANAGARI ) ,
         new UScriptCodeMap(0x00000981, 0x00000981, BENGALI ) ,
         new UScriptCodeMap(0x00000985, 0x0000098C, BENGALI ) ,
         new UScriptCodeMap(0x0000098F, 0x00000990, BENGALI ) ,
         new UScriptCodeMap(0x00000993, 0x000009A8, BENGALI ) ,
         new UScriptCodeMap(0x000009AA, 0x000009B0, BENGALI ) ,
         new UScriptCodeMap(0x000009B2, 0x000009B2, BENGALI ) ,
         new UScriptCodeMap(0x000009B6, 0x000009B9, BENGALI ) ,
         new UScriptCodeMap(0x000009BC, 0x000009BC, BENGALI ) ,
         new UScriptCodeMap(0x000009BE, 0x000009C0, BENGALI ) ,
         new UScriptCodeMap(0x000009C1, 0x000009C4, BENGALI ) ,
         new UScriptCodeMap(0x000009C7, 0x000009C8, BENGALI ) ,
         new UScriptCodeMap(0x000009CB, 0x000009CC, BENGALI ) ,
         new UScriptCodeMap(0x000009CD, 0x000009CD, BENGALI ) ,
         new UScriptCodeMap(0x000009D7, 0x000009D7, BENGALI ) ,
         new UScriptCodeMap(0x000009DC, 0x000009DD, BENGALI ) ,
         new UScriptCodeMap(0x000009DF, 0x000009E1, BENGALI ) ,
         new UScriptCodeMap(0x000009E2, 0x000009E3, BENGALI ) ,
         new UScriptCodeMap(0x000009E6, 0x000009EF, BENGALI ) ,
         new UScriptCodeMap(0x000009F0, 0x000009F1, BENGALI ) ,
         new UScriptCodeMap(0x00000A02, 0x00000A02, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A05, 0x00000A0A, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A0F, 0x00000A10, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A13, 0x00000A28, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A2A, 0x00000A30, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A32, 0x00000A33, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A35, 0x00000A36, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A38, 0x00000A39, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A3C, 0x00000A3C, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A3E, 0x00000A40, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A41, 0x00000A42, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A47, 0x00000A48, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A4B, 0x00000A4D, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A59, 0x00000A5C, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A5E, 0x00000A5E, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A66, 0x00000A6F, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A70, 0x00000A71, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A72, 0x00000A74, GURMUKHI ) ,
         new UScriptCodeMap(0x00000A81, 0x00000A82, GUJARATI ) ,
         new UScriptCodeMap(0x00000A83, 0x00000A83, GUJARATI ) ,
         new UScriptCodeMap(0x00000A85, 0x00000A8B, GUJARATI ) ,
         new UScriptCodeMap(0x00000A8D, 0x00000A8D, GUJARATI ) ,
         new UScriptCodeMap(0x00000A8F, 0x00000A91, GUJARATI ) ,
         new UScriptCodeMap(0x00000A93, 0x00000AA8, GUJARATI ) ,
         new UScriptCodeMap(0x00000AAA, 0x00000AB0, GUJARATI ) ,
         new UScriptCodeMap(0x00000AB2, 0x00000AB3, GUJARATI ) ,
         new UScriptCodeMap(0x00000AB5, 0x00000AB9, GUJARATI ) ,
         new UScriptCodeMap(0x00000ABC, 0x00000ABC, GUJARATI ) ,
         new UScriptCodeMap(0x00000ABD, 0x00000ABD, GUJARATI ) ,
         new UScriptCodeMap(0x00000ABE, 0x00000AC0, GUJARATI ) ,
         new UScriptCodeMap(0x00000AC1, 0x00000AC5, GUJARATI ) ,
         new UScriptCodeMap(0x00000AC7, 0x00000AC8, GUJARATI ) ,
         new UScriptCodeMap(0x00000AC9, 0x00000AC9, GUJARATI ) ,
         new UScriptCodeMap(0x00000ACB, 0x00000ACC, GUJARATI ) ,
         new UScriptCodeMap(0x00000ACD, 0x00000ACD, GUJARATI ) ,
         new UScriptCodeMap(0x00000AD0, 0x00000AD0, GUJARATI ) ,
         new UScriptCodeMap(0x00000AE0, 0x00000AE0, GUJARATI ) ,
         new UScriptCodeMap(0x00000AE6, 0x00000AEF, GUJARATI ) ,
         new UScriptCodeMap(0x00000B01, 0x00000B01, ORIYA ) ,
         new UScriptCodeMap(0x00000B02, 0x00000B03, ORIYA ) ,
         new UScriptCodeMap(0x00000B05, 0x00000B0C, ORIYA ) ,
         new UScriptCodeMap(0x00000B0F, 0x00000B10, ORIYA ) ,
         new UScriptCodeMap(0x00000B13, 0x00000B28, ORIYA ) ,
         new UScriptCodeMap(0x00000B2A, 0x00000B30, ORIYA ) ,
         new UScriptCodeMap(0x00000B32, 0x00000B33, ORIYA ) ,
         new UScriptCodeMap(0x00000B36, 0x00000B39, ORIYA ) ,
         new UScriptCodeMap(0x00000B3C, 0x00000B3C, ORIYA ) ,
         new UScriptCodeMap(0x00000B3D, 0x00000B3D, ORIYA ) ,
         new UScriptCodeMap(0x00000B3E, 0x00000B3E, ORIYA ) ,
         new UScriptCodeMap(0x00000B3F, 0x00000B3F, ORIYA ) ,
         new UScriptCodeMap(0x00000B40, 0x00000B40, ORIYA ) ,
         new UScriptCodeMap(0x00000B41, 0x00000B43, ORIYA ) ,
         new UScriptCodeMap(0x00000B47, 0x00000B48, ORIYA ) ,
         new UScriptCodeMap(0x00000B4B, 0x00000B4C, ORIYA ) ,
         new UScriptCodeMap(0x00000B4D, 0x00000B4D, ORIYA ) ,
         new UScriptCodeMap(0x00000B56, 0x00000B56, ORIYA ) ,
         new UScriptCodeMap(0x00000B57, 0x00000B57, ORIYA ) ,
         new UScriptCodeMap(0x00000B5C, 0x00000B5D, ORIYA ) ,
         new UScriptCodeMap(0x00000B5F, 0x00000B61, ORIYA ) ,
         new UScriptCodeMap(0x00000B66, 0x00000B6F, ORIYA ) ,
         new UScriptCodeMap(0x00000B82, 0x00000B82, TAMIL ) ,
         new UScriptCodeMap(0x00000B83, 0x00000B83, TAMIL ) ,
         new UScriptCodeMap(0x00000B85, 0x00000B8A, TAMIL ) ,
         new UScriptCodeMap(0x00000B8E, 0x00000B90, TAMIL ) ,
         new UScriptCodeMap(0x00000B92, 0x00000B95, TAMIL ) ,
         new UScriptCodeMap(0x00000B99, 0x00000B9A, TAMIL ) ,
         new UScriptCodeMap(0x00000B9C, 0x00000B9C, TAMIL ) ,
         new UScriptCodeMap(0x00000B9E, 0x00000B9F, TAMIL ) ,
         new UScriptCodeMap(0x00000BA3, 0x00000BA4, TAMIL ) ,
         new UScriptCodeMap(0x00000BA8, 0x00000BAA, TAMIL ) ,
         new UScriptCodeMap(0x00000BAE, 0x00000BB5, TAMIL ) ,
         new UScriptCodeMap(0x00000BB7, 0x00000BB9, TAMIL ) ,
         new UScriptCodeMap(0x00000BBE, 0x00000BBF, TAMIL ) ,
         new UScriptCodeMap(0x00000BC0, 0x00000BC0, TAMIL ) ,
         new UScriptCodeMap(0x00000BC1, 0x00000BC2, TAMIL ) ,
         new UScriptCodeMap(0x00000BC6, 0x00000BC8, TAMIL ) ,
         new UScriptCodeMap(0x00000BCA, 0x00000BCC, TAMIL ) ,
         new UScriptCodeMap(0x00000BCD, 0x00000BCD, TAMIL ) ,
         new UScriptCodeMap(0x00000BD7, 0x00000BD7, TAMIL ) ,
         new UScriptCodeMap(0x00000BE7, 0x00000BEF, TAMIL ) ,
         new UScriptCodeMap(0x00000BF0, 0x00000BF2, TAMIL ) ,
         new UScriptCodeMap(0x00000C01, 0x00000C03, TELUGU ) ,
         new UScriptCodeMap(0x00000C05, 0x00000C0C, TELUGU ) ,
         new UScriptCodeMap(0x00000C0E, 0x00000C10, TELUGU ) ,
         new UScriptCodeMap(0x00000C12, 0x00000C28, TELUGU ) ,
         new UScriptCodeMap(0x00000C2A, 0x00000C33, TELUGU ) ,
         new UScriptCodeMap(0x00000C35, 0x00000C39, TELUGU ) ,
         new UScriptCodeMap(0x00000C3E, 0x00000C40, TELUGU ) ,
         new UScriptCodeMap(0x00000C41, 0x00000C44, TELUGU ) ,
         new UScriptCodeMap(0x00000C46, 0x00000C48, TELUGU ) ,
         new UScriptCodeMap(0x00000C4A, 0x00000C4D, TELUGU ) ,
         new UScriptCodeMap(0x00000C55, 0x00000C56, TELUGU ) ,
         new UScriptCodeMap(0x00000C60, 0x00000C61, TELUGU ) ,
         new UScriptCodeMap(0x00000C66, 0x00000C6F, TELUGU ) ,
         new UScriptCodeMap(0x00000C82, 0x00000C83, KANNADA ) ,
         new UScriptCodeMap(0x00000C85, 0x00000C8C, KANNADA ) ,
         new UScriptCodeMap(0x00000C8E, 0x00000C90, KANNADA ) ,
         new UScriptCodeMap(0x00000C92, 0x00000CA8, KANNADA ) ,
         new UScriptCodeMap(0x00000CAA, 0x00000CB3, KANNADA ) ,
         new UScriptCodeMap(0x00000CB5, 0x00000CB9, KANNADA ) ,
         new UScriptCodeMap(0x00000CBE, 0x00000CBE, KANNADA ) ,
         new UScriptCodeMap(0x00000CBF, 0x00000CBF, KANNADA ) ,
         new UScriptCodeMap(0x00000CC0, 0x00000CC4, KANNADA ) ,
         new UScriptCodeMap(0x00000CC6, 0x00000CC6, KANNADA ) ,
         new UScriptCodeMap(0x00000CC7, 0x00000CC8, KANNADA ) ,
         new UScriptCodeMap(0x00000CCA, 0x00000CCB, KANNADA ) ,
         new UScriptCodeMap(0x00000CCC, 0x00000CCD, KANNADA ) ,
         new UScriptCodeMap(0x00000CD5, 0x00000CD6, KANNADA ) ,
         new UScriptCodeMap(0x00000CDE, 0x00000CDE, KANNADA ) ,
         new UScriptCodeMap(0x00000CE0, 0x00000CE1, KANNADA ) ,
         new UScriptCodeMap(0x00000CE6, 0x00000CEF, KANNADA ) ,
         new UScriptCodeMap(0x00000D02, 0x00000D03, MALAYALAM ) ,
         new UScriptCodeMap(0x00000D05, 0x00000D0C, MALAYALAM ) ,
         new UScriptCodeMap(0x00000D0E, 0x00000D10, MALAYALAM ) ,
         new UScriptCodeMap(0x00000D12, 0x00000D28, MALAYALAM ) ,
         new UScriptCodeMap(0x00000D2A, 0x00000D39, MALAYALAM ) ,
         new UScriptCodeMap(0x00000D3E, 0x00000D40, MALAYALAM ) ,
         new UScriptCodeMap(0x00000D41, 0x00000D43, MALAYALAM ) ,
         new UScriptCodeMap(0x00000D46, 0x00000D48, MALAYALAM ) ,
         new UScriptCodeMap(0x00000D4A, 0x00000D4C, MALAYALAM ) ,
         new UScriptCodeMap(0x00000D4D, 0x00000D4D, MALAYALAM ) ,
         new UScriptCodeMap(0x00000D57, 0x00000D57, MALAYALAM ) ,
         new UScriptCodeMap(0x00000D60, 0x00000D61, MALAYALAM ) ,
         new UScriptCodeMap(0x00000D66, 0x00000D6F, MALAYALAM ) ,
         new UScriptCodeMap(0x00000D82, 0x00000D83, SINHALA ) ,
         new UScriptCodeMap(0x00000D85, 0x00000D96, SINHALA ) ,
         new UScriptCodeMap(0x00000D9A, 0x00000DB1, SINHALA ) ,
         new UScriptCodeMap(0x00000DB3, 0x00000DBB, SINHALA ) ,
         new UScriptCodeMap(0x00000DBD, 0x00000DBD, SINHALA ) ,
         new UScriptCodeMap(0x00000DC0, 0x00000DC6, SINHALA ) ,
         new UScriptCodeMap(0x00000DCA, 0x00000DCA, SINHALA ) ,
         new UScriptCodeMap(0x00000DCF, 0x00000DD1, SINHALA ) ,
         new UScriptCodeMap(0x00000DD2, 0x00000DD4, SINHALA ) ,
         new UScriptCodeMap(0x00000DD6, 0x00000DD6, SINHALA ) ,
         new UScriptCodeMap(0x00000DD8, 0x00000DDF, SINHALA ) ,
         new UScriptCodeMap(0x00000DF2, 0x00000DF3, SINHALA ) ,
         new UScriptCodeMap(0x00000E01, 0x00000E30, THAI ) ,
         new UScriptCodeMap(0x00000E31, 0x00000E31, THAI ) ,
         new UScriptCodeMap(0x00000E32, 0x00000E33, THAI ) ,
         new UScriptCodeMap(0x00000E34, 0x00000E3A, THAI ) ,
         new UScriptCodeMap(0x00000E40, 0x00000E45, THAI ) ,
         new UScriptCodeMap(0x00000E46, 0x00000E46, THAI ) ,
         new UScriptCodeMap(0x00000E47, 0x00000E4E, THAI ) ,
         new UScriptCodeMap(0x00000E50, 0x00000E59, THAI ) ,
         new UScriptCodeMap(0x00000E81, 0x00000E82, LAO ) ,
         new UScriptCodeMap(0x00000E84, 0x00000E84, LAO ) ,
         new UScriptCodeMap(0x00000E87, 0x00000E88, LAO ) ,
         new UScriptCodeMap(0x00000E8A, 0x00000E8A, LAO ) ,
         new UScriptCodeMap(0x00000E8D, 0x00000E8D, LAO ) ,
         new UScriptCodeMap(0x00000E94, 0x00000E97, LAO ) ,
         new UScriptCodeMap(0x00000E99, 0x00000E9F, LAO ) ,
         new UScriptCodeMap(0x00000EA1, 0x00000EA3, LAO ) ,
         new UScriptCodeMap(0x00000EA5, 0x00000EA5, LAO ) ,
         new UScriptCodeMap(0x00000EA7, 0x00000EA7, LAO ) ,
         new UScriptCodeMap(0x00000EAA, 0x00000EAB, LAO ) ,
         new UScriptCodeMap(0x00000EAD, 0x00000EB0, LAO ) ,
         new UScriptCodeMap(0x00000EB1, 0x00000EB1, LAO ) ,
         new UScriptCodeMap(0x00000EB2, 0x00000EB3, LAO ) ,
         new UScriptCodeMap(0x00000EB4, 0x00000EB9, LAO ) ,
         new UScriptCodeMap(0x00000EBB, 0x00000EBC, LAO ) ,
         new UScriptCodeMap(0x00000EBD, 0x00000EBD, LAO ) ,
         new UScriptCodeMap(0x00000EC0, 0x00000EC4, LAO ) ,
         new UScriptCodeMap(0x00000EC6, 0x00000EC6, LAO ) ,
         new UScriptCodeMap(0x00000EC8, 0x00000ECD, LAO ) ,
         new UScriptCodeMap(0x00000ED0, 0x00000ED9, LAO ) ,
         new UScriptCodeMap(0x00000EDC, 0x00000EDD, LAO ) ,
         new UScriptCodeMap(0x00000F00, 0x00000F00, TIBETAN ) ,
         new UScriptCodeMap(0x00000F18, 0x00000F19, TIBETAN ) ,
         new UScriptCodeMap(0x00000F20, 0x00000F29, TIBETAN ) ,
         new UScriptCodeMap(0x00000F2A, 0x00000F33, TIBETAN ) ,
         new UScriptCodeMap(0x00000F35, 0x00000F35, TIBETAN ) ,
         new UScriptCodeMap(0x00000F37, 0x00000F37, TIBETAN ) ,
         new UScriptCodeMap(0x00000F39, 0x00000F39, TIBETAN ) ,
         new UScriptCodeMap(0x00000F40, 0x00000F47, TIBETAN ) ,
         new UScriptCodeMap(0x00000F49, 0x00000F6A, TIBETAN ) ,
         new UScriptCodeMap(0x00000F71, 0x00000F7E, TIBETAN ) ,
         new UScriptCodeMap(0x00000F7F, 0x00000F7F, TIBETAN ) ,
         new UScriptCodeMap(0x00000F80, 0x00000F84, TIBETAN ) ,
         new UScriptCodeMap(0x00000F86, 0x00000F87, TIBETAN ) ,
         new UScriptCodeMap(0x00000F88, 0x00000F8B, TIBETAN ) ,
         new UScriptCodeMap(0x00000F90, 0x00000F97, TIBETAN ) ,
         new UScriptCodeMap(0x00000F99, 0x00000FBC, TIBETAN ) ,
         new UScriptCodeMap(0x00000FC6, 0x00000FC6, TIBETAN ) ,
         new UScriptCodeMap(0x00001000, 0x00001021, MYANMAR ) ,
         new UScriptCodeMap(0x00001023, 0x00001027, MYANMAR ) ,
         new UScriptCodeMap(0x00001029, 0x0000102A, MYANMAR ) ,
         new UScriptCodeMap(0x0000102C, 0x0000102C, MYANMAR ) ,
         new UScriptCodeMap(0x0000102D, 0x00001030, MYANMAR ) ,
         new UScriptCodeMap(0x00001031, 0x00001031, MYANMAR ) ,
         new UScriptCodeMap(0x00001032, 0x00001032, MYANMAR ) ,
         new UScriptCodeMap(0x00001036, 0x00001037, MYANMAR ) ,
         new UScriptCodeMap(0x00001038, 0x00001038, MYANMAR ) ,
         new UScriptCodeMap(0x00001039, 0x00001039, MYANMAR ) ,
         new UScriptCodeMap(0x00001040, 0x00001049, MYANMAR ) ,
         new UScriptCodeMap(0x00001050, 0x00001055, MYANMAR ) ,
         new UScriptCodeMap(0x00001056, 0x00001057, MYANMAR ) ,
         new UScriptCodeMap(0x00001058, 0x00001059, MYANMAR ) ,
         new UScriptCodeMap(0x000010A0, 0x000010C5, GEORGIAN ) ,
         new UScriptCodeMap(0x000010D0, 0x000010F6, GEORGIAN ) ,
         new UScriptCodeMap(0x00001100, 0x00001159, HANGUL ) ,
         new UScriptCodeMap(0x0000115F, 0x000011A2, HANGUL ) ,
         new UScriptCodeMap(0x000011A8, 0x000011F9, HANGUL ) ,
         new UScriptCodeMap(0x00001200, 0x00001206, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001208, 0x00001246, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001248, 0x00001248, ETHIOPIC ) ,
         new UScriptCodeMap(0x0000124A, 0x0000124D, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001250, 0x00001256, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001258, 0x00001258, ETHIOPIC ) ,
         new UScriptCodeMap(0x0000125A, 0x0000125D, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001260, 0x00001286, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001288, 0x00001288, ETHIOPIC ) ,
         new UScriptCodeMap(0x0000128A, 0x0000128D, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001290, 0x000012AE, ETHIOPIC ) ,
         new UScriptCodeMap(0x000012B0, 0x000012B0, ETHIOPIC ) ,
         new UScriptCodeMap(0x000012B2, 0x000012B5, ETHIOPIC ) ,
         new UScriptCodeMap(0x000012B8, 0x000012BE, ETHIOPIC ) ,
         new UScriptCodeMap(0x000012C0, 0x000012C0, ETHIOPIC ) ,
         new UScriptCodeMap(0x000012C2, 0x000012C5, ETHIOPIC ) ,
         new UScriptCodeMap(0x000012C8, 0x000012CE, ETHIOPIC ) ,
         new UScriptCodeMap(0x000012D0, 0x000012D6, ETHIOPIC ) ,
         new UScriptCodeMap(0x000012D8, 0x000012EE, ETHIOPIC ) ,
         new UScriptCodeMap(0x000012F0, 0x0000130E, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001310, 0x00001310, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001312, 0x00001315, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001318, 0x0000131E, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001320, 0x00001346, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001348, 0x0000135A, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001369, 0x00001371, ETHIOPIC ) ,
         new UScriptCodeMap(0x00001372, 0x0000137C, ETHIOPIC ) ,
         new UScriptCodeMap(0x000013A0, 0x000013F4, CHEROKEE ) ,
         new UScriptCodeMap(0x00001401, 0x0000166C, UCAS ) ,
         new UScriptCodeMap(0x0000166F, 0x00001676, UCAS ) ,
         new UScriptCodeMap(0x00001681, 0x0000169A, OGHAM ) ,
         new UScriptCodeMap(0x000016A0, 0x000016EA, RUNIC ) ,
         new UScriptCodeMap(0x000016EE, 0x000016F0, RUNIC ) ,
         new UScriptCodeMap(0x00001780, 0x000017B3, KHMER ) ,
         new UScriptCodeMap(0x000017B4, 0x000017B6, KHMER ) ,
         new UScriptCodeMap(0x000017B7, 0x000017BD, KHMER ) ,
         new UScriptCodeMap(0x000017BE, 0x000017C5, KHMER ) ,
         new UScriptCodeMap(0x000017C6, 0x000017C6, KHMER ) ,
         new UScriptCodeMap(0x000017C7, 0x000017C8, KHMER ) ,
         new UScriptCodeMap(0x000017C9, 0x000017D3, KHMER ) ,
         new UScriptCodeMap(0x000017E0, 0x000017E9, KHMER ) ,
         new UScriptCodeMap(0x00001810, 0x00001819, MONGOLIAN ) ,
         new UScriptCodeMap(0x00001820, 0x00001842, MONGOLIAN ) ,
         new UScriptCodeMap(0x00001843, 0x00001843, MONGOLIAN ) ,
         new UScriptCodeMap(0x00001844, 0x00001877, MONGOLIAN ) ,
         new UScriptCodeMap(0x00001880, 0x000018A8, MONGOLIAN ) ,
         new UScriptCodeMap(0x000018A9, 0x000018A9, MONGOLIAN ) ,
         new UScriptCodeMap(0x00001E00, 0x00001E9B, LATIN ) ,
         new UScriptCodeMap(0x00001EA0, 0x00001EF9, LATIN ) ,
         new UScriptCodeMap(0x00001F00, 0x00001F15, GREEK ) ,
         new UScriptCodeMap(0x00001F18, 0x00001F1D, GREEK ) ,
         new UScriptCodeMap(0x00001F20, 0x00001F45, GREEK ) ,
         new UScriptCodeMap(0x00001F48, 0x00001F4D, GREEK ) ,
         new UScriptCodeMap(0x00001F50, 0x00001F57, GREEK ) ,
         new UScriptCodeMap(0x00001F59, 0x00001F59, GREEK ) ,
         new UScriptCodeMap(0x00001F5B, 0x00001F5B, GREEK ) ,
         new UScriptCodeMap(0x00001F5D, 0x00001F5D, GREEK ) ,
         new UScriptCodeMap(0x00001F5F, 0x00001F7D, GREEK ) ,
         new UScriptCodeMap(0x00001F80, 0x00001FB4, GREEK ) ,
         new UScriptCodeMap(0x00001FB6, 0x00001FBC, GREEK ) ,
         new UScriptCodeMap(0x00001FBE, 0x00001FBE, GREEK ) ,
         new UScriptCodeMap(0x00001FC2, 0x00001FC4, GREEK ) ,
         new UScriptCodeMap(0x00001FC6, 0x00001FCC, GREEK ) ,
         new UScriptCodeMap(0x00001FD0, 0x00001FD3, GREEK ) ,
         new UScriptCodeMap(0x00001FD6, 0x00001FDB, GREEK ) ,
         new UScriptCodeMap(0x00001FE0, 0x00001FEC, GREEK ) ,
         new UScriptCodeMap(0x00001FF2, 0x00001FF4, GREEK ) ,
         new UScriptCodeMap(0x00001FF6, 0x00001FFC, GREEK ) ,
         new UScriptCodeMap(0x0000207F, 0x0000207F, LATIN ) ,
         new UScriptCodeMap(0x000020D0, 0x000020DC, INHERITED ) ,
         new UScriptCodeMap(0x000020DD, 0x000020E0, INHERITED ) ,
         new UScriptCodeMap(0x000020E1, 0x000020E1, INHERITED ) ,
         new UScriptCodeMap(0x000020E2, 0x000020E3, INHERITED ) ,
         new UScriptCodeMap(0x00002126, 0x00002126, GREEK ) ,
         new UScriptCodeMap(0x0000212A, 0x0000212B, LATIN ) ,
         new UScriptCodeMap(0x00002E80, 0x00002E99, HAN ) ,
         new UScriptCodeMap(0x00002E9B, 0x00002EF3, HAN ) ,
         new UScriptCodeMap(0x00002F00, 0x00002FD5, HAN ) ,
         new UScriptCodeMap(0x00003005, 0x00003005, HAN ) ,
         new UScriptCodeMap(0x00003007, 0x00003007, HAN ) ,
         new UScriptCodeMap(0x00003021, 0x00003029, HAN ) ,
         new UScriptCodeMap(0x0000302A, 0x0000302F, INHERITED ) ,
         new UScriptCodeMap(0x00003038, 0x0000303A, HAN ) ,
         new UScriptCodeMap(0x00003041, 0x00003094, HIRAGANA ) ,
         new UScriptCodeMap(0x00003099, 0x0000309A, INHERITED ) ,
         new UScriptCodeMap(0x0000309D, 0x0000309E, HIRAGANA ) ,
         new UScriptCodeMap(0x000030A1, 0x000030FA, KATAKANA ) ,
         new UScriptCodeMap(0x000030FD, 0x000030FE, KATAKANA ) ,
         new UScriptCodeMap(0x00003105, 0x0000312C, BOPOMOFO ) ,
         new UScriptCodeMap(0x00003131, 0x0000318E, HANGUL ) ,
         new UScriptCodeMap(0x000031A0, 0x000031B7, BOPOMOFO ) ,
         new UScriptCodeMap(0x00003400, 0x00004DB5, HAN ) ,
         new UScriptCodeMap(0x00004E00, 0x00009FA5, HAN ) ,
         new UScriptCodeMap(0x0000A000, 0x0000A48C, YI ) ,
         new UScriptCodeMap(0x0000A490, 0x0000A4A1, YI ) ,
         new UScriptCodeMap(0x0000A4A4, 0x0000A4B3, YI ) ,
         new UScriptCodeMap(0x0000A4B5, 0x0000A4C0, YI ) ,
         new UScriptCodeMap(0x0000A4C2, 0x0000A4C4, YI ) ,
         new UScriptCodeMap(0x0000A4C6, 0x0000A4C6, YI ) ,
         new UScriptCodeMap(0x0000AC00, 0x0000D7A3, HANGUL ) ,
         new UScriptCodeMap(0x0000F900, 0x0000FA2D, HAN ) ,
         new UScriptCodeMap(0x0000FB00, 0x0000FB06, LATIN ) ,
         new UScriptCodeMap(0x0000FB13, 0x0000FB17, ARMENIAN ) ,
         new UScriptCodeMap(0x0000FB1D, 0x0000FB1D, HEBREW ) ,
         new UScriptCodeMap(0x0000FB1E, 0x0000FB1E, INHERITED ) ,
         new UScriptCodeMap(0x0000FB1F, 0x0000FB28, HEBREW ) ,
         new UScriptCodeMap(0x0000FB2A, 0x0000FB36, HEBREW ) ,
         new UScriptCodeMap(0x0000FB38, 0x0000FB3C, HEBREW ) ,
         new UScriptCodeMap(0x0000FB3E, 0x0000FB3E, HEBREW ) ,
         new UScriptCodeMap(0x0000FB40, 0x0000FB41, HEBREW ) ,
         new UScriptCodeMap(0x0000FB43, 0x0000FB44, HEBREW ) ,
         new UScriptCodeMap(0x0000FB46, 0x0000FB4F, HEBREW ) ,
         new UScriptCodeMap(0x0000FB50, 0x0000FBB1, ARABIC ) ,
         new UScriptCodeMap(0x0000FBD3, 0x0000FD3D, ARABIC ) ,
         new UScriptCodeMap(0x0000FD50, 0x0000FD8F, ARABIC ) ,
         new UScriptCodeMap(0x0000FD92, 0x0000FDC7, ARABIC ) ,
         new UScriptCodeMap(0x0000FDF0, 0x0000FDFB, ARABIC ) ,
         new UScriptCodeMap(0x0000FE20, 0x0000FE23, INHERITED ) ,
         new UScriptCodeMap(0x0000FE70, 0x0000FE72, ARABIC ) ,
         new UScriptCodeMap(0x0000FE74, 0x0000FE74, ARABIC ) ,
         new UScriptCodeMap(0x0000FE76, 0x0000FEFC, ARABIC ) ,
         new UScriptCodeMap(0x0000FF21, 0x0000FF3A, LATIN ) ,
         new UScriptCodeMap(0x0000FF41, 0x0000FF5A, LATIN ) ,
         new UScriptCodeMap(0x0000FF66, 0x0000FF6F, KATAKANA ) ,
         new UScriptCodeMap(0x0000FF71, 0x0000FF9D, KATAKANA ) ,
         new UScriptCodeMap(0x0000FFA0, 0x0000FFBE, HANGUL ) ,
         new UScriptCodeMap(0x0000FFC2, 0x0000FFC7, HANGUL ) ,
         new UScriptCodeMap(0x0000FFCA, 0x0000FFCF, HANGUL ) ,
         new UScriptCodeMap(0x0000FFD2, 0x0000FFD7, HANGUL ) ,
         new UScriptCodeMap(0x0000FFDA, 0x0000FFDC, HANGUL ) ,
         new UScriptCodeMap(0x00010300, 0x0001031E, OLD_ITALIC ) ,
         new UScriptCodeMap(0x00010330, 0x00010349, GOTHIC ) ,
         new UScriptCodeMap(0x0001034A, 0x0001034A, GOTHIC ) ,
         new UScriptCodeMap(0x00010400, 0x00010425, DESERET ) ,
         new UScriptCodeMap(0x00010428, 0x0001044D, DESERET ) ,
         new UScriptCodeMap(0x0001D167, 0x0001D169, INHERITED ) ,
         new UScriptCodeMap(0x0001D17B, 0x0001D182, INHERITED ) ,
         new UScriptCodeMap(0x0001D185, 0x0001D18B, INHERITED ) ,
         new UScriptCodeMap(0x0001D1AA, 0x0001D1AD, INHERITED ) ,
         new UScriptCodeMap(0x00020000, 0x0002A6D6, HAN ) ,
    };
    

    /* binary search the string array */
    private static int findStringIndex(String[] sortedArr, String target){
        int size = sortedArr.length;
        int left, middle, right,rc;
        left =0;
        right= size-1;
        
        while(left <= right){
            middle = (left+right)/2;
            rc=sortedArr[middle].toUpperCase().compareTo(target.toUpperCase());
            if(rc<0){
                left = middle+1;
            }else if(rc >0){
                right = middle -1;
            }else{
                return middle;
            }
        }
        return -1;
    }

    /* linearly search the array and return the index */
    private static int findCodeIndex(int[] unsorted, int target){
        int size = unsorted.length;
        int i=0;
        while(i<size){
            if(target == unsorted[i]){
                return i;
            }
            i++;
        }
        return -1;
    }

    private static final String localeScript = "com.ibm.text.resources.LocaleScript";
    
    private static int[] findCodeFromLocale(Locale locale)
            throws MissingResourceException{
        //TODO: Currently we use a hacked fallback mechanism.
        //Should be changed once ICU4J bundles locale data
        //with the distribution
        int[] code = new int[1];
        code[0] = INVALID_CODE;
        
        ResourceBundle resB = ResourceBundle.getBundle(localeScript);
        String temp = locale.toString();
        while(true){
            try{
                String[] scriptArray = resB.getStringArray(temp);
                code = new int[scriptArray.length];
                for(int i= 0; i< scriptArray.length ;i++){
                    int strIndex = findStringIndex(scriptAbbr,scriptArray[i]);
                    
                    if(strIndex>=0 && strIndex < scriptAbbr.length){ 
                        code[i] =  scriptAbbrCodes[strIndex];
                    }else{
                        code[i] = INVALID_CODE;
                    }
                }
                break;
            }catch(MissingResourceException e){
                
                /* handle fallback */
                int index = temp.indexOf('_');
                if(index >0){
                    temp = temp.substring(0,index);
                }else{
                    break;
                }
                continue;
            }
        }
        
        return code;
     }

    /* binary search the string array */
    private static int findScriptCode(int codepoint){
        int left, middle, right,rc;
        left =0;
        
        right= scriptCodeIndex.length-1;

        while(left <= right){
            middle = (left+right)/2;
            /* check if the codepoint is the valid range */
            if(scriptCodeIndex[middle].firstCodepoint<= codepoint  && 
               scriptCodeIndex[middle].lastCodepoint>= codepoint){
                rc = 0;
            }else if(codepoint> scriptCodeIndex[middle].lastCodepoint){
                rc =-1;
            }else {
                rc = 1;
            }

            if(rc<0){
                left = middle+1;
            }else if(rc >0){
                right = middle -1;
            }else{
                return  scriptCodeIndex[middle].scriptCode;
            }
        }
        return -1;
    }
    
        
    /**
    * Gets a script code associated with the given locale or ISO 15924 abbreviation or name. 
    * Returns MALAYAM given "Malayam" OR "Mlym".
    * Returns LATIN given "en" OR "en_US" 
    * @param locale Locale
    * @return The script code 
    * @exception IllegalArgumentException, MissingResourceException
    * @draft
    */
    public static final int[] getCode(Locale locale)
        throws IllegalArgumentException, MissingResourceException{
            return findCodeFromLocale(locale);
    }
    
    /**
    * Gets a script code associated with the given locale or ISO 15924 abbreviation or name. 
    * Returns MALAYAM given "Malayam" OR "Mlym".
    * Returns LATIN given "en" OR "en_US" 
    * @param nameOrAbbrOrLocale name of the script or ISO 15924 code or locale
    * @return The script code 
    * @exception IllegalArgumentException, MissingResourceException
    * @draft
    */
    public static final int[] getCode(String nameOrAbbrOrLocale)
        throws IllegalArgumentException, MissingResourceException{
            
        int[] code = new int[1];
        code[0] = INVALID_CODE;
        int strIndex=0;
        
        /* try the Names array first */
        strIndex = findStringIndex(scriptNames, nameOrAbbrOrLocale);
        
        if(strIndex>=0 && strIndex < scriptNames.length){ 
            code[0] =  scriptNameCodes[strIndex];
        }
        /* we did not find in names array so try abbr array*/
        if(code[0] == INVALID_CODE){
            strIndex = findStringIndex(scriptAbbr, nameOrAbbrOrLocale);
            if(strIndex>=0 && strIndex < scriptAbbr.length){ 
                code[0] =  scriptAbbrCodes[strIndex];
            }
        }
        /* we still haven't found it try locale */        
        if(code[0]==INVALID_CODE){            
            code = findCodeFromLocale(new Locale(nameOrAbbrOrLocale,""));
        }
        return code;
    }
    /** 
     * Gets the script code associated with the given codepoint.
     * Returns UScript.MALAYAM given 0x0D02 
     * @param codepoint UChar32 codepoint
     * @param err the error status code.
     * @return The script code 
     * @exception IllegalArgumentException
     * @draft
     */
    public static final int getScript(int codepoint)
        throws IllegalArgumentException{
        if (codepoint >= UCharacter.MIN_VALUE & codepoint <= UCharacter.MAX_VALUE) {
            return findScriptCode(codepoint);
        }else{
            throw new IllegalArgumentException();
        } 
    }
    
    /**
     * Gets a script name associated with the given script code. 
     * Returns  "Malayam" given MALAYAM
     * @param scriptCode int script code
     * @return script name as a string in full as given in TR#24
     * @exception IllegalArgumentException
     * @draft
     */
    public static final String getName(int scriptCode)
            throws IllegalArgumentException{
        int index = -1;
        if(scriptCode > CODE_LIMIT){
            throw new IllegalArgumentException(Integer.toString(scriptCode));
        }
        index = findCodeIndex(scriptNameCodes,scriptCode);
        if(index >=0){
            return scriptNames[index];
        }else{
            throw new IllegalArgumentException(Integer.toString(scriptCode));
        }
    }
    
    /**
     * Gets a script name associated with the given script code. 
     * Returns  "Mlym" given MALAYAM
     * @param scriptCode int script code 
     * @return script abbreviated name as a string  as given in TR#24
     * @exception IllegalArgumentException
     * @draft
     */
    public static final String getShortName(int scriptCode)
            throws IllegalArgumentException{
        int index = -1;
        if(scriptCode > CODE_LIMIT){
            throw new IllegalArgumentException(Integer.toString(scriptCode));
        }
        index = findCodeIndex(scriptAbbrCodes,scriptCode);
        if(index >=0){
            return scriptAbbr[index];
        }else{
            throw new IllegalArgumentException(Integer.toString(scriptCode));
        }
    }
}

