Home | History | Annotate | Download | only in coll
      1 /* GENERATED SOURCE. DO NOT MODIFY. */
      2 //  2016 and later: Unicode, Inc. and others.
      3 // License & terms of use: http://www.unicode.org/copyright.html#License
      4 /*
      5 *******************************************************************************
      6 * Copyright (C) 2012-2016, International Business Machines
      7 * Corporation and others.  All Rights Reserved.
      8 *******************************************************************************
      9 * CollationFCD.java, ported from collationfcd.h/.cpp
     10 *
     11 * C++ version created on: 2012aug18
     12 * created by: Markus W. Scherer
     13 */
     14 
     15 package android.icu.impl.coll;
     16 
     17 import android.icu.text.UTF16;
     18 
     19 /**
     20  * Data and functions for the FCD check fast path.
     21  *
     22  * The fast path looks at a pair of 16-bit code units and checks
     23  * whether there is an FCD boundary between them;
     24  * there is if the first unit has a trailing ccc=0 (!hasTccc(first))
     25  * or the second unit has a leading ccc=0 (!hasLccc(second)),
     26  * or both.
     27  * When the fast path finds a possible non-boundary,
     28  * then the FCD check slow path looks at the actual sequence of FCD values.
     29  *
     30  * This is a pure optimization.
     31  * The fast path must at least find all possible non-boundaries.
     32  * If the fast path is too pessimistic, it costs performance.
     33  *
     34  * For a pair of BMP characters, the fast path tests are precise (1 bit per character).
     35  *
     36  * For a supplementary code point, the two units are its lead and trail surrogates.
     37  * We set hasTccc(lead)=true if any of its 1024 associated supplementary code points
     38  * has lccc!=0 or tccc!=0.
     39  * We set hasLccc(trail)=true for all trail surrogates.
     40  * As a result, we leave the fast path if the lead surrogate might start a
     41  * supplementary code point that is not FCD-inert.
     42  * (So the fast path need not detect that there is a surrogate pair,
     43  * nor look ahead to the next full code point.)
     44  *
     45  * hasLccc(lead)=true if any of its 1024 associated supplementary code points
     46  * has lccc!=0, for fast boundary checking between BMP & supplementary.
     47  *
     48  * hasTccc(trail)=false:
     49  * It should only be tested for unpaired trail surrogates which are FCD-inert.
     50  * @hide Only a subset of ICU is exposed in Android
     51  */
     52 public final class CollationFCD {
     53     public static boolean hasLccc(int c) {
     54         assert c <= 0xffff;
     55         // c can be negative, e.g., Collation.SENTINEL_CP from UCharIterator;
     56         // that is handled in the first test.
     57         int i;
     58         return
     59             // U+0300 is the first character with lccc!=0.
     60             c >= 0x300 &&
     61             (i = lcccIndex[c >> 5]) != 0 &&
     62             (lcccBits[i] & (1 << (c & 0x1f))) != 0;
     63     }
     64 
     65     public static boolean hasTccc(int c) {
     66         assert c <= 0xffff;
     67         // c can be negative, e.g., Collation.SENTINEL_CP from UCharIterator;
     68         // that is handled in the first test.
     69         int i;
     70         return
     71             // U+00C0 is the first character with tccc!=0.
     72             c >= 0xc0 &&
     73             (i = tcccIndex[c >> 5]) != 0 &&
     74             (tcccBits[i] & (1 << (c & 0x1f))) != 0;
     75     }
     76 
     77     static boolean mayHaveLccc(int c) {
     78         // Handles all of Unicode 0..10FFFF.
     79         // c can be negative, e.g., Collation.SENTINEL_CP.
     80         // U+0300 is the first character with lccc!=0.
     81         if(c < 0x300) { return false; }
     82         if(c > 0xffff) { c = UTF16.getLeadSurrogate(c); }
     83         int i;
     84         return
     85             (i = lcccIndex[c >> 5]) != 0 &&
     86             (lcccBits[i] & (1 << (c & 0x1f))) != 0;
     87     }
     88 
     89     /**
     90      * Tibetan composite vowel signs (U+0F73, U+0F75, U+0F81)
     91      * must be decomposed before reaching the core collation code,
     92      * or else some sequences including them, even ones passing the FCD check,
     93      * do not yield canonically equivalent results.
     94      *
     95      * This is a fast and imprecise test.
     96      *
     97      * @param c a code point
     98      * @return true if c is U+0F73, U+0F75 or U+0F81 or one of several other Tibetan characters
     99      */
    100     static boolean maybeTibetanCompositeVowel(int c) {
    101         return (c & 0x1fff01) == 0xf01;
    102     }
    103 
    104     /**
    105      * Tibetan composite vowel signs (U+0F73, U+0F75, U+0F81)
    106      * must be decomposed before reaching the core collation code,
    107      * or else some sequences including them, even ones passing the FCD check,
    108      * do not yield canonically equivalent results.
    109      *
    110      * They have distinct lccc/tccc combinations: 129/130 or 129/132.
    111      *
    112      * @param fcd16 the FCD value (lccc/tccc combination) of a code point
    113      * @return true if fcd16 is from U+0F73, U+0F75 or U+0F81
    114      */
    115     static boolean isFCD16OfTibetanCompositeVowel(int fcd16) {
    116         return fcd16 == 0x8182 || fcd16 == 0x8184;
    117     }
    118 
    119     // CollationFCD();  // No instantiation.
    120 
    121     // TODO: machine-generate by: icu/tools/unicode/c/genuca/genuca.cpp
    122 
    123     private static final byte[] lcccIndex={
    124 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    125 0,0,0,0,0,0,0,0,1,1,2,3,0,0,0,0,
    126 0,0,0,0,4,0,0,0,0,0,0,0,5,6,7,0,
    127 8,0,9,0xa,0,0,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0x10,
    128 0x11,0x12,0x13,0,0,0,0x14,0x15,0,0x16,0x17,0,0,0x16,0x18,0,
    129 0,0x16,0x18,0,0,0x16,0x18,0,0,0x16,0x18,0,0,0,0x18,0,
    130 0,0,0x19,0,0,0x16,0x18,0,0,0x1a,0x18,0,0,0,0x1b,0,
    131 0,0x1c,0x1d,0,0,0x1e,0x1d,0,0x1e,0x1f,0,0x20,0x21,0,0x22,0,
    132 0,0x23,0,0,0x18,0,0,0,0,0,0,0,0,0,0,0,
    133 0,0,0,0,0,0,0,0,0,0,0x24,0,0,0,0,0,
    134 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    135 0,0,0,0,0,0,0,0,0x25,0x25,0,0,0,0,0x26,0,
    136 0,0,0,0,0,0x27,0,0,0,0x13,0,0,0,0,0,0,
    137 0x28,0,0,0x29,0,0x2a,0,0,0,0x25,0x2b,0x10,0,0x2c,0,0x2d,
    138 0,0x2e,0,0,0,0,0x2f,0x30,0,0,0,0,0,0,1,0x31,
    139 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    140 0,0,0,0,0,0,0x32,0x33,0,0,0,0,0,0,0,0,
    141 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    142 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    143 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    144 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    145 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    146 0,0,0,0,0,0,0,0x34,0,0,0,0x35,0,0,0,1,
    147 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    148 0,0x36,0,0,0x37,0,0,0,0,0,0,0,0,0,0,0,
    149 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    150 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    151 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    152 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    153 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    154 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    155 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    156 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    157 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    158 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    159 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    160 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    161 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    162 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    163 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    164 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    165 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    166 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    167 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    168 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    169 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    170 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    171 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    172 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    173 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    174 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    175 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    176 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    177 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    178 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    179 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    180 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    181 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    182 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    183 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    184 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    185 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    186 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    187 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    188 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    189 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    190 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    191 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    192 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    193 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    194 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    195 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    196 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    197 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    198 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    199 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    200 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    201 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    202 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    203 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    204 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    205 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    206 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    207 0,0,0,0x38,0x39,0,0,0x3a,0,0,0,0,0,0,0,0,
    208 0x22,0,0,0,0,0,0x2b,0x3b,0,0x3c,0x3d,0,0,0x3d,0x3e,0,
    209 0,0,0,0,0,0x3f,0x40,0x41,0,0,0,0,0,0,0,0x18,
    210 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    211 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    212 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    213 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    214 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    215 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    216 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    217 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    218 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    219 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    220 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    221 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    222 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    223 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    224 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    225 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    226 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    227 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    228 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    229 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    230 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    231 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    232 0x42,0x43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    233 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    234 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    235 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    236 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    237 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    238 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    239 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    240 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    241 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    242 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    243 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    244 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    245 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    246 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    247 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    248 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    249 0,0,0,0,0,0,0,0,0x44,0,0,0,0,0,0,0,
    250 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    251 0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    252 };
    253 
    254     private static final byte[] tcccIndex={
    255 0,0,0,0,0,0,2,3,4,5,6,7,0,8,9,0xa,
    256 0xb,0xc,0,0,0,0,0,0,1,1,0xd,0xe,0xf,0x10,0x11,0,
    257 0x12,0x13,0x14,0x15,0x16,0,0x17,0x18,0,0,0,0,0x19,0x1a,0x1b,0,
    258 0x1c,0x1d,0x1e,0x1f,0,0,0x20,0x21,0x22,0x23,0x24,0,0,0,0,0x25,
    259 0x26,0x27,0x28,0,0,0,0x29,0x2a,0,0x2b,0x2c,0,0,0x2d,0x2e,0,
    260 0,0x2f,0x30,0,0,0x2d,0x31,0,0,0x2d,0x32,0,0,0,0x31,0,
    261 0,0,0x33,0,0,0x2d,0x31,0,0,0x34,0x31,0,0,0,0x35,0,
    262 0,0x36,0x37,0,0,0x38,0x37,0,0x38,0x39,0,0x3a,0x3b,0,0x3c,0,
    263 0,0x3d,0,0,0x31,0,0,0,0,0,0,0,0,0,0,0,
    264 0,0,0,0,0,0,0,0,0,0,0x3e,0,0,0,0,0,
    265 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    266 0,0,0,0,0,0,0,0,0x3f,0x3f,0,0,0,0,0x40,0,
    267 0,0,0,0,0,0x41,0,0,0,0x28,0,0,0,0,0,0,
    268 0x42,0,0,0x43,0,0x44,0,0,0,0x3f,0x45,0x25,0,0x46,0,0x47,
    269 0,0x48,0,0,0,0,0x49,0x4a,0,0,0,0,0,0,1,0x4b,
    270 1,1,1,1,0x4c,1,1,0x4d,0x4e,1,0x4f,0x50,1,0x51,0x52,0x53,
    271 0,0,0,0,0,0,0x54,0x55,0,0x56,0,0,0x57,0x58,0x59,0,
    272 0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0,0x60,0,0,0,0,0,0,0,0,
    273 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    274 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    275 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    276 0,0,0,0,0,0,0x2d,0,0,0,0,0,0,0,0,0,
    277 0,0,0,0,0,0,0,0x61,0,0,0,0x62,0,0,0,1,
    278 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    279 0,0x63,0x64,0x65,0x66,0x64,0x65,0x67,0,0,0,0,0,0,0,0,
    280 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    281 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    282 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    283 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    284 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    285 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    286 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    287 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    288 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    289 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    290 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    291 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    292 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    293 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    294 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    295 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    296 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    297 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    298 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    299 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    300 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    301 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    302 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    303 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    304 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    305 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    306 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    307 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    308 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    309 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    310 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    311 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    312 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    313 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    314 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    315 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    316 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    317 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    318 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    319 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    320 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    321 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    322 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    323 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    324 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    325 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    326 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    327 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    328 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    329 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    330 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    331 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    332 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    333 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    334 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    335 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    336 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    337 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    338 0,0,0,0x68,0x69,0,0,0x6a,0,0,0,0,0,0,0,0,
    339 0x3c,0,0,0,0,0,0x45,0x6b,0,0x6c,0x6d,0,0,0x6d,0x6e,0,
    340 0,0,0,0,0,0x6f,0x70,0x71,0,0,0,0,0,0,0,0x31,
    341 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    342 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    343 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    344 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    345 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    346 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    347 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    348 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    349 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    350 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    351 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    352 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    353 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    354 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    355 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    356 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    357 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    358 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    359 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    360 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    361 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    362 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    363 0x72,0x73,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    364 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    365 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    366 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    367 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    368 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    369 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    370 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    371 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    372 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    373 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    374 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    375 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    376 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    377 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    378 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    379 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    380 0,0,0,0,0,0,0,0,0x3e,0x74,0x75,0,0,0,0,0,
    381 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    382 0,0xe,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    383 };
    384 
    385     private static final int[] lcccBits={
    386 0,0xffffffff,0xffff7fff,0xffff,0xf8,0xfffe0000,0xbfffffff,0xb6,0x7ff0000,0xfffff800,0x10000,0x9fc00000,0x3d9f,0x20000,0xffff0000,0x7ff,
    387 0xff800,0xfbc00000,0x3eef,0xe000000,0xfff00000,0xfffffffb,0x10000000,0x1e2000,0x2000,0x602000,0x18000000,0x400,0x7000000,0xf00,0x3000000,0x2a00000,
    388 0x3c3e0000,0xdf,0x40,0x6800000,0xe0000000,0x100000,0x20040000,0x200,0x1800000,0x9fe00001,0x3fff0000,0x10,0xc00,0xc0040,0x800000,0xfff70000,
    389 0x31021fd,0xfbffffff,0x1fff0000,0x1ffe2,0x38000,0x80000000,0xfc00,0x6000000,0x3ff08000,0xc0000000,0x30000,0x3ffff,0x3800,0x80000,1,0xc19d0000,
    390 2,0x400000,0x40000f5,0x5108000,0x40000000
    391 };
    392     private static final int[] tcccBits={
    393 0,0xffffffff,0x3e7effbf,0xbe7effbf,0xfffcffff,0x7ef1ff3f,0xfff3f1f8,0x7fffff3f,0x18003,0xdfffe000,0xff31ffcf,0xcfffffff,0xfffc0,0xffff7fff,0xffff,0x1d760,
    394 0x1fc00,0x187c00,0x200708b,0x2000000,0x708b0000,0xc00000,0xf8,0xfccf0006,0x33ffcfc,0xfffe0000,0xbfffffff,0xb6,0x7ff0000,0x7c,0xfffff800,0x10000,
    395 0x9fc80005,0x3d9f,0x20000,0xffff0000,0x7ff,0xff800,0xfbc00000,0x3eef,0xe000000,0xfff00000,0xfffffffb,0x10120200,0xff1e2000,0x10000000,0xb0002000,0x10480000,
    396 0x4e002000,0x2000,0x30002000,0x602100,0x18000000,0x24000400,0x7000000,0xf00,0x3000000,0x2a00000,0x3d7e0000,0xdf,0x40,0x6800000,0xe0000000,0x100000,
    397 0x20040000,0x200,0x1800000,0x9fe00001,0x3fff0000,0x10,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd,0xfbffffff,0xbffffff,0x3ffffff,0x3f3fffff,0xaaff3f3f,
    398 0x3fffffff,0x1fdfffff,0xefcfffde,0x1fdc7fff,0x1fff0000,0x1ffe2,0x800,0xc000000,0x4000,0xe000,0x1210,0x50,0x292,0x333e005,0x333,0xf000,
    399 0x3c0f,0x38000,0x80000000,0xfc00,0x55555000,0x36db02a5,0x46100000,0x47900000,0x3ff08000,0xc0000000,0x30000,0x3ffff,0x3800,0x80000,1,0xc19d0000,
    400 2,0x400000,0x40000f5,0x5108000,0x5f7ffc00,0x7fdb
    401 };
    402 
    403 }
    404