1 /*
    2  * Copyright (c) 2002, 2024, Oracle and/or its affiliates. All rights reserved.
    3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    4  *
    5  * This code is free software; you can redistribute it and/or modify it
    6  * under the terms of the GNU General Public License version 2 only, as
    7  * published by the Free Software Foundation.  Oracle designates this
    8  * particular file as subject to the "Classpath" exception as provided
    9  * by Oracle in the LICENSE file that accompanied this code.
   10  *
   11  * This code is distributed in the hope that it will be useful, but WITHOUT
   12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   14  * version 2 for more details (a copy is included in the LICENSE file that
   15  * accompanied this code).
   16  *
   17  * You should have received a copy of the GNU General Public License version
   18  * 2 along with this work; if not, write to the Free Software Foundation,
   19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   20  *
   21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   22  * or visit www.oracle.com if you need additional information or have any
   23  * questions.
   24  */
   25 
   26 package java.lang;
   27 
   28 import jdk.internal.misc.CDS;
   29 import jdk.internal.vm.annotation.IntrinsicCandidate;
   30 import jdk.internal.vm.annotation.Stable;
   31 
   32 import java.lang.constant.Constable;
   33 import java.lang.constant.DynamicConstantDesc;
   34 import java.util.Arrays;
   35 import java.util.HashMap;
   36 import java.util.Locale;
   37 import java.util.Map;
   38 import java.util.Objects;
   39 import java.util.Optional;
   40 
   41 import static java.lang.constant.ConstantDescs.BSM_EXPLICIT_CAST;
   42 import static java.lang.constant.ConstantDescs.CD_char;
   43 import static java.lang.constant.ConstantDescs.DEFAULT_NAME;
   44 
   45 /**
   46  * The {@code Character} class is the {@linkplain
   47  * java.lang##wrapperClass wrapper class} for values of the primitive
   48  * type {@code char}. An object of type {@code Character} contains a
   49  * single field whose type is {@code char}.
   50  *
   51  * <p>In addition, this class provides a large number of static methods for
   52  * determining a character's category (lowercase letter, digit, etc.)
   53  * and for converting characters from uppercase to lowercase and vice
   54  * versa.
   55  *
   56  * <h2><a id="conformance">Unicode Conformance</a></h2>
   57  * <p>
   58  * The fields and methods of class {@code Character} are defined in terms
   59  * of character information from the Unicode Standard, specifically the
   60  * <i>UnicodeData</i> file that is part of the Unicode Character Database.
   61  * This file specifies properties including name and category for every
   62  * assigned Unicode code point or character range. The file is available
   63  * from the Unicode Consortium at
   64  * <a href="http://www.unicode.org">http://www.unicode.org</a>.
   65  * <p>
   66  * Character information is based on the Unicode Standard, version 15.1.
   67  * <p>
   68  * The Java platform has supported different versions of the Unicode
   69  * Standard over time. Upgrades to newer versions of the Unicode Standard
   70  * occurred in the following Java releases, each indicating the new version:
   71  * <table class="striped">
   72  * <caption style="display:none">Shows Java releases and supported Unicode versions</caption>
   73  * <thead>
   74  * <tr><th scope="col">Java release</th>
   75  *     <th scope="col">Unicode version</th></tr>
   76  * </thead>
   77  * <tbody>
   78  * <tr><th scope="row" style="text-align:left">Java SE 22</th>
   79  *     <td>Unicode 15.1</td></tr>
   80  * <tr><th scope="row" style="text-align:left">Java SE 20</th>
   81  *     <td>Unicode 15.0</td></tr>
   82  * <tr><th scope="row" style="text-align:left">Java SE 19</th>
   83  *     <td>Unicode 14.0</td></tr>
   84  * <tr><th scope="row" style="text-align:left">Java SE 15</th>
   85  *     <td>Unicode 13.0</td></tr>
   86  * <tr><th scope="row" style="text-align:left">Java SE 13</th>
   87  *     <td>Unicode 12.1</td></tr>
   88  * <tr><th scope="row" style="text-align:left">Java SE 12</th>
   89  *     <td>Unicode 11.0</td></tr>
   90  * <tr><th scope="row" style="text-align:left">Java SE 11</th>
   91  *     <td>Unicode 10.0</td></tr>
   92  * <tr><th scope="row" style="text-align:left">Java SE 9</th>
   93  *     <td>Unicode 8.0</td></tr>
   94  * <tr><th scope="row" style="text-align:left">Java SE 8</th>
   95  *     <td>Unicode 6.2</td></tr>
   96  * <tr><th scope="row" style="text-align:left">Java SE 7</th>
   97  *     <td>Unicode 6.0</td></tr>
   98  * <tr><th scope="row" style="text-align:left">Java SE 5.0</th>
   99  *     <td>Unicode 4.0</td></tr>
  100  * <tr><th scope="row" style="text-align:left">Java SE 1.4</th>
  101  *     <td>Unicode 3.0</td></tr>
  102  * <tr><th scope="row" style="text-align:left">JDK 1.1</th>
  103  *     <td>Unicode 2.0</td></tr>
  104  * <tr><th scope="row" style="text-align:left">JDK 1.0.2</th>
  105  *     <td>Unicode 1.1.5</td></tr>
  106  * </tbody>
  107  * </table>
  108  * Variations from these base Unicode versions, such as recognized appendixes,
  109  * are documented elsewhere.
  110  * <h2><a id="unicode">Unicode Character Representations</a></h2>
  111  *
  112  * <p>The {@code char} data type (and therefore the value that a
  113  * {@code Character} object encapsulates) are based on the
  114  * original Unicode specification, which defined characters as
  115  * fixed-width 16-bit entities. The Unicode Standard has since been
  116  * changed to allow for characters whose representation requires more
  117  * than 16 bits.  The range of legal <em>code point</em>s is now
  118  * U+0000 to U+10FFFF, known as <em>Unicode scalar value</em>.
  119  * (Refer to the <a
  120  * href="http://www.unicode.org/reports/tr27/#notation"><i>
  121  * definition</i></a> of the U+<i>n</i> notation in the Unicode
  122  * Standard.)
  123  *
  124  * <p><a id="BMP">The set of characters from U+0000 to U+FFFF</a> is
  125  * sometimes referred to as the <em>Basic Multilingual Plane (BMP)</em>.
  126  * <a id="supplementary">Characters</a> whose code points are greater
  127  * than U+FFFF are called <em>supplementary character</em>s.  The Java
  128  * platform uses the UTF-16 representation in {@code char} arrays and
  129  * in the {@code String} and {@code StringBuffer} classes. In
  130  * this representation, supplementary characters are represented as a pair
  131  * of {@code char} values, the first from the <em>high-surrogates</em>
  132  * range, (&#92;uD800-&#92;uDBFF), the second from the
  133  * <em>low-surrogates</em> range (&#92;uDC00-&#92;uDFFF).
  134  *
  135  * <p>A {@code char} value, therefore, represents Basic
  136  * Multilingual Plane (BMP) code points, including the surrogate
  137  * code points, or code units of the UTF-16 encoding. An
  138  * {@code int} value represents all Unicode code points,
  139  * including supplementary code points. The lower (least significant)
  140  * 21 bits of {@code int} are used to represent Unicode code
  141  * points and the upper (most significant) 11 bits must be zero.
  142  * Unless otherwise specified, the behavior with respect to
  143  * supplementary characters and surrogate {@code char} values is
  144  * as follows:
  145  *
  146  * <ul>
  147  * <li>The methods that only accept a {@code char} value cannot support
  148  * supplementary characters. They treat {@code char} values from the
  149  * surrogate ranges as undefined characters. For example,
  150  * {@code Character.isLetter('\u005CuD840')} returns {@code false}, even though
  151  * this specific value if followed by any low-surrogate value in a string
  152  * would represent a letter.
  153  *
  154  * <li>The methods that accept an {@code int} value support all
  155  * Unicode characters, including supplementary characters. For
  156  * example, {@code Character.isLetter(0x2F81A)} returns
  157  * {@code true} because the code point value represents a letter
  158  * (a CJK ideograph).
  159  * </ul>
  160  *
  161  * <p>In the Java SE API documentation, <em>Unicode code point</em> is
  162  * used for character values in the range between U+0000 and U+10FFFF,
  163  * and <em>Unicode code unit</em> is used for 16-bit
  164  * {@code char} values that are code units of the <em>UTF-16</em>
  165  * encoding. For more information on Unicode terminology, refer to the
  166  * <a href="http://www.unicode.org/glossary/">Unicode Glossary</a>.
  167  *
  168  * <p>This is a <a href="{@docRoot}/java.base/java/lang/doc-files/ValueBased.html">value-based</a>
  169  * class; programmers should treat instances that are
  170  * {@linkplain #equals(Object) equal} as interchangeable and should not
  171  * use instances for synchronization, or unpredictable behavior may
  172  * occur. For example, in a future release, synchronization may fail.
  173  *
  174  * @spec https://www.unicode.org/reports/tr27 Unicode 3.1.0
  175  * @author  Lee Boynton
  176  * @author  Guy Steele
  177  * @author  Akira Tanaka
  178  * @author  Martin Buchholz
  179  * @author  Ulf Zibis
  180  * @since   1.0
  181  */
  182 @jdk.internal.ValueBased
  183 public final
  184 class Character implements java.io.Serializable, Comparable<Character>, Constable {
  185     /**
  186      * The minimum radix available for conversion to and from strings.
  187      * The constant value of this field is the smallest value permitted
  188      * for the radix argument in radix-conversion methods such as the
  189      * {@code digit} method, the {@code forDigit} method, and the
  190      * {@code toString} method of class {@code Integer}.
  191      *
  192      * @see     Character#digit(char, int)
  193      * @see     Character#forDigit(int, int)
  194      * @see     Integer#toString(int, int)
  195      * @see     Integer#valueOf(String)
  196      */
  197     public static final int MIN_RADIX = 2;
  198 
  199     /**
  200      * The maximum radix available for conversion to and from strings.
  201      * The constant value of this field is the largest value permitted
  202      * for the radix argument in radix-conversion methods such as the
  203      * {@code digit} method, the {@code forDigit} method, and the
  204      * {@code toString} method of class {@code Integer}.
  205      *
  206      * @see     Character#digit(char, int)
  207      * @see     Character#forDigit(int, int)
  208      * @see     Integer#toString(int, int)
  209      * @see     Integer#valueOf(String)
  210      */
  211     public static final int MAX_RADIX = 36;
  212 
  213     /**
  214      * The constant value of this field is the smallest value of type
  215      * {@code char}, {@code '\u005Cu0000'}.
  216      *
  217      * @since   1.0.2
  218      */
  219     public static final char MIN_VALUE = '\u0000';
  220 
  221     /**
  222      * The constant value of this field is the largest value of type
  223      * {@code char}, {@code '\u005CuFFFF'}.
  224      *
  225      * @since   1.0.2
  226      */
  227     public static final char MAX_VALUE = '\uFFFF';
  228 
  229     /**
  230      * The {@code Class} instance representing the primitive type
  231      * {@code char}.
  232      *
  233      * @since   1.1
  234      */
  235     @SuppressWarnings("unchecked")
  236     public static final Class<Character> TYPE = (Class<Character>) Class.getPrimitiveClass("char");
  237 
  238     /*
  239      * Normative general types
  240      */
  241 
  242     /*
  243      * General character types
  244      */
  245 
  246     /**
  247      * General category "Cn" in the Unicode specification.
  248      * @since   1.1
  249      */
  250     public static final byte UNASSIGNED = 0;
  251 
  252     /**
  253      * General category "Lu" in the Unicode specification.
  254      * @since   1.1
  255      */
  256     public static final byte UPPERCASE_LETTER = 1;
  257 
  258     /**
  259      * General category "Ll" in the Unicode specification.
  260      * @since   1.1
  261      */
  262     public static final byte LOWERCASE_LETTER = 2;
  263 
  264     /**
  265      * General category "Lt" in the Unicode specification.
  266      * @since   1.1
  267      */
  268     public static final byte TITLECASE_LETTER = 3;
  269 
  270     /**
  271      * General category "Lm" in the Unicode specification.
  272      * @since   1.1
  273      */
  274     public static final byte MODIFIER_LETTER = 4;
  275 
  276     /**
  277      * General category "Lo" in the Unicode specification.
  278      * @since   1.1
  279      */
  280     public static final byte OTHER_LETTER = 5;
  281 
  282     /**
  283      * General category "Mn" in the Unicode specification.
  284      * @since   1.1
  285      */
  286     public static final byte NON_SPACING_MARK = 6;
  287 
  288     /**
  289      * General category "Me" in the Unicode specification.
  290      * @since   1.1
  291      */
  292     public static final byte ENCLOSING_MARK = 7;
  293 
  294     /**
  295      * General category "Mc" in the Unicode specification.
  296      * @since   1.1
  297      */
  298     public static final byte COMBINING_SPACING_MARK = 8;
  299 
  300     /**
  301      * General category "Nd" in the Unicode specification.
  302      * @since   1.1
  303      */
  304     public static final byte DECIMAL_DIGIT_NUMBER = 9;
  305 
  306     /**
  307      * General category "Nl" in the Unicode specification.
  308      * @since   1.1
  309      */
  310     public static final byte LETTER_NUMBER = 10;
  311 
  312     /**
  313      * General category "No" in the Unicode specification.
  314      * @since   1.1
  315      */
  316     public static final byte OTHER_NUMBER = 11;
  317 
  318     /**
  319      * General category "Zs" in the Unicode specification.
  320      * @since   1.1
  321      */
  322     public static final byte SPACE_SEPARATOR = 12;
  323 
  324     /**
  325      * General category "Zl" in the Unicode specification.
  326      * @since   1.1
  327      */
  328     public static final byte LINE_SEPARATOR = 13;
  329 
  330     /**
  331      * General category "Zp" in the Unicode specification.
  332      * @since   1.1
  333      */
  334     public static final byte PARAGRAPH_SEPARATOR = 14;
  335 
  336     /**
  337      * General category "Cc" in the Unicode specification.
  338      * @since   1.1
  339      */
  340     public static final byte CONTROL = 15;
  341 
  342     /**
  343      * General category "Cf" in the Unicode specification.
  344      * @since   1.1
  345      */
  346     public static final byte FORMAT = 16;
  347 
  348     /**
  349      * General category "Co" in the Unicode specification.
  350      * @since   1.1
  351      */
  352     public static final byte PRIVATE_USE = 18;
  353 
  354     /**
  355      * General category "Cs" in the Unicode specification.
  356      * @since   1.1
  357      */
  358     public static final byte SURROGATE = 19;
  359 
  360     /**
  361      * General category "Pd" in the Unicode specification.
  362      * @since   1.1
  363      */
  364     public static final byte DASH_PUNCTUATION = 20;
  365 
  366     /**
  367      * General category "Ps" in the Unicode specification.
  368      * @since   1.1
  369      */
  370     public static final byte START_PUNCTUATION = 21;
  371 
  372     /**
  373      * General category "Pe" in the Unicode specification.
  374      * @since   1.1
  375      */
  376     public static final byte END_PUNCTUATION = 22;
  377 
  378     /**
  379      * General category "Pc" in the Unicode specification.
  380      * @since   1.1
  381      */
  382     public static final byte CONNECTOR_PUNCTUATION = 23;
  383 
  384     /**
  385      * General category "Po" in the Unicode specification.
  386      * @since   1.1
  387      */
  388     public static final byte OTHER_PUNCTUATION = 24;
  389 
  390     /**
  391      * General category "Sm" in the Unicode specification.
  392      * @since   1.1
  393      */
  394     public static final byte MATH_SYMBOL = 25;
  395 
  396     /**
  397      * General category "Sc" in the Unicode specification.
  398      * @since   1.1
  399      */
  400     public static final byte CURRENCY_SYMBOL = 26;
  401 
  402     /**
  403      * General category "Sk" in the Unicode specification.
  404      * @since   1.1
  405      */
  406     public static final byte MODIFIER_SYMBOL = 27;
  407 
  408     /**
  409      * General category "So" in the Unicode specification.
  410      * @since   1.1
  411      */
  412     public static final byte OTHER_SYMBOL = 28;
  413 
  414     /**
  415      * General category "Pi" in the Unicode specification.
  416      * @since   1.4
  417      */
  418     public static final byte INITIAL_QUOTE_PUNCTUATION = 29;
  419 
  420     /**
  421      * General category "Pf" in the Unicode specification.
  422      * @since   1.4
  423      */
  424     public static final byte FINAL_QUOTE_PUNCTUATION = 30;
  425 
  426     /**
  427      * Error flag. Use int (code point) to avoid confusion with U+FFFF.
  428      */
  429     static final int ERROR = 0xFFFFFFFF;
  430 
  431 
  432     /**
  433      * Undefined bidirectional character type. Undefined {@code char}
  434      * values have undefined directionality in the Unicode specification.
  435      * @since 1.4
  436      */
  437     public static final byte DIRECTIONALITY_UNDEFINED = -1;
  438 
  439     /**
  440      * Strong bidirectional character type "L" in the Unicode specification.
  441      * @since 1.4
  442      */
  443     public static final byte DIRECTIONALITY_LEFT_TO_RIGHT = 0;
  444 
  445     /**
  446      * Strong bidirectional character type "R" in the Unicode specification.
  447      * @since 1.4
  448      */
  449     public static final byte DIRECTIONALITY_RIGHT_TO_LEFT = 1;
  450 
  451     /**
  452      * Strong bidirectional character type "AL" in the Unicode specification.
  453      * @since 1.4
  454      */
  455     public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC = 2;
  456 
  457     /**
  458      * Weak bidirectional character type "EN" in the Unicode specification.
  459      * @since 1.4
  460      */
  461     public static final byte DIRECTIONALITY_EUROPEAN_NUMBER = 3;
  462 
  463     /**
  464      * Weak bidirectional character type "ES" in the Unicode specification.
  465      * @since 1.4
  466      */
  467     public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR = 4;
  468 
  469     /**
  470      * Weak bidirectional character type "ET" in the Unicode specification.
  471      * @since 1.4
  472      */
  473     public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR = 5;
  474 
  475     /**
  476      * Weak bidirectional character type "AN" in the Unicode specification.
  477      * @since 1.4
  478      */
  479     public static final byte DIRECTIONALITY_ARABIC_NUMBER = 6;
  480 
  481     /**
  482      * Weak bidirectional character type "CS" in the Unicode specification.
  483      * @since 1.4
  484      */
  485     public static final byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR = 7;
  486 
  487     /**
  488      * Weak bidirectional character type "NSM" in the Unicode specification.
  489      * @since 1.4
  490      */
  491     public static final byte DIRECTIONALITY_NONSPACING_MARK = 8;
  492 
  493     /**
  494      * Weak bidirectional character type "BN" in the Unicode specification.
  495      * @since 1.4
  496      */
  497     public static final byte DIRECTIONALITY_BOUNDARY_NEUTRAL = 9;
  498 
  499     /**
  500      * Neutral bidirectional character type "B" in the Unicode specification.
  501      * @since 1.4
  502      */
  503     public static final byte DIRECTIONALITY_PARAGRAPH_SEPARATOR = 10;
  504 
  505     /**
  506      * Neutral bidirectional character type "S" in the Unicode specification.
  507      * @since 1.4
  508      */
  509     public static final byte DIRECTIONALITY_SEGMENT_SEPARATOR = 11;
  510 
  511     /**
  512      * Neutral bidirectional character type "WS" in the Unicode specification.
  513      * @since 1.4
  514      */
  515     public static final byte DIRECTIONALITY_WHITESPACE = 12;
  516 
  517     /**
  518      * Neutral bidirectional character type "ON" in the Unicode specification.
  519      * @since 1.4
  520      */
  521     public static final byte DIRECTIONALITY_OTHER_NEUTRALS = 13;
  522 
  523     /**
  524      * Strong bidirectional character type "LRE" in the Unicode specification.
  525      * @since 1.4
  526      */
  527     public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING = 14;
  528 
  529     /**
  530      * Strong bidirectional character type "LRO" in the Unicode specification.
  531      * @since 1.4
  532      */
  533     public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE = 15;
  534 
  535     /**
  536      * Strong bidirectional character type "RLE" in the Unicode specification.
  537      * @since 1.4
  538      */
  539     public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING = 16;
  540 
  541     /**
  542      * Strong bidirectional character type "RLO" in the Unicode specification.
  543      * @since 1.4
  544      */
  545     public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE = 17;
  546 
  547     /**
  548      * Weak bidirectional character type "PDF" in the Unicode specification.
  549      * @since 1.4
  550      */
  551     public static final byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT = 18;
  552 
  553     /**
  554      * Weak bidirectional character type "LRI" in the Unicode specification.
  555      * @since 9
  556      */
  557     public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_ISOLATE = 19;
  558 
  559     /**
  560      * Weak bidirectional character type "RLI" in the Unicode specification.
  561      * @since 9
  562      */
  563     public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ISOLATE = 20;
  564 
  565     /**
  566      * Weak bidirectional character type "FSI" in the Unicode specification.
  567      * @since 9
  568      */
  569     public static final byte DIRECTIONALITY_FIRST_STRONG_ISOLATE = 21;
  570 
  571     /**
  572      * Weak bidirectional character type "PDI" in the Unicode specification.
  573      * @since 9
  574      */
  575     public static final byte DIRECTIONALITY_POP_DIRECTIONAL_ISOLATE = 22;
  576 
  577     /**
  578      * The minimum value of a
  579      * <a href="http://www.unicode.org/glossary/#high_surrogate_code_unit">
  580      * Unicode high-surrogate code unit</a>
  581      * in the UTF-16 encoding, constant {@code '\u005CuD800'}.
  582      * A high-surrogate is also known as a <i>leading-surrogate</i>.
  583      *
  584      * @since 1.5
  585      */
  586     public static final char MIN_HIGH_SURROGATE = '\uD800';
  587 
  588     /**
  589      * The maximum value of a
  590      * <a href="http://www.unicode.org/glossary/#high_surrogate_code_unit">
  591      * Unicode high-surrogate code unit</a>
  592      * in the UTF-16 encoding, constant {@code '\u005CuDBFF'}.
  593      * A high-surrogate is also known as a <i>leading-surrogate</i>.
  594      *
  595      * @since 1.5
  596      */
  597     public static final char MAX_HIGH_SURROGATE = '\uDBFF';
  598 
  599     /**
  600      * The minimum value of a
  601      * <a href="http://www.unicode.org/glossary/#low_surrogate_code_unit">
  602      * Unicode low-surrogate code unit</a>
  603      * in the UTF-16 encoding, constant {@code '\u005CuDC00'}.
  604      * A low-surrogate is also known as a <i>trailing-surrogate</i>.
  605      *
  606      * @since 1.5
  607      */
  608     public static final char MIN_LOW_SURROGATE  = '\uDC00';
  609 
  610     /**
  611      * The maximum value of a
  612      * <a href="http://www.unicode.org/glossary/#low_surrogate_code_unit">
  613      * Unicode low-surrogate code unit</a>
  614      * in the UTF-16 encoding, constant {@code '\u005CuDFFF'}.
  615      * A low-surrogate is also known as a <i>trailing-surrogate</i>.
  616      *
  617      * @since 1.5
  618      */
  619     public static final char MAX_LOW_SURROGATE  = '\uDFFF';
  620 
  621     /**
  622      * The minimum value of a Unicode surrogate code unit in the
  623      * UTF-16 encoding, constant {@code '\u005CuD800'}.
  624      *
  625      * @since 1.5
  626      */
  627     public static final char MIN_SURROGATE = MIN_HIGH_SURROGATE;
  628 
  629     /**
  630      * The maximum value of a Unicode surrogate code unit in the
  631      * UTF-16 encoding, constant {@code '\u005CuDFFF'}.
  632      *
  633      * @since 1.5
  634      */
  635     public static final char MAX_SURROGATE = MAX_LOW_SURROGATE;
  636 
  637     /**
  638      * The minimum value of a
  639      * <a href="http://www.unicode.org/glossary/#supplementary_code_point">
  640      * Unicode supplementary code point</a>, constant {@code U+10000}.
  641      *
  642      * @since 1.5
  643      */
  644     public static final int MIN_SUPPLEMENTARY_CODE_POINT = 0x010000;
  645 
  646     /**
  647      * The minimum value of a
  648      * <a href="http://www.unicode.org/glossary/#code_point">
  649      * Unicode code point</a>, constant {@code U+0000}.
  650      *
  651      * @since 1.5
  652      */
  653     public static final int MIN_CODE_POINT = 0x000000;
  654 
  655     /**
  656      * The maximum value of a
  657      * <a href="http://www.unicode.org/glossary/#code_point">
  658      * Unicode code point</a>, constant {@code U+10FFFF}.
  659      *
  660      * @since 1.5
  661      */
  662     public static final int MAX_CODE_POINT = 0X10FFFF;
  663 
  664     /**
  665      * Returns an {@link Optional} containing the nominal descriptor for this
  666      * instance.
  667      *
  668      * @return an {@link Optional} describing the {@linkplain Character} instance
  669      * @since 15
  670      */
  671     @Override
  672     public Optional<DynamicConstantDesc<Character>> describeConstable() {
  673         return Optional.of(DynamicConstantDesc.ofNamed(BSM_EXPLICIT_CAST, DEFAULT_NAME, CD_char, (int) value));
  674     }
  675 
  676     /**
  677      * Instances of this class represent particular subsets of the Unicode
  678      * character set.  The only family of subsets defined in the
  679      * {@code Character} class is {@link Character.UnicodeBlock}.
  680      * Other portions of the Java API may define other subsets for their
  681      * own purposes.
  682      *
  683      * @since 1.2
  684      */
  685     public static class Subset  {
  686 
  687         private String name;
  688 
  689         /**
  690          * Constructs a new {@code Subset} instance.
  691          *
  692          * @param  name  The name of this subset
  693          * @throws NullPointerException if name is {@code null}
  694          */
  695         protected Subset(String name) {
  696             if (name == null) {
  697                 throw new NullPointerException("name");
  698             }
  699             this.name = name;
  700         }
  701 
  702         /**
  703          * Compares two {@code Subset} objects for equality.
  704          * This method returns {@code true} if and only if
  705          * {@code this} and the argument refer to the same
  706          * object; since this method is {@code final}, this
  707          * guarantee holds for all subclasses.
  708          */
  709         public final boolean equals(Object obj) {
  710             return (this == obj);
  711         }
  712 
  713         /**
  714          * Returns the standard hash code as defined by the
  715          * {@link Object#hashCode} method.  This method
  716          * is {@code final} in order to ensure that the
  717          * {@code equals} and {@code hashCode} methods will
  718          * be consistent in all subclasses.
  719          */
  720         public final int hashCode() {
  721             return super.hashCode();
  722         }
  723 
  724         /**
  725          * Returns the name of this subset.
  726          */
  727         public final String toString() {
  728             return name;
  729         }
  730     }
  731 
  732     // See http://www.unicode.org/Public/UNIDATA/Blocks.txt
  733     // for the latest specification of Unicode Blocks.
  734 
  735     /**
  736      * A family of character subsets representing the character blocks in the
  737      * Unicode specification. Character blocks generally define characters
  738      * used for a specific script or purpose. A character is contained by
  739      * at most one Unicode block.
  740      *
  741      * @since 1.2
  742      */
  743     public static final class UnicodeBlock extends Subset {
  744         /**
  745          * NUM_ENTITIES should match the total number of UnicodeBlocks.
  746          * It should be adjusted whenever the Unicode Character Database
  747          * is upgraded.
  748          */
  749         private static final int NUM_ENTITIES = 759;
  750         private static Map<String, UnicodeBlock> map = HashMap.newHashMap(NUM_ENTITIES);
  751 
  752         /**
  753          * Creates a UnicodeBlock with the given identifier name.
  754          * This name must be the same as the block identifier.
  755          */
  756         private UnicodeBlock(String idName) {
  757             super(idName);
  758             map.put(idName, this);
  759         }
  760 
  761         /**
  762          * Creates a UnicodeBlock with the given identifier name and
  763          * alias name.
  764          */
  765         private UnicodeBlock(String idName, String alias) {
  766             this(idName);
  767             map.put(alias, this);
  768         }
  769 
  770         /**
  771          * Creates a UnicodeBlock with the given identifier name and
  772          * alias names.
  773          */
  774         private UnicodeBlock(String idName, String... aliases) {
  775             this(idName);
  776             for (String alias : aliases)
  777                 map.put(alias, this);
  778         }
  779 
  780         /**
  781          * Constant for the "Basic Latin" Unicode character block.
  782          * @since 1.2
  783          */
  784         public static final UnicodeBlock  BASIC_LATIN =
  785             new UnicodeBlock("BASIC_LATIN",
  786                              "BASIC LATIN",
  787                              "BASICLATIN");
  788 
  789         /**
  790          * Constant for the "Latin-1 Supplement" Unicode character block.
  791          * @since 1.2
  792          */
  793         public static final UnicodeBlock LATIN_1_SUPPLEMENT =
  794             new UnicodeBlock("LATIN_1_SUPPLEMENT",
  795                              "LATIN-1 SUPPLEMENT",
  796                              "LATIN-1SUPPLEMENT");
  797 
  798         /**
  799          * Constant for the "Latin Extended-A" Unicode character block.
  800          * @since 1.2
  801          */
  802         public static final UnicodeBlock LATIN_EXTENDED_A =
  803             new UnicodeBlock("LATIN_EXTENDED_A",
  804                              "LATIN EXTENDED-A",
  805                              "LATINEXTENDED-A");
  806 
  807         /**
  808          * Constant for the "Latin Extended-B" Unicode character block.
  809          * @since 1.2
  810          */
  811         public static final UnicodeBlock LATIN_EXTENDED_B =
  812             new UnicodeBlock("LATIN_EXTENDED_B",
  813                              "LATIN EXTENDED-B",
  814                              "LATINEXTENDED-B");
  815 
  816         /**
  817          * Constant for the "IPA Extensions" Unicode character block.
  818          * @since 1.2
  819          */
  820         public static final UnicodeBlock IPA_EXTENSIONS =
  821             new UnicodeBlock("IPA_EXTENSIONS",
  822                              "IPA EXTENSIONS",
  823                              "IPAEXTENSIONS");
  824 
  825         /**
  826          * Constant for the "Spacing Modifier Letters" Unicode character block.
  827          * @since 1.2
  828          */
  829         public static final UnicodeBlock SPACING_MODIFIER_LETTERS =
  830             new UnicodeBlock("SPACING_MODIFIER_LETTERS",
  831                              "SPACING MODIFIER LETTERS",
  832                              "SPACINGMODIFIERLETTERS");
  833 
  834         /**
  835          * Constant for the "Combining Diacritical Marks" Unicode character block.
  836          * @since 1.2
  837          */
  838         public static final UnicodeBlock COMBINING_DIACRITICAL_MARKS =
  839             new UnicodeBlock("COMBINING_DIACRITICAL_MARKS",
  840                              "COMBINING DIACRITICAL MARKS",
  841                              "COMBININGDIACRITICALMARKS");
  842 
  843         /**
  844          * Constant for the "Greek and Coptic" Unicode character block.
  845          * <p>
  846          * This block was previously known as the "Greek" block.
  847          *
  848          * @since 1.2
  849          */
  850         public static final UnicodeBlock GREEK =
  851             new UnicodeBlock("GREEK",
  852                              "GREEK AND COPTIC",
  853                              "GREEKANDCOPTIC");
  854 
  855         /**
  856          * Constant for the "Cyrillic" Unicode character block.
  857          * @since 1.2
  858          */
  859         public static final UnicodeBlock CYRILLIC =
  860             new UnicodeBlock("CYRILLIC");
  861 
  862         /**
  863          * Constant for the "Armenian" Unicode character block.
  864          * @since 1.2
  865          */
  866         public static final UnicodeBlock ARMENIAN =
  867             new UnicodeBlock("ARMENIAN");
  868 
  869         /**
  870          * Constant for the "Hebrew" Unicode character block.
  871          * @since 1.2
  872          */
  873         public static final UnicodeBlock HEBREW =
  874             new UnicodeBlock("HEBREW");
  875 
  876         /**
  877          * Constant for the "Arabic" Unicode character block.
  878          * @since 1.2
  879          */
  880         public static final UnicodeBlock ARABIC =
  881             new UnicodeBlock("ARABIC");
  882 
  883         /**
  884          * Constant for the "Devanagari" Unicode character block.
  885          * @since 1.2
  886          */
  887         public static final UnicodeBlock DEVANAGARI =
  888             new UnicodeBlock("DEVANAGARI");
  889 
  890         /**
  891          * Constant for the "Bengali" Unicode character block.
  892          * @since 1.2
  893          */
  894         public static final UnicodeBlock BENGALI =
  895             new UnicodeBlock("BENGALI");
  896 
  897         /**
  898          * Constant for the "Gurmukhi" Unicode character block.
  899          * @since 1.2
  900          */
  901         public static final UnicodeBlock GURMUKHI =
  902             new UnicodeBlock("GURMUKHI");
  903 
  904         /**
  905          * Constant for the "Gujarati" Unicode character block.
  906          * @since 1.2
  907          */
  908         public static final UnicodeBlock GUJARATI =
  909             new UnicodeBlock("GUJARATI");
  910 
  911         /**
  912          * Constant for the "Oriya" Unicode character block.
  913          * @since 1.2
  914          */
  915         public static final UnicodeBlock ORIYA =
  916             new UnicodeBlock("ORIYA");
  917 
  918         /**
  919          * Constant for the "Tamil" Unicode character block.
  920          * @since 1.2
  921          */
  922         public static final UnicodeBlock TAMIL =
  923             new UnicodeBlock("TAMIL");
  924 
  925         /**
  926          * Constant for the "Telugu" Unicode character block.
  927          * @since 1.2
  928          */
  929         public static final UnicodeBlock TELUGU =
  930             new UnicodeBlock("TELUGU");
  931 
  932         /**
  933          * Constant for the "Kannada" Unicode character block.
  934          * @since 1.2
  935          */
  936         public static final UnicodeBlock KANNADA =
  937             new UnicodeBlock("KANNADA");
  938 
  939         /**
  940          * Constant for the "Malayalam" Unicode character block.
  941          * @since 1.2
  942          */
  943         public static final UnicodeBlock MALAYALAM =
  944             new UnicodeBlock("MALAYALAM");
  945 
  946         /**
  947          * Constant for the "Thai" Unicode character block.
  948          * @since 1.2
  949          */
  950         public static final UnicodeBlock THAI =
  951             new UnicodeBlock("THAI");
  952 
  953         /**
  954          * Constant for the "Lao" Unicode character block.
  955          * @since 1.2
  956          */
  957         public static final UnicodeBlock LAO =
  958             new UnicodeBlock("LAO");
  959 
  960         /**
  961          * Constant for the "Tibetan" Unicode character block.
  962          * @since 1.2
  963          */
  964         public static final UnicodeBlock TIBETAN =
  965             new UnicodeBlock("TIBETAN");
  966 
  967         /**
  968          * Constant for the "Georgian" Unicode character block.
  969          * @since 1.2
  970          */
  971         public static final UnicodeBlock GEORGIAN =
  972             new UnicodeBlock("GEORGIAN");
  973 
  974         /**
  975          * Constant for the "Hangul Jamo" Unicode character block.
  976          * @since 1.2
  977          */
  978         public static final UnicodeBlock HANGUL_JAMO =
  979             new UnicodeBlock("HANGUL_JAMO",
  980                              "HANGUL JAMO",
  981                              "HANGULJAMO");
  982 
  983         /**
  984          * Constant for the "Latin Extended Additional" Unicode character block.
  985          * @since 1.2
  986          */
  987         public static final UnicodeBlock LATIN_EXTENDED_ADDITIONAL =
  988             new UnicodeBlock("LATIN_EXTENDED_ADDITIONAL",
  989                              "LATIN EXTENDED ADDITIONAL",
  990                              "LATINEXTENDEDADDITIONAL");
  991 
  992         /**
  993          * Constant for the "Greek Extended" Unicode character block.
  994          * @since 1.2
  995          */
  996         public static final UnicodeBlock GREEK_EXTENDED =
  997             new UnicodeBlock("GREEK_EXTENDED",
  998                              "GREEK EXTENDED",
  999                              "GREEKEXTENDED");
 1000 
 1001         /**
 1002          * Constant for the "General Punctuation" Unicode character block.
 1003          * @since 1.2
 1004          */
 1005         public static final UnicodeBlock GENERAL_PUNCTUATION =
 1006             new UnicodeBlock("GENERAL_PUNCTUATION",
 1007                              "GENERAL PUNCTUATION",
 1008                              "GENERALPUNCTUATION");
 1009 
 1010         /**
 1011          * Constant for the "Superscripts and Subscripts" Unicode character
 1012          * block.
 1013          * @since 1.2
 1014          */
 1015         public static final UnicodeBlock SUPERSCRIPTS_AND_SUBSCRIPTS =
 1016             new UnicodeBlock("SUPERSCRIPTS_AND_SUBSCRIPTS",
 1017                              "SUPERSCRIPTS AND SUBSCRIPTS",
 1018                              "SUPERSCRIPTSANDSUBSCRIPTS");
 1019 
 1020         /**
 1021          * Constant for the "Currency Symbols" Unicode character block.
 1022          * @since 1.2
 1023          */
 1024         public static final UnicodeBlock CURRENCY_SYMBOLS =
 1025             new UnicodeBlock("CURRENCY_SYMBOLS",
 1026                              "CURRENCY SYMBOLS",
 1027                              "CURRENCYSYMBOLS");
 1028 
 1029         /**
 1030          * Constant for the "Combining Diacritical Marks for Symbols" Unicode
 1031          * character block.
 1032          * <p>
 1033          * This block was previously known as "Combining Marks for Symbols".
 1034          * @since 1.2
 1035          */
 1036         public static final UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS =
 1037             new UnicodeBlock("COMBINING_MARKS_FOR_SYMBOLS",
 1038                              "COMBINING DIACRITICAL MARKS FOR SYMBOLS",
 1039                              "COMBININGDIACRITICALMARKSFORSYMBOLS",
 1040                              "COMBINING MARKS FOR SYMBOLS",
 1041                              "COMBININGMARKSFORSYMBOLS");
 1042 
 1043         /**
 1044          * Constant for the "Letterlike Symbols" Unicode character block.
 1045          * @since 1.2
 1046          */
 1047         public static final UnicodeBlock LETTERLIKE_SYMBOLS =
 1048             new UnicodeBlock("LETTERLIKE_SYMBOLS",
 1049                              "LETTERLIKE SYMBOLS",
 1050                              "LETTERLIKESYMBOLS");
 1051 
 1052         /**
 1053          * Constant for the "Number Forms" Unicode character block.
 1054          * @since 1.2
 1055          */
 1056         public static final UnicodeBlock NUMBER_FORMS =
 1057             new UnicodeBlock("NUMBER_FORMS",
 1058                              "NUMBER FORMS",
 1059                              "NUMBERFORMS");
 1060 
 1061         /**
 1062          * Constant for the "Arrows" Unicode character block.
 1063          * @since 1.2
 1064          */
 1065         public static final UnicodeBlock ARROWS =
 1066             new UnicodeBlock("ARROWS");
 1067 
 1068         /**
 1069          * Constant for the "Mathematical Operators" Unicode character block.
 1070          * @since 1.2
 1071          */
 1072         public static final UnicodeBlock MATHEMATICAL_OPERATORS =
 1073             new UnicodeBlock("MATHEMATICAL_OPERATORS",
 1074                              "MATHEMATICAL OPERATORS",
 1075                              "MATHEMATICALOPERATORS");
 1076 
 1077         /**
 1078          * Constant for the "Miscellaneous Technical" Unicode character block.
 1079          * @since 1.2
 1080          */
 1081         public static final UnicodeBlock MISCELLANEOUS_TECHNICAL =
 1082             new UnicodeBlock("MISCELLANEOUS_TECHNICAL",
 1083                              "MISCELLANEOUS TECHNICAL",
 1084                              "MISCELLANEOUSTECHNICAL");
 1085 
 1086         /**
 1087          * Constant for the "Control Pictures" Unicode character block.
 1088          * @since 1.2
 1089          */
 1090         public static final UnicodeBlock CONTROL_PICTURES =
 1091             new UnicodeBlock("CONTROL_PICTURES",
 1092                              "CONTROL PICTURES",
 1093                              "CONTROLPICTURES");
 1094 
 1095         /**
 1096          * Constant for the "Optical Character Recognition" Unicode character block.
 1097          * @since 1.2
 1098          */
 1099         public static final UnicodeBlock OPTICAL_CHARACTER_RECOGNITION =
 1100             new UnicodeBlock("OPTICAL_CHARACTER_RECOGNITION",
 1101                              "OPTICAL CHARACTER RECOGNITION",
 1102                              "OPTICALCHARACTERRECOGNITION");
 1103 
 1104         /**
 1105          * Constant for the "Enclosed Alphanumerics" Unicode character block.
 1106          * @since 1.2
 1107          */
 1108         public static final UnicodeBlock ENCLOSED_ALPHANUMERICS =
 1109             new UnicodeBlock("ENCLOSED_ALPHANUMERICS",
 1110                              "ENCLOSED ALPHANUMERICS",
 1111                              "ENCLOSEDALPHANUMERICS");
 1112 
 1113         /**
 1114          * Constant for the "Box Drawing" Unicode character block.
 1115          * @since 1.2
 1116          */
 1117         public static final UnicodeBlock BOX_DRAWING =
 1118             new UnicodeBlock("BOX_DRAWING",
 1119                              "BOX DRAWING",
 1120                              "BOXDRAWING");
 1121 
 1122         /**
 1123          * Constant for the "Block Elements" Unicode character block.
 1124          * @since 1.2
 1125          */
 1126         public static final UnicodeBlock BLOCK_ELEMENTS =
 1127             new UnicodeBlock("BLOCK_ELEMENTS",
 1128                              "BLOCK ELEMENTS",
 1129                              "BLOCKELEMENTS");
 1130 
 1131         /**
 1132          * Constant for the "Geometric Shapes" Unicode character block.
 1133          * @since 1.2
 1134          */
 1135         public static final UnicodeBlock GEOMETRIC_SHAPES =
 1136             new UnicodeBlock("GEOMETRIC_SHAPES",
 1137                              "GEOMETRIC SHAPES",
 1138                              "GEOMETRICSHAPES");
 1139 
 1140         /**
 1141          * Constant for the "Miscellaneous Symbols" Unicode character block.
 1142          * @since 1.2
 1143          */
 1144         public static final UnicodeBlock MISCELLANEOUS_SYMBOLS =
 1145             new UnicodeBlock("MISCELLANEOUS_SYMBOLS",
 1146                              "MISCELLANEOUS SYMBOLS",
 1147                              "MISCELLANEOUSSYMBOLS");
 1148 
 1149         /**
 1150          * Constant for the "Dingbats" Unicode character block.
 1151          * @since 1.2
 1152          */
 1153         public static final UnicodeBlock DINGBATS =
 1154             new UnicodeBlock("DINGBATS");
 1155 
 1156         /**
 1157          * Constant for the "CJK Symbols and Punctuation" Unicode character block.
 1158          * @since 1.2
 1159          */
 1160         public static final UnicodeBlock CJK_SYMBOLS_AND_PUNCTUATION =
 1161             new UnicodeBlock("CJK_SYMBOLS_AND_PUNCTUATION",
 1162                              "CJK SYMBOLS AND PUNCTUATION",
 1163                              "CJKSYMBOLSANDPUNCTUATION");
 1164 
 1165         /**
 1166          * Constant for the "Hiragana" Unicode character block.
 1167          * @since 1.2
 1168          */
 1169         public static final UnicodeBlock HIRAGANA =
 1170             new UnicodeBlock("HIRAGANA");
 1171 
 1172         /**
 1173          * Constant for the "Katakana" Unicode character block.
 1174          * @since 1.2
 1175          */
 1176         public static final UnicodeBlock KATAKANA =
 1177             new UnicodeBlock("KATAKANA");
 1178 
 1179         /**
 1180          * Constant for the "Bopomofo" Unicode character block.
 1181          * @since 1.2
 1182          */
 1183         public static final UnicodeBlock BOPOMOFO =
 1184             new UnicodeBlock("BOPOMOFO");
 1185 
 1186         /**
 1187          * Constant for the "Hangul Compatibility Jamo" Unicode character block.
 1188          * @since 1.2
 1189          */
 1190         public static final UnicodeBlock HANGUL_COMPATIBILITY_JAMO =
 1191             new UnicodeBlock("HANGUL_COMPATIBILITY_JAMO",
 1192                              "HANGUL COMPATIBILITY JAMO",
 1193                              "HANGULCOMPATIBILITYJAMO");
 1194 
 1195         /**
 1196          * Constant for the "Kanbun" Unicode character block.
 1197          * @since 1.2
 1198          */
 1199         public static final UnicodeBlock KANBUN =
 1200             new UnicodeBlock("KANBUN");
 1201 
 1202         /**
 1203          * Constant for the "Enclosed CJK Letters and Months" Unicode character block.
 1204          * @since 1.2
 1205          */
 1206         public static final UnicodeBlock ENCLOSED_CJK_LETTERS_AND_MONTHS =
 1207             new UnicodeBlock("ENCLOSED_CJK_LETTERS_AND_MONTHS",
 1208                              "ENCLOSED CJK LETTERS AND MONTHS",
 1209                              "ENCLOSEDCJKLETTERSANDMONTHS");
 1210 
 1211         /**
 1212          * Constant for the "CJK Compatibility" Unicode character block.
 1213          * @since 1.2
 1214          */
 1215         public static final UnicodeBlock CJK_COMPATIBILITY =
 1216             new UnicodeBlock("CJK_COMPATIBILITY",
 1217                              "CJK COMPATIBILITY",
 1218                              "CJKCOMPATIBILITY");
 1219 
 1220         /**
 1221          * Constant for the "CJK Unified Ideographs" Unicode character block.
 1222          * @since 1.2
 1223          */
 1224         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS =
 1225             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS",
 1226                              "CJK UNIFIED IDEOGRAPHS",
 1227                              "CJKUNIFIEDIDEOGRAPHS");
 1228 
 1229         /**
 1230          * Constant for the "Hangul Syllables" Unicode character block.
 1231          * @since 1.2
 1232          */
 1233         public static final UnicodeBlock HANGUL_SYLLABLES =
 1234             new UnicodeBlock("HANGUL_SYLLABLES",
 1235                              "HANGUL SYLLABLES",
 1236                              "HANGULSYLLABLES");
 1237 
 1238         /**
 1239          * Constant for the "Private Use Area" Unicode character block.
 1240          * @since 1.2
 1241          */
 1242         public static final UnicodeBlock PRIVATE_USE_AREA =
 1243             new UnicodeBlock("PRIVATE_USE_AREA",
 1244                              "PRIVATE USE AREA",
 1245                              "PRIVATEUSEAREA");
 1246 
 1247         /**
 1248          * Constant for the "CJK Compatibility Ideographs" Unicode character
 1249          * block.
 1250          * @since 1.2
 1251          */
 1252         public static final UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS =
 1253             new UnicodeBlock("CJK_COMPATIBILITY_IDEOGRAPHS",
 1254                              "CJK COMPATIBILITY IDEOGRAPHS",
 1255                              "CJKCOMPATIBILITYIDEOGRAPHS");
 1256 
 1257         /**
 1258          * Constant for the "Alphabetic Presentation Forms" Unicode character block.
 1259          * @since 1.2
 1260          */
 1261         public static final UnicodeBlock ALPHABETIC_PRESENTATION_FORMS =
 1262             new UnicodeBlock("ALPHABETIC_PRESENTATION_FORMS",
 1263                              "ALPHABETIC PRESENTATION FORMS",
 1264                              "ALPHABETICPRESENTATIONFORMS");
 1265 
 1266         /**
 1267          * Constant for the "Arabic Presentation Forms-A" Unicode character
 1268          * block.
 1269          * @since 1.2
 1270          */
 1271         public static final UnicodeBlock ARABIC_PRESENTATION_FORMS_A =
 1272             new UnicodeBlock("ARABIC_PRESENTATION_FORMS_A",
 1273                              "ARABIC PRESENTATION FORMS-A",
 1274                              "ARABICPRESENTATIONFORMS-A");
 1275 
 1276         /**
 1277          * Constant for the "Combining Half Marks" Unicode character block.
 1278          * @since 1.2
 1279          */
 1280         public static final UnicodeBlock COMBINING_HALF_MARKS =
 1281             new UnicodeBlock("COMBINING_HALF_MARKS",
 1282                              "COMBINING HALF MARKS",
 1283                              "COMBININGHALFMARKS");
 1284 
 1285         /**
 1286          * Constant for the "CJK Compatibility Forms" Unicode character block.
 1287          * @since 1.2
 1288          */
 1289         public static final UnicodeBlock CJK_COMPATIBILITY_FORMS =
 1290             new UnicodeBlock("CJK_COMPATIBILITY_FORMS",
 1291                              "CJK COMPATIBILITY FORMS",
 1292                              "CJKCOMPATIBILITYFORMS");
 1293 
 1294         /**
 1295          * Constant for the "Small Form Variants" Unicode character block.
 1296          * @since 1.2
 1297          */
 1298         public static final UnicodeBlock SMALL_FORM_VARIANTS =
 1299             new UnicodeBlock("SMALL_FORM_VARIANTS",
 1300                              "SMALL FORM VARIANTS",
 1301                              "SMALLFORMVARIANTS");
 1302 
 1303         /**
 1304          * Constant for the "Arabic Presentation Forms-B" Unicode character block.
 1305          * @since 1.2
 1306          */
 1307         public static final UnicodeBlock ARABIC_PRESENTATION_FORMS_B =
 1308             new UnicodeBlock("ARABIC_PRESENTATION_FORMS_B",
 1309                              "ARABIC PRESENTATION FORMS-B",
 1310                              "ARABICPRESENTATIONFORMS-B");
 1311 
 1312         /**
 1313          * Constant for the "Halfwidth and Fullwidth Forms" Unicode character
 1314          * block.
 1315          * @since 1.2
 1316          */
 1317         public static final UnicodeBlock HALFWIDTH_AND_FULLWIDTH_FORMS =
 1318             new UnicodeBlock("HALFWIDTH_AND_FULLWIDTH_FORMS",
 1319                              "HALFWIDTH AND FULLWIDTH FORMS",
 1320                              "HALFWIDTHANDFULLWIDTHFORMS");
 1321 
 1322         /**
 1323          * Constant for the "Specials" Unicode character block.
 1324          * @since 1.2
 1325          */
 1326         public static final UnicodeBlock SPECIALS =
 1327             new UnicodeBlock("SPECIALS");
 1328 
 1329         /**
 1330          * @deprecated
 1331          * Instead of {@code SURROGATES_AREA}, use {@link #HIGH_SURROGATES},
 1332          * {@link #HIGH_PRIVATE_USE_SURROGATES}, and {@link #LOW_SURROGATES}.
 1333          * These constants match the block definitions of the Unicode Standard.
 1334          * The {@link #of(char)} and {@link #of(int)} methods return the
 1335          * standard constants.
 1336          */
 1337         @Deprecated(since="1.5")
 1338         public static final UnicodeBlock SURROGATES_AREA =
 1339             new UnicodeBlock("SURROGATES_AREA");
 1340 
 1341         /**
 1342          * Constant for the "Syriac" Unicode character block.
 1343          * @since 1.4
 1344          */
 1345         public static final UnicodeBlock SYRIAC =
 1346             new UnicodeBlock("SYRIAC");
 1347 
 1348         /**
 1349          * Constant for the "Thaana" Unicode character block.
 1350          * @since 1.4
 1351          */
 1352         public static final UnicodeBlock THAANA =
 1353             new UnicodeBlock("THAANA");
 1354 
 1355         /**
 1356          * Constant for the "Sinhala" Unicode character block.
 1357          * @since 1.4
 1358          */
 1359         public static final UnicodeBlock SINHALA =
 1360             new UnicodeBlock("SINHALA");
 1361 
 1362         /**
 1363          * Constant for the "Myanmar" Unicode character block.
 1364          * @since 1.4
 1365          */
 1366         public static final UnicodeBlock MYANMAR =
 1367             new UnicodeBlock("MYANMAR");
 1368 
 1369         /**
 1370          * Constant for the "Ethiopic" Unicode character block.
 1371          * @since 1.4
 1372          */
 1373         public static final UnicodeBlock ETHIOPIC =
 1374             new UnicodeBlock("ETHIOPIC");
 1375 
 1376         /**
 1377          * Constant for the "Cherokee" Unicode character block.
 1378          * @since 1.4
 1379          */
 1380         public static final UnicodeBlock CHEROKEE =
 1381             new UnicodeBlock("CHEROKEE");
 1382 
 1383         /**
 1384          * Constant for the "Unified Canadian Aboriginal Syllabics" Unicode character block.
 1385          * @since 1.4
 1386          */
 1387         public static final UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS =
 1388             new UnicodeBlock("UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS",
 1389                              "UNIFIED CANADIAN ABORIGINAL SYLLABICS",
 1390                              "UNIFIEDCANADIANABORIGINALSYLLABICS");
 1391 
 1392         /**
 1393          * Constant for the "Ogham" Unicode character block.
 1394          * @since 1.4
 1395          */
 1396         public static final UnicodeBlock OGHAM =
 1397             new UnicodeBlock("OGHAM");
 1398 
 1399         /**
 1400          * Constant for the "Runic" Unicode character block.
 1401          * @since 1.4
 1402          */
 1403         public static final UnicodeBlock RUNIC =
 1404             new UnicodeBlock("RUNIC");
 1405 
 1406         /**
 1407          * Constant for the "Khmer" Unicode character block.
 1408          * @since 1.4
 1409          */
 1410         public static final UnicodeBlock KHMER =
 1411             new UnicodeBlock("KHMER");
 1412 
 1413         /**
 1414          * Constant for the "Mongolian" Unicode character block.
 1415          * @since 1.4
 1416          */
 1417         public static final UnicodeBlock MONGOLIAN =
 1418             new UnicodeBlock("MONGOLIAN");
 1419 
 1420         /**
 1421          * Constant for the "Braille Patterns" Unicode character block.
 1422          * @since 1.4
 1423          */
 1424         public static final UnicodeBlock BRAILLE_PATTERNS =
 1425             new UnicodeBlock("BRAILLE_PATTERNS",
 1426                              "BRAILLE PATTERNS",
 1427                              "BRAILLEPATTERNS");
 1428 
 1429         /**
 1430          * Constant for the "CJK Radicals Supplement" Unicode character block.
 1431          * @since 1.4
 1432          */
 1433         public static final UnicodeBlock CJK_RADICALS_SUPPLEMENT =
 1434             new UnicodeBlock("CJK_RADICALS_SUPPLEMENT",
 1435                              "CJK RADICALS SUPPLEMENT",
 1436                              "CJKRADICALSSUPPLEMENT");
 1437 
 1438         /**
 1439          * Constant for the "Kangxi Radicals" Unicode character block.
 1440          * @since 1.4
 1441          */
 1442         public static final UnicodeBlock KANGXI_RADICALS =
 1443             new UnicodeBlock("KANGXI_RADICALS",
 1444                              "KANGXI RADICALS",
 1445                              "KANGXIRADICALS");
 1446 
 1447         /**
 1448          * Constant for the "Ideographic Description Characters" Unicode character block.
 1449          * @since 1.4
 1450          */
 1451         public static final UnicodeBlock IDEOGRAPHIC_DESCRIPTION_CHARACTERS =
 1452             new UnicodeBlock("IDEOGRAPHIC_DESCRIPTION_CHARACTERS",
 1453                              "IDEOGRAPHIC DESCRIPTION CHARACTERS",
 1454                              "IDEOGRAPHICDESCRIPTIONCHARACTERS");
 1455 
 1456         /**
 1457          * Constant for the "Bopomofo Extended" Unicode character block.
 1458          * @since 1.4
 1459          */
 1460         public static final UnicodeBlock BOPOMOFO_EXTENDED =
 1461             new UnicodeBlock("BOPOMOFO_EXTENDED",
 1462                              "BOPOMOFO EXTENDED",
 1463                              "BOPOMOFOEXTENDED");
 1464 
 1465         /**
 1466          * Constant for the "CJK Unified Ideographs Extension A" Unicode character block.
 1467          * @since 1.4
 1468          */
 1469         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A =
 1470             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A",
 1471                              "CJK UNIFIED IDEOGRAPHS EXTENSION A",
 1472                              "CJKUNIFIEDIDEOGRAPHSEXTENSIONA");
 1473 
 1474         /**
 1475          * Constant for the "Yi Syllables" Unicode character block.
 1476          * @since 1.4
 1477          */
 1478         public static final UnicodeBlock YI_SYLLABLES =
 1479             new UnicodeBlock("YI_SYLLABLES",
 1480                              "YI SYLLABLES",
 1481                              "YISYLLABLES");
 1482 
 1483         /**
 1484          * Constant for the "Yi Radicals" Unicode character block.
 1485          * @since 1.4
 1486          */
 1487         public static final UnicodeBlock YI_RADICALS =
 1488             new UnicodeBlock("YI_RADICALS",
 1489                              "YI RADICALS",
 1490                              "YIRADICALS");
 1491 
 1492         /**
 1493          * Constant for the "Cyrillic Supplement" Unicode character block.
 1494          * This block was previously known as the "Cyrillic Supplementary" block.
 1495          * @since 1.5
 1496          */
 1497         public static final UnicodeBlock CYRILLIC_SUPPLEMENTARY =
 1498             new UnicodeBlock("CYRILLIC_SUPPLEMENTARY",
 1499                              "CYRILLIC SUPPLEMENTARY",
 1500                              "CYRILLICSUPPLEMENTARY",
 1501                              "CYRILLIC SUPPLEMENT",
 1502                              "CYRILLICSUPPLEMENT");
 1503 
 1504         /**
 1505          * Constant for the "Tagalog" Unicode character block.
 1506          * @since 1.5
 1507          */
 1508         public static final UnicodeBlock TAGALOG =
 1509             new UnicodeBlock("TAGALOG");
 1510 
 1511         /**
 1512          * Constant for the "Hanunoo" Unicode character block.
 1513          * @since 1.5
 1514          */
 1515         public static final UnicodeBlock HANUNOO =
 1516             new UnicodeBlock("HANUNOO");
 1517 
 1518         /**
 1519          * Constant for the "Buhid" Unicode character block.
 1520          * @since 1.5
 1521          */
 1522         public static final UnicodeBlock BUHID =
 1523             new UnicodeBlock("BUHID");
 1524 
 1525         /**
 1526          * Constant for the "Tagbanwa" Unicode character block.
 1527          * @since 1.5
 1528          */
 1529         public static final UnicodeBlock TAGBANWA =
 1530             new UnicodeBlock("TAGBANWA");
 1531 
 1532         /**
 1533          * Constant for the "Limbu" Unicode character block.
 1534          * @since 1.5
 1535          */
 1536         public static final UnicodeBlock LIMBU =
 1537             new UnicodeBlock("LIMBU");
 1538 
 1539         /**
 1540          * Constant for the "Tai Le" Unicode character block.
 1541          * @since 1.5
 1542          */
 1543         public static final UnicodeBlock TAI_LE =
 1544             new UnicodeBlock("TAI_LE",
 1545                              "TAI LE",
 1546                              "TAILE");
 1547 
 1548         /**
 1549          * Constant for the "Khmer Symbols" Unicode character block.
 1550          * @since 1.5
 1551          */
 1552         public static final UnicodeBlock KHMER_SYMBOLS =
 1553             new UnicodeBlock("KHMER_SYMBOLS",
 1554                              "KHMER SYMBOLS",
 1555                              "KHMERSYMBOLS");
 1556 
 1557         /**
 1558          * Constant for the "Phonetic Extensions" Unicode character block.
 1559          * @since 1.5
 1560          */
 1561         public static final UnicodeBlock PHONETIC_EXTENSIONS =
 1562             new UnicodeBlock("PHONETIC_EXTENSIONS",
 1563                              "PHONETIC EXTENSIONS",
 1564                              "PHONETICEXTENSIONS");
 1565 
 1566         /**
 1567          * Constant for the "Miscellaneous Mathematical Symbols-A" Unicode character block.
 1568          * @since 1.5
 1569          */
 1570         public static final UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A =
 1571             new UnicodeBlock("MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A",
 1572                              "MISCELLANEOUS MATHEMATICAL SYMBOLS-A",
 1573                              "MISCELLANEOUSMATHEMATICALSYMBOLS-A");
 1574 
 1575         /**
 1576          * Constant for the "Supplemental Arrows-A" Unicode character block.
 1577          * @since 1.5
 1578          */
 1579         public static final UnicodeBlock SUPPLEMENTAL_ARROWS_A =
 1580             new UnicodeBlock("SUPPLEMENTAL_ARROWS_A",
 1581                              "SUPPLEMENTAL ARROWS-A",
 1582                              "SUPPLEMENTALARROWS-A");
 1583 
 1584         /**
 1585          * Constant for the "Supplemental Arrows-B" Unicode character block.
 1586          * @since 1.5
 1587          */
 1588         public static final UnicodeBlock SUPPLEMENTAL_ARROWS_B =
 1589             new UnicodeBlock("SUPPLEMENTAL_ARROWS_B",
 1590                              "SUPPLEMENTAL ARROWS-B",
 1591                              "SUPPLEMENTALARROWS-B");
 1592 
 1593         /**
 1594          * Constant for the "Miscellaneous Mathematical Symbols-B" Unicode
 1595          * character block.
 1596          * @since 1.5
 1597          */
 1598         public static final UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B =
 1599             new UnicodeBlock("MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B",
 1600                              "MISCELLANEOUS MATHEMATICAL SYMBOLS-B",
 1601                              "MISCELLANEOUSMATHEMATICALSYMBOLS-B");
 1602 
 1603         /**
 1604          * Constant for the "Supplemental Mathematical Operators" Unicode
 1605          * character block.
 1606          * @since 1.5
 1607          */
 1608         public static final UnicodeBlock SUPPLEMENTAL_MATHEMATICAL_OPERATORS =
 1609             new UnicodeBlock("SUPPLEMENTAL_MATHEMATICAL_OPERATORS",
 1610                              "SUPPLEMENTAL MATHEMATICAL OPERATORS",
 1611                              "SUPPLEMENTALMATHEMATICALOPERATORS");
 1612 
 1613         /**
 1614          * Constant for the "Miscellaneous Symbols and Arrows" Unicode character
 1615          * block.
 1616          * @since 1.5
 1617          */
 1618         public static final UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_ARROWS =
 1619             new UnicodeBlock("MISCELLANEOUS_SYMBOLS_AND_ARROWS",
 1620                              "MISCELLANEOUS SYMBOLS AND ARROWS",
 1621                              "MISCELLANEOUSSYMBOLSANDARROWS");
 1622 
 1623         /**
 1624          * Constant for the "Katakana Phonetic Extensions" Unicode character
 1625          * block.
 1626          * @since 1.5
 1627          */
 1628         public static final UnicodeBlock KATAKANA_PHONETIC_EXTENSIONS =
 1629             new UnicodeBlock("KATAKANA_PHONETIC_EXTENSIONS",
 1630                              "KATAKANA PHONETIC EXTENSIONS",
 1631                              "KATAKANAPHONETICEXTENSIONS");
 1632 
 1633         /**
 1634          * Constant for the "Yijing Hexagram Symbols" Unicode character block.
 1635          * @since 1.5
 1636          */
 1637         public static final UnicodeBlock YIJING_HEXAGRAM_SYMBOLS =
 1638             new UnicodeBlock("YIJING_HEXAGRAM_SYMBOLS",
 1639                              "YIJING HEXAGRAM SYMBOLS",
 1640                              "YIJINGHEXAGRAMSYMBOLS");
 1641 
 1642         /**
 1643          * Constant for the "Variation Selectors" Unicode character block.
 1644          * @since 1.5
 1645          */
 1646         public static final UnicodeBlock VARIATION_SELECTORS =
 1647             new UnicodeBlock("VARIATION_SELECTORS",
 1648                              "VARIATION SELECTORS",
 1649                              "VARIATIONSELECTORS");
 1650 
 1651         /**
 1652          * Constant for the "Linear B Syllabary" Unicode character block.
 1653          * @since 1.5
 1654          */
 1655         public static final UnicodeBlock LINEAR_B_SYLLABARY =
 1656             new UnicodeBlock("LINEAR_B_SYLLABARY",
 1657                              "LINEAR B SYLLABARY",
 1658                              "LINEARBSYLLABARY");
 1659 
 1660         /**
 1661          * Constant for the "Linear B Ideograms" Unicode character block.
 1662          * @since 1.5
 1663          */
 1664         public static final UnicodeBlock LINEAR_B_IDEOGRAMS =
 1665             new UnicodeBlock("LINEAR_B_IDEOGRAMS",
 1666                              "LINEAR B IDEOGRAMS",
 1667                              "LINEARBIDEOGRAMS");
 1668 
 1669         /**
 1670          * Constant for the "Aegean Numbers" Unicode character block.
 1671          * @since 1.5
 1672          */
 1673         public static final UnicodeBlock AEGEAN_NUMBERS =
 1674             new UnicodeBlock("AEGEAN_NUMBERS",
 1675                              "AEGEAN NUMBERS",
 1676                              "AEGEANNUMBERS");
 1677 
 1678         /**
 1679          * Constant for the "Old Italic" Unicode character block.
 1680          * @since 1.5
 1681          */
 1682         public static final UnicodeBlock OLD_ITALIC =
 1683             new UnicodeBlock("OLD_ITALIC",
 1684                              "OLD ITALIC",
 1685                              "OLDITALIC");
 1686 
 1687         /**
 1688          * Constant for the "Gothic" Unicode character block.
 1689          * @since 1.5
 1690          */
 1691         public static final UnicodeBlock GOTHIC =
 1692             new UnicodeBlock("GOTHIC");
 1693 
 1694         /**
 1695          * Constant for the "Ugaritic" Unicode character block.
 1696          * @since 1.5
 1697          */
 1698         public static final UnicodeBlock UGARITIC =
 1699             new UnicodeBlock("UGARITIC");
 1700 
 1701         /**
 1702          * Constant for the "Deseret" Unicode character block.
 1703          * @since 1.5
 1704          */
 1705         public static final UnicodeBlock DESERET =
 1706             new UnicodeBlock("DESERET");
 1707 
 1708         /**
 1709          * Constant for the "Shavian" Unicode character block.
 1710          * @since 1.5
 1711          */
 1712         public static final UnicodeBlock SHAVIAN =
 1713             new UnicodeBlock("SHAVIAN");
 1714 
 1715         /**
 1716          * Constant for the "Osmanya" Unicode character block.
 1717          * @since 1.5
 1718          */
 1719         public static final UnicodeBlock OSMANYA =
 1720             new UnicodeBlock("OSMANYA");
 1721 
 1722         /**
 1723          * Constant for the "Cypriot Syllabary" Unicode character block.
 1724          * @since 1.5
 1725          */
 1726         public static final UnicodeBlock CYPRIOT_SYLLABARY =
 1727             new UnicodeBlock("CYPRIOT_SYLLABARY",
 1728                              "CYPRIOT SYLLABARY",
 1729                              "CYPRIOTSYLLABARY");
 1730 
 1731         /**
 1732          * Constant for the "Byzantine Musical Symbols" Unicode character block.
 1733          * @since 1.5
 1734          */
 1735         public static final UnicodeBlock BYZANTINE_MUSICAL_SYMBOLS =
 1736             new UnicodeBlock("BYZANTINE_MUSICAL_SYMBOLS",
 1737                              "BYZANTINE MUSICAL SYMBOLS",
 1738                              "BYZANTINEMUSICALSYMBOLS");
 1739 
 1740         /**
 1741          * Constant for the "Musical Symbols" Unicode character block.
 1742          * @since 1.5
 1743          */
 1744         public static final UnicodeBlock MUSICAL_SYMBOLS =
 1745             new UnicodeBlock("MUSICAL_SYMBOLS",
 1746                              "MUSICAL SYMBOLS",
 1747                              "MUSICALSYMBOLS");
 1748 
 1749         /**
 1750          * Constant for the "Tai Xuan Jing Symbols" Unicode character block.
 1751          * @since 1.5
 1752          */
 1753         public static final UnicodeBlock TAI_XUAN_JING_SYMBOLS =
 1754             new UnicodeBlock("TAI_XUAN_JING_SYMBOLS",
 1755                              "TAI XUAN JING SYMBOLS",
 1756                              "TAIXUANJINGSYMBOLS");
 1757 
 1758         /**
 1759          * Constant for the "Mathematical Alphanumeric Symbols" Unicode
 1760          * character block.
 1761          * @since 1.5
 1762          */
 1763         public static final UnicodeBlock MATHEMATICAL_ALPHANUMERIC_SYMBOLS =
 1764             new UnicodeBlock("MATHEMATICAL_ALPHANUMERIC_SYMBOLS",
 1765                              "MATHEMATICAL ALPHANUMERIC SYMBOLS",
 1766                              "MATHEMATICALALPHANUMERICSYMBOLS");
 1767 
 1768         /**
 1769          * Constant for the "CJK Unified Ideographs Extension B" Unicode
 1770          * character block.
 1771          * @since 1.5
 1772          */
 1773         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B =
 1774             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B",
 1775                              "CJK UNIFIED IDEOGRAPHS EXTENSION B",
 1776                              "CJKUNIFIEDIDEOGRAPHSEXTENSIONB");
 1777 
 1778         /**
 1779          * Constant for the "CJK Compatibility Ideographs Supplement" Unicode character block.
 1780          * @since 1.5
 1781          */
 1782         public static final UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT =
 1783             new UnicodeBlock("CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT",
 1784                              "CJK COMPATIBILITY IDEOGRAPHS SUPPLEMENT",
 1785                              "CJKCOMPATIBILITYIDEOGRAPHSSUPPLEMENT");
 1786 
 1787         /**
 1788          * Constant for the "Tags" Unicode character block.
 1789          * @since 1.5
 1790          */
 1791         public static final UnicodeBlock TAGS =
 1792             new UnicodeBlock("TAGS");
 1793 
 1794         /**
 1795          * Constant for the "Variation Selectors Supplement" Unicode character
 1796          * block.
 1797          * @since 1.5
 1798          */
 1799         public static final UnicodeBlock VARIATION_SELECTORS_SUPPLEMENT =
 1800             new UnicodeBlock("VARIATION_SELECTORS_SUPPLEMENT",
 1801                              "VARIATION SELECTORS SUPPLEMENT",
 1802                              "VARIATIONSELECTORSSUPPLEMENT");
 1803 
 1804         /**
 1805          * Constant for the "Supplementary Private Use Area-A" Unicode character
 1806          * block.
 1807          * @since 1.5
 1808          */
 1809         public static final UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_A =
 1810             new UnicodeBlock("SUPPLEMENTARY_PRIVATE_USE_AREA_A",
 1811                              "SUPPLEMENTARY PRIVATE USE AREA-A",
 1812                              "SUPPLEMENTARYPRIVATEUSEAREA-A");
 1813 
 1814         /**
 1815          * Constant for the "Supplementary Private Use Area-B" Unicode character
 1816          * block.
 1817          * @since 1.5
 1818          */
 1819         public static final UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_B =
 1820             new UnicodeBlock("SUPPLEMENTARY_PRIVATE_USE_AREA_B",
 1821                              "SUPPLEMENTARY PRIVATE USE AREA-B",
 1822                              "SUPPLEMENTARYPRIVATEUSEAREA-B");
 1823 
 1824         /**
 1825          * Constant for the "High Surrogates" Unicode character block.
 1826          * This block represents codepoint values in the high surrogate
 1827          * range: U+D800 through U+DB7F
 1828          *
 1829          * @since 1.5
 1830          */
 1831         public static final UnicodeBlock HIGH_SURROGATES =
 1832             new UnicodeBlock("HIGH_SURROGATES",
 1833                              "HIGH SURROGATES",
 1834                              "HIGHSURROGATES");
 1835 
 1836         /**
 1837          * Constant for the "High Private Use Surrogates" Unicode character
 1838          * block.
 1839          * This block represents codepoint values in the private use high
 1840          * surrogate range: U+DB80 through U+DBFF
 1841          *
 1842          * @since 1.5
 1843          */
 1844         public static final UnicodeBlock HIGH_PRIVATE_USE_SURROGATES =
 1845             new UnicodeBlock("HIGH_PRIVATE_USE_SURROGATES",
 1846                              "HIGH PRIVATE USE SURROGATES",
 1847                              "HIGHPRIVATEUSESURROGATES");
 1848 
 1849         /**
 1850          * Constant for the "Low Surrogates" Unicode character block.
 1851          * This block represents codepoint values in the low surrogate
 1852          * range: U+DC00 through U+DFFF
 1853          *
 1854          * @since 1.5
 1855          */
 1856         public static final UnicodeBlock LOW_SURROGATES =
 1857             new UnicodeBlock("LOW_SURROGATES",
 1858                              "LOW SURROGATES",
 1859                              "LOWSURROGATES");
 1860 
 1861         /**
 1862          * Constant for the "Arabic Supplement" Unicode character block.
 1863          * @since 1.7
 1864          */
 1865         public static final UnicodeBlock ARABIC_SUPPLEMENT =
 1866             new UnicodeBlock("ARABIC_SUPPLEMENT",
 1867                              "ARABIC SUPPLEMENT",
 1868                              "ARABICSUPPLEMENT");
 1869 
 1870         /**
 1871          * Constant for the "NKo" Unicode character block.
 1872          * @since 1.7
 1873          */
 1874         public static final UnicodeBlock NKO =
 1875             new UnicodeBlock("NKO");
 1876 
 1877         /**
 1878          * Constant for the "Samaritan" Unicode character block.
 1879          * @since 1.7
 1880          */
 1881         public static final UnicodeBlock SAMARITAN =
 1882             new UnicodeBlock("SAMARITAN");
 1883 
 1884         /**
 1885          * Constant for the "Mandaic" Unicode character block.
 1886          * @since 1.7
 1887          */
 1888         public static final UnicodeBlock MANDAIC =
 1889             new UnicodeBlock("MANDAIC");
 1890 
 1891         /**
 1892          * Constant for the "Ethiopic Supplement" Unicode character block.
 1893          * @since 1.7
 1894          */
 1895         public static final UnicodeBlock ETHIOPIC_SUPPLEMENT =
 1896             new UnicodeBlock("ETHIOPIC_SUPPLEMENT",
 1897                              "ETHIOPIC SUPPLEMENT",
 1898                              "ETHIOPICSUPPLEMENT");
 1899 
 1900         /**
 1901          * Constant for the "Unified Canadian Aboriginal Syllabics Extended"
 1902          * Unicode character block.
 1903          * @since 1.7
 1904          */
 1905         public static final UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED =
 1906             new UnicodeBlock("UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED",
 1907                              "UNIFIED CANADIAN ABORIGINAL SYLLABICS EXTENDED",
 1908                              "UNIFIEDCANADIANABORIGINALSYLLABICSEXTENDED");
 1909 
 1910         /**
 1911          * Constant for the "New Tai Lue" Unicode character block.
 1912          * @since 1.7
 1913          */
 1914         public static final UnicodeBlock NEW_TAI_LUE =
 1915             new UnicodeBlock("NEW_TAI_LUE",
 1916                              "NEW TAI LUE",
 1917                              "NEWTAILUE");
 1918 
 1919         /**
 1920          * Constant for the "Buginese" Unicode character block.
 1921          * @since 1.7
 1922          */
 1923         public static final UnicodeBlock BUGINESE =
 1924             new UnicodeBlock("BUGINESE");
 1925 
 1926         /**
 1927          * Constant for the "Tai Tham" Unicode character block.
 1928          * @since 1.7
 1929          */
 1930         public static final UnicodeBlock TAI_THAM =
 1931             new UnicodeBlock("TAI_THAM",
 1932                              "TAI THAM",
 1933                              "TAITHAM");
 1934 
 1935         /**
 1936          * Constant for the "Balinese" Unicode character block.
 1937          * @since 1.7
 1938          */
 1939         public static final UnicodeBlock BALINESE =
 1940             new UnicodeBlock("BALINESE");
 1941 
 1942         /**
 1943          * Constant for the "Sundanese" Unicode character block.
 1944          * @since 1.7
 1945          */
 1946         public static final UnicodeBlock SUNDANESE =
 1947             new UnicodeBlock("SUNDANESE");
 1948 
 1949         /**
 1950          * Constant for the "Batak" Unicode character block.
 1951          * @since 1.7
 1952          */
 1953         public static final UnicodeBlock BATAK =
 1954             new UnicodeBlock("BATAK");
 1955 
 1956         /**
 1957          * Constant for the "Lepcha" Unicode character block.
 1958          * @since 1.7
 1959          */
 1960         public static final UnicodeBlock LEPCHA =
 1961             new UnicodeBlock("LEPCHA");
 1962 
 1963         /**
 1964          * Constant for the "Ol Chiki" Unicode character block.
 1965          * @since 1.7
 1966          */
 1967         public static final UnicodeBlock OL_CHIKI =
 1968             new UnicodeBlock("OL_CHIKI",
 1969                              "OL CHIKI",
 1970                              "OLCHIKI");
 1971 
 1972         /**
 1973          * Constant for the "Vedic Extensions" Unicode character block.
 1974          * @since 1.7
 1975          */
 1976         public static final UnicodeBlock VEDIC_EXTENSIONS =
 1977             new UnicodeBlock("VEDIC_EXTENSIONS",
 1978                              "VEDIC EXTENSIONS",
 1979                              "VEDICEXTENSIONS");
 1980 
 1981         /**
 1982          * Constant for the "Phonetic Extensions Supplement" Unicode character
 1983          * block.
 1984          * @since 1.7
 1985          */
 1986         public static final UnicodeBlock PHONETIC_EXTENSIONS_SUPPLEMENT =
 1987             new UnicodeBlock("PHONETIC_EXTENSIONS_SUPPLEMENT",
 1988                              "PHONETIC EXTENSIONS SUPPLEMENT",
 1989                              "PHONETICEXTENSIONSSUPPLEMENT");
 1990 
 1991         /**
 1992          * Constant for the "Combining Diacritical Marks Supplement" Unicode
 1993          * character block.
 1994          * @since 1.7
 1995          */
 1996         public static final UnicodeBlock COMBINING_DIACRITICAL_MARKS_SUPPLEMENT =
 1997             new UnicodeBlock("COMBINING_DIACRITICAL_MARKS_SUPPLEMENT",
 1998                              "COMBINING DIACRITICAL MARKS SUPPLEMENT",
 1999                              "COMBININGDIACRITICALMARKSSUPPLEMENT");
 2000 
 2001         /**
 2002          * Constant for the "Glagolitic" Unicode character block.
 2003          * @since 1.7
 2004          */
 2005         public static final UnicodeBlock GLAGOLITIC =
 2006             new UnicodeBlock("GLAGOLITIC");
 2007 
 2008         /**
 2009          * Constant for the "Latin Extended-C" Unicode character block.
 2010          * @since 1.7
 2011          */
 2012         public static final UnicodeBlock LATIN_EXTENDED_C =
 2013             new UnicodeBlock("LATIN_EXTENDED_C",
 2014                              "LATIN EXTENDED-C",
 2015                              "LATINEXTENDED-C");
 2016 
 2017         /**
 2018          * Constant for the "Coptic" Unicode character block.
 2019          * @since 1.7
 2020          */
 2021         public static final UnicodeBlock COPTIC =
 2022             new UnicodeBlock("COPTIC");
 2023 
 2024         /**
 2025          * Constant for the "Georgian Supplement" Unicode character block.
 2026          * @since 1.7
 2027          */
 2028         public static final UnicodeBlock GEORGIAN_SUPPLEMENT =
 2029             new UnicodeBlock("GEORGIAN_SUPPLEMENT",
 2030                              "GEORGIAN SUPPLEMENT",
 2031                              "GEORGIANSUPPLEMENT");
 2032 
 2033         /**
 2034          * Constant for the "Tifinagh" Unicode character block.
 2035          * @since 1.7
 2036          */
 2037         public static final UnicodeBlock TIFINAGH =
 2038             new UnicodeBlock("TIFINAGH");
 2039 
 2040         /**
 2041          * Constant for the "Ethiopic Extended" Unicode character block.
 2042          * @since 1.7
 2043          */
 2044         public static final UnicodeBlock ETHIOPIC_EXTENDED =
 2045             new UnicodeBlock("ETHIOPIC_EXTENDED",
 2046                              "ETHIOPIC EXTENDED",
 2047                              "ETHIOPICEXTENDED");
 2048 
 2049         /**
 2050          * Constant for the "Cyrillic Extended-A" Unicode character block.
 2051          * @since 1.7
 2052          */
 2053         public static final UnicodeBlock CYRILLIC_EXTENDED_A =
 2054             new UnicodeBlock("CYRILLIC_EXTENDED_A",
 2055                              "CYRILLIC EXTENDED-A",
 2056                              "CYRILLICEXTENDED-A");
 2057 
 2058         /**
 2059          * Constant for the "Supplemental Punctuation" Unicode character block.
 2060          * @since 1.7
 2061          */
 2062         public static final UnicodeBlock SUPPLEMENTAL_PUNCTUATION =
 2063             new UnicodeBlock("SUPPLEMENTAL_PUNCTUATION",
 2064                              "SUPPLEMENTAL PUNCTUATION",
 2065                              "SUPPLEMENTALPUNCTUATION");
 2066 
 2067         /**
 2068          * Constant for the "CJK Strokes" Unicode character block.
 2069          * @since 1.7
 2070          */
 2071         public static final UnicodeBlock CJK_STROKES =
 2072             new UnicodeBlock("CJK_STROKES",
 2073                              "CJK STROKES",
 2074                              "CJKSTROKES");
 2075 
 2076         /**
 2077          * Constant for the "Lisu" Unicode character block.
 2078          * @since 1.7
 2079          */
 2080         public static final UnicodeBlock LISU =
 2081             new UnicodeBlock("LISU");
 2082 
 2083         /**
 2084          * Constant for the "Vai" Unicode character block.
 2085          * @since 1.7
 2086          */
 2087         public static final UnicodeBlock VAI =
 2088             new UnicodeBlock("VAI");
 2089 
 2090         /**
 2091          * Constant for the "Cyrillic Extended-B" Unicode character block.
 2092          * @since 1.7
 2093          */
 2094         public static final UnicodeBlock CYRILLIC_EXTENDED_B =
 2095             new UnicodeBlock("CYRILLIC_EXTENDED_B",
 2096                              "CYRILLIC EXTENDED-B",
 2097                              "CYRILLICEXTENDED-B");
 2098 
 2099         /**
 2100          * Constant for the "Bamum" Unicode character block.
 2101          * @since 1.7
 2102          */
 2103         public static final UnicodeBlock BAMUM =
 2104             new UnicodeBlock("BAMUM");
 2105 
 2106         /**
 2107          * Constant for the "Modifier Tone Letters" Unicode character block.
 2108          * @since 1.7
 2109          */
 2110         public static final UnicodeBlock MODIFIER_TONE_LETTERS =
 2111             new UnicodeBlock("MODIFIER_TONE_LETTERS",
 2112                              "MODIFIER TONE LETTERS",
 2113                              "MODIFIERTONELETTERS");
 2114 
 2115         /**
 2116          * Constant for the "Latin Extended-D" Unicode character block.
 2117          * @since 1.7
 2118          */
 2119         public static final UnicodeBlock LATIN_EXTENDED_D =
 2120             new UnicodeBlock("LATIN_EXTENDED_D",
 2121                              "LATIN EXTENDED-D",
 2122                              "LATINEXTENDED-D");
 2123 
 2124         /**
 2125          * Constant for the "Syloti Nagri" Unicode character block.
 2126          * @since 1.7
 2127          */
 2128         public static final UnicodeBlock SYLOTI_NAGRI =
 2129             new UnicodeBlock("SYLOTI_NAGRI",
 2130                              "SYLOTI NAGRI",
 2131                              "SYLOTINAGRI");
 2132 
 2133         /**
 2134          * Constant for the "Common Indic Number Forms" Unicode character block.
 2135          * @since 1.7
 2136          */
 2137         public static final UnicodeBlock COMMON_INDIC_NUMBER_FORMS =
 2138             new UnicodeBlock("COMMON_INDIC_NUMBER_FORMS",
 2139                              "COMMON INDIC NUMBER FORMS",
 2140                              "COMMONINDICNUMBERFORMS");
 2141 
 2142         /**
 2143          * Constant for the "Phags-pa" Unicode character block.
 2144          * @since 1.7
 2145          */
 2146         public static final UnicodeBlock PHAGS_PA =
 2147             new UnicodeBlock("PHAGS_PA",
 2148                              "PHAGS-PA");
 2149 
 2150         /**
 2151          * Constant for the "Saurashtra" Unicode character block.
 2152          * @since 1.7
 2153          */
 2154         public static final UnicodeBlock SAURASHTRA =
 2155             new UnicodeBlock("SAURASHTRA");
 2156 
 2157         /**
 2158          * Constant for the "Devanagari Extended" Unicode character block.
 2159          * @since 1.7
 2160          */
 2161         public static final UnicodeBlock DEVANAGARI_EXTENDED =
 2162             new UnicodeBlock("DEVANAGARI_EXTENDED",
 2163                              "DEVANAGARI EXTENDED",
 2164                              "DEVANAGARIEXTENDED");
 2165 
 2166         /**
 2167          * Constant for the "Kayah Li" Unicode character block.
 2168          * @since 1.7
 2169          */
 2170         public static final UnicodeBlock KAYAH_LI =
 2171             new UnicodeBlock("KAYAH_LI",
 2172                              "KAYAH LI",
 2173                              "KAYAHLI");
 2174 
 2175         /**
 2176          * Constant for the "Rejang" Unicode character block.
 2177          * @since 1.7
 2178          */
 2179         public static final UnicodeBlock REJANG =
 2180             new UnicodeBlock("REJANG");
 2181 
 2182         /**
 2183          * Constant for the "Hangul Jamo Extended-A" Unicode character block.
 2184          * @since 1.7
 2185          */
 2186         public static final UnicodeBlock HANGUL_JAMO_EXTENDED_A =
 2187             new UnicodeBlock("HANGUL_JAMO_EXTENDED_A",
 2188                              "HANGUL JAMO EXTENDED-A",
 2189                              "HANGULJAMOEXTENDED-A");
 2190 
 2191         /**
 2192          * Constant for the "Javanese" Unicode character block.
 2193          * @since 1.7
 2194          */
 2195         public static final UnicodeBlock JAVANESE =
 2196             new UnicodeBlock("JAVANESE");
 2197 
 2198         /**
 2199          * Constant for the "Cham" Unicode character block.
 2200          * @since 1.7
 2201          */
 2202         public static final UnicodeBlock CHAM =
 2203             new UnicodeBlock("CHAM");
 2204 
 2205         /**
 2206          * Constant for the "Myanmar Extended-A" Unicode character block.
 2207          * @since 1.7
 2208          */
 2209         public static final UnicodeBlock MYANMAR_EXTENDED_A =
 2210             new UnicodeBlock("MYANMAR_EXTENDED_A",
 2211                              "MYANMAR EXTENDED-A",
 2212                              "MYANMAREXTENDED-A");
 2213 
 2214         /**
 2215          * Constant for the "Tai Viet" Unicode character block.
 2216          * @since 1.7
 2217          */
 2218         public static final UnicodeBlock TAI_VIET =
 2219             new UnicodeBlock("TAI_VIET",
 2220                              "TAI VIET",
 2221                              "TAIVIET");
 2222 
 2223         /**
 2224          * Constant for the "Ethiopic Extended-A" Unicode character block.
 2225          * @since 1.7
 2226          */
 2227         public static final UnicodeBlock ETHIOPIC_EXTENDED_A =
 2228             new UnicodeBlock("ETHIOPIC_EXTENDED_A",
 2229                              "ETHIOPIC EXTENDED-A",
 2230                              "ETHIOPICEXTENDED-A");
 2231 
 2232         /**
 2233          * Constant for the "Meetei Mayek" Unicode character block.
 2234          * @since 1.7
 2235          */
 2236         public static final UnicodeBlock MEETEI_MAYEK =
 2237             new UnicodeBlock("MEETEI_MAYEK",
 2238                              "MEETEI MAYEK",
 2239                              "MEETEIMAYEK");
 2240 
 2241         /**
 2242          * Constant for the "Hangul Jamo Extended-B" Unicode character block.
 2243          * @since 1.7
 2244          */
 2245         public static final UnicodeBlock HANGUL_JAMO_EXTENDED_B =
 2246             new UnicodeBlock("HANGUL_JAMO_EXTENDED_B",
 2247                              "HANGUL JAMO EXTENDED-B",
 2248                              "HANGULJAMOEXTENDED-B");
 2249 
 2250         /**
 2251          * Constant for the "Vertical Forms" Unicode character block.
 2252          * @since 1.7
 2253          */
 2254         public static final UnicodeBlock VERTICAL_FORMS =
 2255             new UnicodeBlock("VERTICAL_FORMS",
 2256                              "VERTICAL FORMS",
 2257                              "VERTICALFORMS");
 2258 
 2259         /**
 2260          * Constant for the "Ancient Greek Numbers" Unicode character block.
 2261          * @since 1.7
 2262          */
 2263         public static final UnicodeBlock ANCIENT_GREEK_NUMBERS =
 2264             new UnicodeBlock("ANCIENT_GREEK_NUMBERS",
 2265                              "ANCIENT GREEK NUMBERS",
 2266                              "ANCIENTGREEKNUMBERS");
 2267 
 2268         /**
 2269          * Constant for the "Ancient Symbols" Unicode character block.
 2270          * @since 1.7
 2271          */
 2272         public static final UnicodeBlock ANCIENT_SYMBOLS =
 2273             new UnicodeBlock("ANCIENT_SYMBOLS",
 2274                              "ANCIENT SYMBOLS",
 2275                              "ANCIENTSYMBOLS");
 2276 
 2277         /**
 2278          * Constant for the "Phaistos Disc" Unicode character block.
 2279          * @since 1.7
 2280          */
 2281         public static final UnicodeBlock PHAISTOS_DISC =
 2282             new UnicodeBlock("PHAISTOS_DISC",
 2283                              "PHAISTOS DISC",
 2284                              "PHAISTOSDISC");
 2285 
 2286         /**
 2287          * Constant for the "Lycian" Unicode character block.
 2288          * @since 1.7
 2289          */
 2290         public static final UnicodeBlock LYCIAN =
 2291             new UnicodeBlock("LYCIAN");
 2292 
 2293         /**
 2294          * Constant for the "Carian" Unicode character block.
 2295          * @since 1.7
 2296          */
 2297         public static final UnicodeBlock CARIAN =
 2298             new UnicodeBlock("CARIAN");
 2299 
 2300         /**
 2301          * Constant for the "Old Persian" Unicode character block.
 2302          * @since 1.7
 2303          */
 2304         public static final UnicodeBlock OLD_PERSIAN =
 2305             new UnicodeBlock("OLD_PERSIAN",
 2306                              "OLD PERSIAN",
 2307                              "OLDPERSIAN");
 2308 
 2309         /**
 2310          * Constant for the "Imperial Aramaic" Unicode character block.
 2311          * @since 1.7
 2312          */
 2313         public static final UnicodeBlock IMPERIAL_ARAMAIC =
 2314             new UnicodeBlock("IMPERIAL_ARAMAIC",
 2315                              "IMPERIAL ARAMAIC",
 2316                              "IMPERIALARAMAIC");
 2317 
 2318         /**
 2319          * Constant for the "Phoenician" Unicode character block.
 2320          * @since 1.7
 2321          */
 2322         public static final UnicodeBlock PHOENICIAN =
 2323             new UnicodeBlock("PHOENICIAN");
 2324 
 2325         /**
 2326          * Constant for the "Lydian" Unicode character block.
 2327          * @since 1.7
 2328          */
 2329         public static final UnicodeBlock LYDIAN =
 2330             new UnicodeBlock("LYDIAN");
 2331 
 2332         /**
 2333          * Constant for the "Kharoshthi" Unicode character block.
 2334          * @since 1.7
 2335          */
 2336         public static final UnicodeBlock KHAROSHTHI =
 2337             new UnicodeBlock("KHAROSHTHI");
 2338 
 2339         /**
 2340          * Constant for the "Old South Arabian" Unicode character block.
 2341          * @since 1.7
 2342          */
 2343         public static final UnicodeBlock OLD_SOUTH_ARABIAN =
 2344             new UnicodeBlock("OLD_SOUTH_ARABIAN",
 2345                              "OLD SOUTH ARABIAN",
 2346                              "OLDSOUTHARABIAN");
 2347 
 2348         /**
 2349          * Constant for the "Avestan" Unicode character block.
 2350          * @since 1.7
 2351          */
 2352         public static final UnicodeBlock AVESTAN =
 2353             new UnicodeBlock("AVESTAN");
 2354 
 2355         /**
 2356          * Constant for the "Inscriptional Parthian" Unicode character block.
 2357          * @since 1.7
 2358          */
 2359         public static final UnicodeBlock INSCRIPTIONAL_PARTHIAN =
 2360             new UnicodeBlock("INSCRIPTIONAL_PARTHIAN",
 2361                              "INSCRIPTIONAL PARTHIAN",
 2362                              "INSCRIPTIONALPARTHIAN");
 2363 
 2364         /**
 2365          * Constant for the "Inscriptional Pahlavi" Unicode character block.
 2366          * @since 1.7
 2367          */
 2368         public static final UnicodeBlock INSCRIPTIONAL_PAHLAVI =
 2369             new UnicodeBlock("INSCRIPTIONAL_PAHLAVI",
 2370                              "INSCRIPTIONAL PAHLAVI",
 2371                              "INSCRIPTIONALPAHLAVI");
 2372 
 2373         /**
 2374          * Constant for the "Old Turkic" Unicode character block.
 2375          * @since 1.7
 2376          */
 2377         public static final UnicodeBlock OLD_TURKIC =
 2378             new UnicodeBlock("OLD_TURKIC",
 2379                              "OLD TURKIC",
 2380                              "OLDTURKIC");
 2381 
 2382         /**
 2383          * Constant for the "Rumi Numeral Symbols" Unicode character block.
 2384          * @since 1.7
 2385          */
 2386         public static final UnicodeBlock RUMI_NUMERAL_SYMBOLS =
 2387             new UnicodeBlock("RUMI_NUMERAL_SYMBOLS",
 2388                              "RUMI NUMERAL SYMBOLS",
 2389                              "RUMINUMERALSYMBOLS");
 2390 
 2391         /**
 2392          * Constant for the "Brahmi" Unicode character block.
 2393          * @since 1.7
 2394          */
 2395         public static final UnicodeBlock BRAHMI =
 2396             new UnicodeBlock("BRAHMI");
 2397 
 2398         /**
 2399          * Constant for the "Kaithi" Unicode character block.
 2400          * @since 1.7
 2401          */
 2402         public static final UnicodeBlock KAITHI =
 2403             new UnicodeBlock("KAITHI");
 2404 
 2405         /**
 2406          * Constant for the "Cuneiform" Unicode character block.
 2407          * @since 1.7
 2408          */
 2409         public static final UnicodeBlock CUNEIFORM =
 2410             new UnicodeBlock("CUNEIFORM");
 2411 
 2412         /**
 2413          * Constant for the "Cuneiform Numbers and Punctuation" Unicode
 2414          * character block.
 2415          * @since 1.7
 2416          */
 2417         public static final UnicodeBlock CUNEIFORM_NUMBERS_AND_PUNCTUATION =
 2418             new UnicodeBlock("CUNEIFORM_NUMBERS_AND_PUNCTUATION",
 2419                              "CUNEIFORM NUMBERS AND PUNCTUATION",
 2420                              "CUNEIFORMNUMBERSANDPUNCTUATION");
 2421 
 2422         /**
 2423          * Constant for the "Egyptian Hieroglyphs" Unicode character block.
 2424          * @since 1.7
 2425          */
 2426         public static final UnicodeBlock EGYPTIAN_HIEROGLYPHS =
 2427             new UnicodeBlock("EGYPTIAN_HIEROGLYPHS",
 2428                              "EGYPTIAN HIEROGLYPHS",
 2429                              "EGYPTIANHIEROGLYPHS");
 2430 
 2431         /**
 2432          * Constant for the "Bamum Supplement" Unicode character block.
 2433          * @since 1.7
 2434          */
 2435         public static final UnicodeBlock BAMUM_SUPPLEMENT =
 2436             new UnicodeBlock("BAMUM_SUPPLEMENT",
 2437                              "BAMUM SUPPLEMENT",
 2438                              "BAMUMSUPPLEMENT");
 2439 
 2440         /**
 2441          * Constant for the "Kana Supplement" Unicode character block.
 2442          * @since 1.7
 2443          */
 2444         public static final UnicodeBlock KANA_SUPPLEMENT =
 2445             new UnicodeBlock("KANA_SUPPLEMENT",
 2446                              "KANA SUPPLEMENT",
 2447                              "KANASUPPLEMENT");
 2448 
 2449         /**
 2450          * Constant for the "Ancient Greek Musical Notation" Unicode character
 2451          * block.
 2452          * @since 1.7
 2453          */
 2454         public static final UnicodeBlock ANCIENT_GREEK_MUSICAL_NOTATION =
 2455             new UnicodeBlock("ANCIENT_GREEK_MUSICAL_NOTATION",
 2456                              "ANCIENT GREEK MUSICAL NOTATION",
 2457                              "ANCIENTGREEKMUSICALNOTATION");
 2458 
 2459         /**
 2460          * Constant for the "Counting Rod Numerals" Unicode character block.
 2461          * @since 1.7
 2462          */
 2463         public static final UnicodeBlock COUNTING_ROD_NUMERALS =
 2464             new UnicodeBlock("COUNTING_ROD_NUMERALS",
 2465                              "COUNTING ROD NUMERALS",
 2466                              "COUNTINGRODNUMERALS");
 2467 
 2468         /**
 2469          * Constant for the "Mahjong Tiles" Unicode character block.
 2470          * @since 1.7
 2471          */
 2472         public static final UnicodeBlock MAHJONG_TILES =
 2473             new UnicodeBlock("MAHJONG_TILES",
 2474                              "MAHJONG TILES",
 2475                              "MAHJONGTILES");
 2476 
 2477         /**
 2478          * Constant for the "Domino Tiles" Unicode character block.
 2479          * @since 1.7
 2480          */
 2481         public static final UnicodeBlock DOMINO_TILES =
 2482             new UnicodeBlock("DOMINO_TILES",
 2483                              "DOMINO TILES",
 2484                              "DOMINOTILES");
 2485 
 2486         /**
 2487          * Constant for the "Playing Cards" Unicode character block.
 2488          * @since 1.7
 2489          */
 2490         public static final UnicodeBlock PLAYING_CARDS =
 2491             new UnicodeBlock("PLAYING_CARDS",
 2492                              "PLAYING CARDS",
 2493                              "PLAYINGCARDS");
 2494 
 2495         /**
 2496          * Constant for the "Enclosed Alphanumeric Supplement" Unicode character
 2497          * block.
 2498          * @since 1.7
 2499          */
 2500         public static final UnicodeBlock ENCLOSED_ALPHANUMERIC_SUPPLEMENT =
 2501             new UnicodeBlock("ENCLOSED_ALPHANUMERIC_SUPPLEMENT",
 2502                              "ENCLOSED ALPHANUMERIC SUPPLEMENT",
 2503                              "ENCLOSEDALPHANUMERICSUPPLEMENT");
 2504 
 2505         /**
 2506          * Constant for the "Enclosed Ideographic Supplement" Unicode character
 2507          * block.
 2508          * @since 1.7
 2509          */
 2510         public static final UnicodeBlock ENCLOSED_IDEOGRAPHIC_SUPPLEMENT =
 2511             new UnicodeBlock("ENCLOSED_IDEOGRAPHIC_SUPPLEMENT",
 2512                              "ENCLOSED IDEOGRAPHIC SUPPLEMENT",
 2513                              "ENCLOSEDIDEOGRAPHICSUPPLEMENT");
 2514 
 2515         /**
 2516          * Constant for the "Miscellaneous Symbols And Pictographs" Unicode
 2517          * character block.
 2518          * @since 1.7
 2519          */
 2520         public static final UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS =
 2521             new UnicodeBlock("MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS",
 2522                              "MISCELLANEOUS SYMBOLS AND PICTOGRAPHS",
 2523                              "MISCELLANEOUSSYMBOLSANDPICTOGRAPHS");
 2524 
 2525         /**
 2526          * Constant for the "Emoticons" Unicode character block.
 2527          * @since 1.7
 2528          */
 2529         public static final UnicodeBlock EMOTICONS =
 2530             new UnicodeBlock("EMOTICONS");
 2531 
 2532         /**
 2533          * Constant for the "Transport And Map Symbols" Unicode character block.
 2534          * @since 1.7
 2535          */
 2536         public static final UnicodeBlock TRANSPORT_AND_MAP_SYMBOLS =
 2537             new UnicodeBlock("TRANSPORT_AND_MAP_SYMBOLS",
 2538                              "TRANSPORT AND MAP SYMBOLS",
 2539                              "TRANSPORTANDMAPSYMBOLS");
 2540 
 2541         /**
 2542          * Constant for the "Alchemical Symbols" Unicode character block.
 2543          * @since 1.7
 2544          */
 2545         public static final UnicodeBlock ALCHEMICAL_SYMBOLS =
 2546             new UnicodeBlock("ALCHEMICAL_SYMBOLS",
 2547                              "ALCHEMICAL SYMBOLS",
 2548                              "ALCHEMICALSYMBOLS");
 2549 
 2550         /**
 2551          * Constant for the "CJK Unified Ideographs Extension C" Unicode
 2552          * character block.
 2553          * @since 1.7
 2554          */
 2555         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C =
 2556             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C",
 2557                              "CJK UNIFIED IDEOGRAPHS EXTENSION C",
 2558                              "CJKUNIFIEDIDEOGRAPHSEXTENSIONC");
 2559 
 2560         /**
 2561          * Constant for the "CJK Unified Ideographs Extension D" Unicode
 2562          * character block.
 2563          * @since 1.7
 2564          */
 2565         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D =
 2566             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D",
 2567                              "CJK UNIFIED IDEOGRAPHS EXTENSION D",
 2568                              "CJKUNIFIEDIDEOGRAPHSEXTENSIOND");
 2569 
 2570         /**
 2571          * Constant for the "Arabic Extended-A" Unicode character block.
 2572          * @since 1.8
 2573          */
 2574         public static final UnicodeBlock ARABIC_EXTENDED_A =
 2575             new UnicodeBlock("ARABIC_EXTENDED_A",
 2576                              "ARABIC EXTENDED-A",
 2577                              "ARABICEXTENDED-A");
 2578 
 2579         /**
 2580          * Constant for the "Sundanese Supplement" Unicode character block.
 2581          * @since 1.8
 2582          */
 2583         public static final UnicodeBlock SUNDANESE_SUPPLEMENT =
 2584             new UnicodeBlock("SUNDANESE_SUPPLEMENT",
 2585                              "SUNDANESE SUPPLEMENT",
 2586                              "SUNDANESESUPPLEMENT");
 2587 
 2588         /**
 2589          * Constant for the "Meetei Mayek Extensions" Unicode character block.
 2590          * @since 1.8
 2591          */
 2592         public static final UnicodeBlock MEETEI_MAYEK_EXTENSIONS =
 2593             new UnicodeBlock("MEETEI_MAYEK_EXTENSIONS",
 2594                              "MEETEI MAYEK EXTENSIONS",
 2595                              "MEETEIMAYEKEXTENSIONS");
 2596 
 2597         /**
 2598          * Constant for the "Meroitic Hieroglyphs" Unicode character block.
 2599          * @since 1.8
 2600          */
 2601         public static final UnicodeBlock MEROITIC_HIEROGLYPHS =
 2602             new UnicodeBlock("MEROITIC_HIEROGLYPHS",
 2603                              "MEROITIC HIEROGLYPHS",
 2604                              "MEROITICHIEROGLYPHS");
 2605 
 2606         /**
 2607          * Constant for the "Meroitic Cursive" Unicode character block.
 2608          * @since 1.8
 2609          */
 2610         public static final UnicodeBlock MEROITIC_CURSIVE =
 2611             new UnicodeBlock("MEROITIC_CURSIVE",
 2612                              "MEROITIC CURSIVE",
 2613                              "MEROITICCURSIVE");
 2614 
 2615         /**
 2616          * Constant for the "Sora Sompeng" Unicode character block.
 2617          * @since 1.8
 2618          */
 2619         public static final UnicodeBlock SORA_SOMPENG =
 2620             new UnicodeBlock("SORA_SOMPENG",
 2621                              "SORA SOMPENG",
 2622                              "SORASOMPENG");
 2623 
 2624         /**
 2625          * Constant for the "Chakma" Unicode character block.
 2626          * @since 1.8
 2627          */
 2628         public static final UnicodeBlock CHAKMA =
 2629             new UnicodeBlock("CHAKMA");
 2630 
 2631         /**
 2632          * Constant for the "Sharada" Unicode character block.
 2633          * @since 1.8
 2634          */
 2635         public static final UnicodeBlock SHARADA =
 2636             new UnicodeBlock("SHARADA");
 2637 
 2638         /**
 2639          * Constant for the "Takri" Unicode character block.
 2640          * @since 1.8
 2641          */
 2642         public static final UnicodeBlock TAKRI =
 2643             new UnicodeBlock("TAKRI");
 2644 
 2645         /**
 2646          * Constant for the "Miao" Unicode character block.
 2647          * @since 1.8
 2648          */
 2649         public static final UnicodeBlock MIAO =
 2650             new UnicodeBlock("MIAO");
 2651 
 2652         /**
 2653          * Constant for the "Arabic Mathematical Alphabetic Symbols" Unicode
 2654          * character block.
 2655          * @since 1.8
 2656          */
 2657         public static final UnicodeBlock ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS =
 2658             new UnicodeBlock("ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS",
 2659                              "ARABIC MATHEMATICAL ALPHABETIC SYMBOLS",
 2660                              "ARABICMATHEMATICALALPHABETICSYMBOLS");
 2661 
 2662         /**
 2663          * Constant for the "Combining Diacritical Marks Extended" Unicode
 2664          * character block.
 2665          * @since 9
 2666          */
 2667         public static final UnicodeBlock COMBINING_DIACRITICAL_MARKS_EXTENDED =
 2668             new UnicodeBlock("COMBINING_DIACRITICAL_MARKS_EXTENDED",
 2669                              "COMBINING DIACRITICAL MARKS EXTENDED",
 2670                              "COMBININGDIACRITICALMARKSEXTENDED");
 2671 
 2672         /**
 2673          * Constant for the "Myanmar Extended-B" Unicode character block.
 2674          * @since 9
 2675          */
 2676         public static final UnicodeBlock MYANMAR_EXTENDED_B =
 2677             new UnicodeBlock("MYANMAR_EXTENDED_B",
 2678                              "MYANMAR EXTENDED-B",
 2679                              "MYANMAREXTENDED-B");
 2680 
 2681         /**
 2682          * Constant for the "Latin Extended-E" Unicode character block.
 2683          * @since 9
 2684          */
 2685         public static final UnicodeBlock LATIN_EXTENDED_E =
 2686             new UnicodeBlock("LATIN_EXTENDED_E",
 2687                              "LATIN EXTENDED-E",
 2688                              "LATINEXTENDED-E");
 2689 
 2690         /**
 2691          * Constant for the "Coptic Epact Numbers" Unicode character block.
 2692          * @since 9
 2693          */
 2694         public static final UnicodeBlock COPTIC_EPACT_NUMBERS =
 2695             new UnicodeBlock("COPTIC_EPACT_NUMBERS",
 2696                              "COPTIC EPACT NUMBERS",
 2697                              "COPTICEPACTNUMBERS");
 2698 
 2699         /**
 2700          * Constant for the "Old Permic" Unicode character block.
 2701          * @since 9
 2702          */
 2703         public static final UnicodeBlock OLD_PERMIC =
 2704             new UnicodeBlock("OLD_PERMIC",
 2705                              "OLD PERMIC",
 2706                              "OLDPERMIC");
 2707 
 2708         /**
 2709          * Constant for the "Elbasan" Unicode character block.
 2710          * @since 9
 2711          */
 2712         public static final UnicodeBlock ELBASAN =
 2713             new UnicodeBlock("ELBASAN");
 2714 
 2715         /**
 2716          * Constant for the "Caucasian Albanian" Unicode character block.
 2717          * @since 9
 2718          */
 2719         public static final UnicodeBlock CAUCASIAN_ALBANIAN =
 2720             new UnicodeBlock("CAUCASIAN_ALBANIAN",
 2721                              "CAUCASIAN ALBANIAN",
 2722                              "CAUCASIANALBANIAN");
 2723 
 2724         /**
 2725          * Constant for the "Linear A" Unicode character block.
 2726          * @since 9
 2727          */
 2728         public static final UnicodeBlock LINEAR_A =
 2729             new UnicodeBlock("LINEAR_A",
 2730                              "LINEAR A",
 2731                              "LINEARA");
 2732 
 2733         /**
 2734          * Constant for the "Palmyrene" Unicode character block.
 2735          * @since 9
 2736          */
 2737         public static final UnicodeBlock PALMYRENE =
 2738             new UnicodeBlock("PALMYRENE");
 2739 
 2740         /**
 2741          * Constant for the "Nabataean" Unicode character block.
 2742          * @since 9
 2743          */
 2744         public static final UnicodeBlock NABATAEAN =
 2745             new UnicodeBlock("NABATAEAN");
 2746 
 2747         /**
 2748          * Constant for the "Old North Arabian" Unicode character block.
 2749          * @since 9
 2750          */
 2751         public static final UnicodeBlock OLD_NORTH_ARABIAN =
 2752             new UnicodeBlock("OLD_NORTH_ARABIAN",
 2753                              "OLD NORTH ARABIAN",
 2754                              "OLDNORTHARABIAN");
 2755 
 2756         /**
 2757          * Constant for the "Manichaean" Unicode character block.
 2758          * @since 9
 2759          */
 2760         public static final UnicodeBlock MANICHAEAN =
 2761             new UnicodeBlock("MANICHAEAN");
 2762 
 2763         /**
 2764          * Constant for the "Psalter Pahlavi" Unicode character block.
 2765          * @since 9
 2766          */
 2767         public static final UnicodeBlock PSALTER_PAHLAVI =
 2768             new UnicodeBlock("PSALTER_PAHLAVI",
 2769                              "PSALTER PAHLAVI",
 2770                              "PSALTERPAHLAVI");
 2771 
 2772         /**
 2773          * Constant for the "Mahajani" Unicode character block.
 2774          * @since 9
 2775          */
 2776         public static final UnicodeBlock MAHAJANI =
 2777             new UnicodeBlock("MAHAJANI");
 2778 
 2779         /**
 2780          * Constant for the "Sinhala Archaic Numbers" Unicode character block.
 2781          * @since 9
 2782          */
 2783         public static final UnicodeBlock SINHALA_ARCHAIC_NUMBERS =
 2784             new UnicodeBlock("SINHALA_ARCHAIC_NUMBERS",
 2785                              "SINHALA ARCHAIC NUMBERS",
 2786                              "SINHALAARCHAICNUMBERS");
 2787 
 2788         /**
 2789          * Constant for the "Khojki" Unicode character block.
 2790          * @since 9
 2791          */
 2792         public static final UnicodeBlock KHOJKI =
 2793             new UnicodeBlock("KHOJKI");
 2794 
 2795         /**
 2796          * Constant for the "Khudawadi" Unicode character block.
 2797          * @since 9
 2798          */
 2799         public static final UnicodeBlock KHUDAWADI =
 2800             new UnicodeBlock("KHUDAWADI");
 2801 
 2802         /**
 2803          * Constant for the "Grantha" Unicode character block.
 2804          * @since 9
 2805          */
 2806         public static final UnicodeBlock GRANTHA =
 2807             new UnicodeBlock("GRANTHA");
 2808 
 2809         /**
 2810          * Constant for the "Tirhuta" Unicode character block.
 2811          * @since 9
 2812          */
 2813         public static final UnicodeBlock TIRHUTA =
 2814             new UnicodeBlock("TIRHUTA");
 2815 
 2816         /**
 2817          * Constant for the "Siddham" Unicode character block.
 2818          * @since 9
 2819          */
 2820         public static final UnicodeBlock SIDDHAM =
 2821             new UnicodeBlock("SIDDHAM");
 2822 
 2823         /**
 2824          * Constant for the "Modi" Unicode character block.
 2825          * @since 9
 2826          */
 2827         public static final UnicodeBlock MODI =
 2828             new UnicodeBlock("MODI");
 2829 
 2830         /**
 2831          * Constant for the "Warang Citi" Unicode character block.
 2832          * @since 9
 2833          */
 2834         public static final UnicodeBlock WARANG_CITI =
 2835             new UnicodeBlock("WARANG_CITI",
 2836                              "WARANG CITI",
 2837                              "WARANGCITI");
 2838 
 2839         /**
 2840          * Constant for the "Pau Cin Hau" Unicode character block.
 2841          * @since 9
 2842          */
 2843         public static final UnicodeBlock PAU_CIN_HAU =
 2844             new UnicodeBlock("PAU_CIN_HAU",
 2845                              "PAU CIN HAU",
 2846                              "PAUCINHAU");
 2847 
 2848         /**
 2849          * Constant for the "Mro" Unicode character block.
 2850          * @since 9
 2851          */
 2852         public static final UnicodeBlock MRO =
 2853             new UnicodeBlock("MRO");
 2854 
 2855         /**
 2856          * Constant for the "Bassa Vah" Unicode character block.
 2857          * @since 9
 2858          */
 2859         public static final UnicodeBlock BASSA_VAH =
 2860             new UnicodeBlock("BASSA_VAH",
 2861                              "BASSA VAH",
 2862                              "BASSAVAH");
 2863 
 2864         /**
 2865          * Constant for the "Pahawh Hmong" Unicode character block.
 2866          * @since 9
 2867          */
 2868         public static final UnicodeBlock PAHAWH_HMONG =
 2869             new UnicodeBlock("PAHAWH_HMONG",
 2870                              "PAHAWH HMONG",
 2871                              "PAHAWHHMONG");
 2872 
 2873         /**
 2874          * Constant for the "Duployan" Unicode character block.
 2875          * @since 9
 2876          */
 2877         public static final UnicodeBlock DUPLOYAN =
 2878             new UnicodeBlock("DUPLOYAN");
 2879 
 2880         /**
 2881          * Constant for the "Shorthand Format Controls" Unicode character block.
 2882          * @since 9
 2883          */
 2884         public static final UnicodeBlock SHORTHAND_FORMAT_CONTROLS =
 2885             new UnicodeBlock("SHORTHAND_FORMAT_CONTROLS",
 2886                              "SHORTHAND FORMAT CONTROLS",
 2887                              "SHORTHANDFORMATCONTROLS");
 2888 
 2889         /**
 2890          * Constant for the "Mende Kikakui" Unicode character block.
 2891          * @since 9
 2892          */
 2893         public static final UnicodeBlock MENDE_KIKAKUI =
 2894             new UnicodeBlock("MENDE_KIKAKUI",
 2895                              "MENDE KIKAKUI",
 2896                              "MENDEKIKAKUI");
 2897 
 2898         /**
 2899          * Constant for the "Ornamental Dingbats" Unicode character block.
 2900          * @since 9
 2901          */
 2902         public static final UnicodeBlock ORNAMENTAL_DINGBATS =
 2903             new UnicodeBlock("ORNAMENTAL_DINGBATS",
 2904                              "ORNAMENTAL DINGBATS",
 2905                              "ORNAMENTALDINGBATS");
 2906 
 2907         /**
 2908          * Constant for the "Geometric Shapes Extended" Unicode character block.
 2909          * @since 9
 2910          */
 2911         public static final UnicodeBlock GEOMETRIC_SHAPES_EXTENDED =
 2912             new UnicodeBlock("GEOMETRIC_SHAPES_EXTENDED",
 2913                              "GEOMETRIC SHAPES EXTENDED",
 2914                              "GEOMETRICSHAPESEXTENDED");
 2915 
 2916         /**
 2917          * Constant for the "Supplemental Arrows-C" Unicode character block.
 2918          * @since 9
 2919          */
 2920         public static final UnicodeBlock SUPPLEMENTAL_ARROWS_C =
 2921             new UnicodeBlock("SUPPLEMENTAL_ARROWS_C",
 2922                              "SUPPLEMENTAL ARROWS-C",
 2923                              "SUPPLEMENTALARROWS-C");
 2924 
 2925         /**
 2926          * Constant for the "Cherokee Supplement" Unicode character block.
 2927          * @since 9
 2928          */
 2929         public static final UnicodeBlock CHEROKEE_SUPPLEMENT =
 2930             new UnicodeBlock("CHEROKEE_SUPPLEMENT",
 2931                              "CHEROKEE SUPPLEMENT",
 2932                              "CHEROKEESUPPLEMENT");
 2933 
 2934         /**
 2935          * Constant for the "Hatran" Unicode character block.
 2936          * @since 9
 2937          */
 2938         public static final UnicodeBlock HATRAN =
 2939             new UnicodeBlock("HATRAN");
 2940 
 2941         /**
 2942          * Constant for the "Old Hungarian" Unicode character block.
 2943          * @since 9
 2944          */
 2945         public static final UnicodeBlock OLD_HUNGARIAN =
 2946             new UnicodeBlock("OLD_HUNGARIAN",
 2947                              "OLD HUNGARIAN",
 2948                              "OLDHUNGARIAN");
 2949 
 2950         /**
 2951          * Constant for the "Multani" Unicode character block.
 2952          * @since 9
 2953          */
 2954         public static final UnicodeBlock MULTANI =
 2955             new UnicodeBlock("MULTANI");
 2956 
 2957         /**
 2958          * Constant for the "Ahom" Unicode character block.
 2959          * @since 9
 2960          */
 2961         public static final UnicodeBlock AHOM =
 2962             new UnicodeBlock("AHOM");
 2963 
 2964         /**
 2965          * Constant for the "Early Dynastic Cuneiform" Unicode character block.
 2966          * @since 9
 2967          */
 2968         public static final UnicodeBlock EARLY_DYNASTIC_CUNEIFORM =
 2969             new UnicodeBlock("EARLY_DYNASTIC_CUNEIFORM",
 2970                              "EARLY DYNASTIC CUNEIFORM",
 2971                              "EARLYDYNASTICCUNEIFORM");
 2972 
 2973         /**
 2974          * Constant for the "Anatolian Hieroglyphs" Unicode character block.
 2975          * @since 9
 2976          */
 2977         public static final UnicodeBlock ANATOLIAN_HIEROGLYPHS =
 2978             new UnicodeBlock("ANATOLIAN_HIEROGLYPHS",
 2979                              "ANATOLIAN HIEROGLYPHS",
 2980                              "ANATOLIANHIEROGLYPHS");
 2981 
 2982         /**
 2983          * Constant for the "Sutton SignWriting" Unicode character block.
 2984          * @since 9
 2985          */
 2986         public static final UnicodeBlock SUTTON_SIGNWRITING =
 2987             new UnicodeBlock("SUTTON_SIGNWRITING",
 2988                              "SUTTON SIGNWRITING",
 2989                              "SUTTONSIGNWRITING");
 2990 
 2991         /**
 2992          * Constant for the "Supplemental Symbols and Pictographs" Unicode
 2993          * character block.
 2994          * @since 9
 2995          */
 2996         public static final UnicodeBlock SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS =
 2997             new UnicodeBlock("SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS",
 2998                              "SUPPLEMENTAL SYMBOLS AND PICTOGRAPHS",
 2999                              "SUPPLEMENTALSYMBOLSANDPICTOGRAPHS");
 3000 
 3001         /**
 3002          * Constant for the "CJK Unified Ideographs Extension E" Unicode
 3003          * character block.
 3004          * @since 9
 3005          */
 3006         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E =
 3007             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E",
 3008                              "CJK UNIFIED IDEOGRAPHS EXTENSION E",
 3009                              "CJKUNIFIEDIDEOGRAPHSEXTENSIONE");
 3010 
 3011         /**
 3012          * Constant for the "Syriac Supplement" Unicode
 3013          * character block.
 3014          * @since 11
 3015          */
 3016         public static final UnicodeBlock SYRIAC_SUPPLEMENT =
 3017             new UnicodeBlock("SYRIAC_SUPPLEMENT",
 3018                              "SYRIAC SUPPLEMENT",
 3019                              "SYRIACSUPPLEMENT");
 3020 
 3021         /**
 3022          * Constant for the "Cyrillic Extended-C" Unicode
 3023          * character block.
 3024          * @since 11
 3025          */
 3026         public static final UnicodeBlock CYRILLIC_EXTENDED_C =
 3027             new UnicodeBlock("CYRILLIC_EXTENDED_C",
 3028                              "CYRILLIC EXTENDED-C",
 3029                              "CYRILLICEXTENDED-C");
 3030 
 3031         /**
 3032          * Constant for the "Osage" Unicode
 3033          * character block.
 3034          * @since 11
 3035          */
 3036         public static final UnicodeBlock OSAGE =
 3037             new UnicodeBlock("OSAGE");
 3038 
 3039         /**
 3040          * Constant for the "Newa" Unicode
 3041          * character block.
 3042          * @since 11
 3043          */
 3044         public static final UnicodeBlock NEWA =
 3045             new UnicodeBlock("NEWA");
 3046 
 3047         /**
 3048          * Constant for the "Mongolian Supplement" Unicode
 3049          * character block.
 3050          * @since 11
 3051          */
 3052         public static final UnicodeBlock MONGOLIAN_SUPPLEMENT =
 3053             new UnicodeBlock("MONGOLIAN_SUPPLEMENT",
 3054                              "MONGOLIAN SUPPLEMENT",
 3055                              "MONGOLIANSUPPLEMENT");
 3056 
 3057         /**
 3058          * Constant for the "Marchen" Unicode
 3059          * character block.
 3060          * @since 11
 3061          */
 3062         public static final UnicodeBlock MARCHEN =
 3063             new UnicodeBlock("MARCHEN");
 3064 
 3065         /**
 3066          * Constant for the "Ideographic Symbols and Punctuation" Unicode
 3067          * character block.
 3068          * @since 11
 3069          */
 3070         public static final UnicodeBlock IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION =
 3071             new UnicodeBlock("IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION",
 3072                              "IDEOGRAPHIC SYMBOLS AND PUNCTUATION",
 3073                              "IDEOGRAPHICSYMBOLSANDPUNCTUATION");
 3074 
 3075         /**
 3076          * Constant for the "Tangut" Unicode
 3077          * character block.
 3078          * @since 11
 3079          */
 3080         public static final UnicodeBlock TANGUT =
 3081             new UnicodeBlock("TANGUT");
 3082 
 3083         /**
 3084          * Constant for the "Tangut Components" Unicode
 3085          * character block.
 3086          * @since 11
 3087          */
 3088         public static final UnicodeBlock TANGUT_COMPONENTS =
 3089             new UnicodeBlock("TANGUT_COMPONENTS",
 3090                              "TANGUT COMPONENTS",
 3091                              "TANGUTCOMPONENTS");
 3092 
 3093         /**
 3094          * Constant for the "Kana Extended-A" Unicode
 3095          * character block.
 3096          * @since 11
 3097          */
 3098         public static final UnicodeBlock KANA_EXTENDED_A =
 3099             new UnicodeBlock("KANA_EXTENDED_A",
 3100                              "KANA EXTENDED-A",
 3101                              "KANAEXTENDED-A");
 3102         /**
 3103          * Constant for the "Glagolitic Supplement" Unicode
 3104          * character block.
 3105          * @since 11
 3106          */
 3107         public static final UnicodeBlock GLAGOLITIC_SUPPLEMENT =
 3108             new UnicodeBlock("GLAGOLITIC_SUPPLEMENT",
 3109                              "GLAGOLITIC SUPPLEMENT",
 3110                              "GLAGOLITICSUPPLEMENT");
 3111         /**
 3112          * Constant for the "Adlam" Unicode
 3113          * character block.
 3114          * @since 11
 3115          */
 3116         public static final UnicodeBlock ADLAM =
 3117             new UnicodeBlock("ADLAM");
 3118 
 3119         /**
 3120          * Constant for the "Masaram Gondi" Unicode
 3121          * character block.
 3122          * @since 11
 3123          */
 3124         public static final UnicodeBlock MASARAM_GONDI =
 3125             new UnicodeBlock("MASARAM_GONDI",
 3126                              "MASARAM GONDI",
 3127                              "MASARAMGONDI");
 3128 
 3129         /**
 3130          * Constant for the "Zanabazar Square" Unicode
 3131          * character block.
 3132          * @since 11
 3133          */
 3134         public static final UnicodeBlock ZANABAZAR_SQUARE =
 3135             new UnicodeBlock("ZANABAZAR_SQUARE",
 3136                              "ZANABAZAR SQUARE",
 3137                              "ZANABAZARSQUARE");
 3138 
 3139         /**
 3140          * Constant for the "Nushu" Unicode
 3141          * character block.
 3142          * @since 11
 3143          */
 3144         public static final UnicodeBlock NUSHU =
 3145             new UnicodeBlock("NUSHU");
 3146 
 3147         /**
 3148          * Constant for the "Soyombo" Unicode
 3149          * character block.
 3150          * @since 11
 3151          */
 3152         public static final UnicodeBlock SOYOMBO =
 3153             new UnicodeBlock("SOYOMBO");
 3154 
 3155         /**
 3156          * Constant for the "Bhaiksuki" Unicode
 3157          * character block.
 3158          * @since 11
 3159          */
 3160         public static final UnicodeBlock BHAIKSUKI =
 3161             new UnicodeBlock("BHAIKSUKI");
 3162 
 3163         /**
 3164          * Constant for the "CJK Unified Ideographs Extension F" Unicode
 3165          * character block.
 3166          * @since 11
 3167          */
 3168         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F =
 3169             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F",
 3170                              "CJK UNIFIED IDEOGRAPHS EXTENSION F",
 3171                              "CJKUNIFIEDIDEOGRAPHSEXTENSIONF");
 3172         /**
 3173          * Constant for the "Georgian Extended" Unicode
 3174          * character block.
 3175          * @since 12
 3176          */
 3177         public static final UnicodeBlock GEORGIAN_EXTENDED =
 3178             new UnicodeBlock("GEORGIAN_EXTENDED",
 3179                              "GEORGIAN EXTENDED",
 3180                              "GEORGIANEXTENDED");
 3181 
 3182         /**
 3183          * Constant for the "Hanifi Rohingya" Unicode
 3184          * character block.
 3185          * @since 12
 3186          */
 3187         public static final UnicodeBlock HANIFI_ROHINGYA =
 3188             new UnicodeBlock("HANIFI_ROHINGYA",
 3189                              "HANIFI ROHINGYA",
 3190                              "HANIFIROHINGYA");
 3191 
 3192         /**
 3193          * Constant for the "Old Sogdian" Unicode
 3194          * character block.
 3195          * @since 12
 3196          */
 3197         public static final UnicodeBlock OLD_SOGDIAN =
 3198             new UnicodeBlock("OLD_SOGDIAN",
 3199                              "OLD SOGDIAN",
 3200                              "OLDSOGDIAN");
 3201 
 3202         /**
 3203          * Constant for the "Sogdian" Unicode
 3204          * character block.
 3205          * @since 12
 3206          */
 3207         public static final UnicodeBlock SOGDIAN =
 3208             new UnicodeBlock("SOGDIAN");
 3209 
 3210         /**
 3211          * Constant for the "Dogra" Unicode
 3212          * character block.
 3213          * @since 12
 3214          */
 3215         public static final UnicodeBlock DOGRA =
 3216             new UnicodeBlock("DOGRA");
 3217 
 3218         /**
 3219          * Constant for the "Gunjala Gondi" Unicode
 3220          * character block.
 3221          * @since 12
 3222          */
 3223         public static final UnicodeBlock GUNJALA_GONDI =
 3224             new UnicodeBlock("GUNJALA_GONDI",
 3225                              "GUNJALA GONDI",
 3226                              "GUNJALAGONDI");
 3227 
 3228         /**
 3229          * Constant for the "Makasar" Unicode
 3230          * character block.
 3231          * @since 12
 3232          */
 3233         public static final UnicodeBlock MAKASAR =
 3234             new UnicodeBlock("MAKASAR");
 3235 
 3236         /**
 3237          * Constant for the "Medefaidrin" Unicode
 3238          * character block.
 3239          * @since 12
 3240          */
 3241         public static final UnicodeBlock MEDEFAIDRIN =
 3242             new UnicodeBlock("MEDEFAIDRIN");
 3243 
 3244         /**
 3245          * Constant for the "Mayan Numerals" Unicode
 3246          * character block.
 3247          * @since 12
 3248          */
 3249         public static final UnicodeBlock MAYAN_NUMERALS =
 3250             new UnicodeBlock("MAYAN_NUMERALS",
 3251                              "MAYAN NUMERALS",
 3252                              "MAYANNUMERALS");
 3253 
 3254         /**
 3255          * Constant for the "Indic Siyaq Numbers" Unicode
 3256          * character block.
 3257          * @since 12
 3258          */
 3259         public static final UnicodeBlock INDIC_SIYAQ_NUMBERS =
 3260             new UnicodeBlock("INDIC_SIYAQ_NUMBERS",
 3261                              "INDIC SIYAQ NUMBERS",
 3262                              "INDICSIYAQNUMBERS");
 3263 
 3264         /**
 3265          * Constant for the "Chess Symbols" Unicode
 3266          * character block.
 3267          * @since 12
 3268          */
 3269         public static final UnicodeBlock CHESS_SYMBOLS =
 3270             new UnicodeBlock("CHESS_SYMBOLS",
 3271                              "CHESS SYMBOLS",
 3272                              "CHESSSYMBOLS");
 3273 
 3274         /**
 3275          * Constant for the "Elymaic" Unicode
 3276          * character block.
 3277          * @since 13
 3278          */
 3279         public static final UnicodeBlock ELYMAIC =
 3280             new UnicodeBlock("ELYMAIC");
 3281 
 3282         /**
 3283          * Constant for the "Nandinagari" Unicode
 3284          * character block.
 3285          * @since 13
 3286          */
 3287         public static final UnicodeBlock NANDINAGARI =
 3288             new UnicodeBlock("NANDINAGARI");
 3289 
 3290         /**
 3291          * Constant for the "Tamil Supplement" Unicode
 3292          * character block.
 3293          * @since 13
 3294          */
 3295         public static final UnicodeBlock TAMIL_SUPPLEMENT =
 3296             new UnicodeBlock("TAMIL_SUPPLEMENT",
 3297                              "TAMIL SUPPLEMENT",
 3298                              "TAMILSUPPLEMENT");
 3299 
 3300         /**
 3301          * Constant for the "Egyptian Hieroglyph Format Controls" Unicode
 3302          * character block.
 3303          * @since 13
 3304          */
 3305         public static final UnicodeBlock EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS =
 3306             new UnicodeBlock("EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS",
 3307                              "EGYPTIAN HIEROGLYPH FORMAT CONTROLS",
 3308                              "EGYPTIANHIEROGLYPHFORMATCONTROLS");
 3309 
 3310         /**
 3311          * Constant for the "Small Kana Extension" Unicode
 3312          * character block.
 3313          * @since 13
 3314          */
 3315         public static final UnicodeBlock SMALL_KANA_EXTENSION =
 3316             new UnicodeBlock("SMALL_KANA_EXTENSION",
 3317                              "SMALL KANA EXTENSION",
 3318                              "SMALLKANAEXTENSION");
 3319 
 3320         /**
 3321          * Constant for the "Nyiakeng Puachue Hmong" Unicode
 3322          * character block.
 3323          * @since 13
 3324          */
 3325         public static final UnicodeBlock NYIAKENG_PUACHUE_HMONG =
 3326             new UnicodeBlock("NYIAKENG_PUACHUE_HMONG",
 3327                              "NYIAKENG PUACHUE HMONG",
 3328                              "NYIAKENGPUACHUEHMONG");
 3329 
 3330         /**
 3331          * Constant for the "Wancho" Unicode
 3332          * character block.
 3333          * @since 13
 3334          */
 3335         public static final UnicodeBlock WANCHO =
 3336             new UnicodeBlock("WANCHO");
 3337 
 3338         /**
 3339          * Constant for the "Ottoman Siyaq Numbers" Unicode
 3340          * character block.
 3341          * @since 13
 3342          */
 3343         public static final UnicodeBlock OTTOMAN_SIYAQ_NUMBERS =
 3344             new UnicodeBlock("OTTOMAN_SIYAQ_NUMBERS",
 3345                              "OTTOMAN SIYAQ NUMBERS",
 3346                              "OTTOMANSIYAQNUMBERS");
 3347 
 3348         /**
 3349          * Constant for the "Symbols and Pictographs Extended-A" Unicode
 3350          * character block.
 3351          * @since 13
 3352          */
 3353         public static final UnicodeBlock SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A =
 3354             new UnicodeBlock("SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A",
 3355                              "SYMBOLS AND PICTOGRAPHS EXTENDED-A",
 3356                              "SYMBOLSANDPICTOGRAPHSEXTENDED-A");
 3357 
 3358         /**
 3359          * Constant for the "Yezidi" Unicode
 3360          * character block.
 3361          * @since 15
 3362          */
 3363         public static final UnicodeBlock YEZIDI =
 3364             new UnicodeBlock("YEZIDI");
 3365 
 3366         /**
 3367          * Constant for the "Chorasmian" Unicode
 3368          * character block.
 3369          * @since 15
 3370          */
 3371         public static final UnicodeBlock CHORASMIAN =
 3372             new UnicodeBlock("CHORASMIAN");
 3373 
 3374         /**
 3375          * Constant for the "Dives Akuru" Unicode
 3376          * character block.
 3377          * @since 15
 3378          */
 3379         public static final UnicodeBlock DIVES_AKURU =
 3380             new UnicodeBlock("DIVES_AKURU",
 3381                              "DIVES AKURU",
 3382                              "DIVESAKURU");
 3383 
 3384         /**
 3385          * Constant for the "Lisu Supplement" Unicode
 3386          * character block.
 3387          * @since 15
 3388          */
 3389         public static final UnicodeBlock LISU_SUPPLEMENT =
 3390             new UnicodeBlock("LISU_SUPPLEMENT",
 3391                              "LISU SUPPLEMENT",
 3392                              "LISUSUPPLEMENT");
 3393 
 3394         /**
 3395          * Constant for the "Khitan Small Script" Unicode
 3396          * character block.
 3397          * @since 15
 3398          */
 3399         public static final UnicodeBlock KHITAN_SMALL_SCRIPT =
 3400             new UnicodeBlock("KHITAN_SMALL_SCRIPT",
 3401                              "KHITAN SMALL SCRIPT",
 3402                              "KHITANSMALLSCRIPT");
 3403 
 3404         /**
 3405          * Constant for the "Tangut Supplement" Unicode
 3406          * character block.
 3407          * @since 15
 3408          */
 3409         public static final UnicodeBlock TANGUT_SUPPLEMENT =
 3410             new UnicodeBlock("TANGUT_SUPPLEMENT",
 3411                              "TANGUT SUPPLEMENT",
 3412                              "TANGUTSUPPLEMENT");
 3413 
 3414         /**
 3415          * Constant for the "Symbols for Legacy Computing" Unicode
 3416          * character block.
 3417          * @since 15
 3418          */
 3419         public static final UnicodeBlock SYMBOLS_FOR_LEGACY_COMPUTING =
 3420             new UnicodeBlock("SYMBOLS_FOR_LEGACY_COMPUTING",
 3421                              "SYMBOLS FOR LEGACY COMPUTING",
 3422                              "SYMBOLSFORLEGACYCOMPUTING");
 3423 
 3424         /**
 3425          * Constant for the "CJK Unified Ideographs Extension G" Unicode
 3426          * character block.
 3427          * @since 15
 3428          */
 3429         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G =
 3430             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G",
 3431                              "CJK UNIFIED IDEOGRAPHS EXTENSION G",
 3432                              "CJKUNIFIEDIDEOGRAPHSEXTENSIONG");
 3433 
 3434         /**
 3435          * Constant for the "Arabic Extended-B" Unicode
 3436          * character block.
 3437          * @since 19
 3438          */
 3439         public static final UnicodeBlock ARABIC_EXTENDED_B =
 3440             new UnicodeBlock("ARABIC_EXTENDED_B",
 3441                     "ARABIC EXTENDED-B",
 3442                     "ARABICEXTENDED-B");
 3443 
 3444         /**
 3445          * Constant for the "Vithkuqi" Unicode
 3446          * character block.
 3447          * @since 19
 3448          */
 3449         public static final UnicodeBlock VITHKUQI =
 3450             new UnicodeBlock("VITHKUQI");
 3451 
 3452         /**
 3453          * Constant for the "Latin Extended-F" Unicode
 3454          * character block.
 3455          * @since 19
 3456          */
 3457         public static final UnicodeBlock LATIN_EXTENDED_F =
 3458             new UnicodeBlock("LATIN_EXTENDED_F",
 3459                     "LATIN EXTENDED-F",
 3460                     "LATINEXTENDED-F");
 3461 
 3462         /**
 3463          * Constant for the "Old Uyghur" Unicode
 3464          * character block.
 3465          * @since 19
 3466          */
 3467         public static final UnicodeBlock OLD_UYGHUR =
 3468             new UnicodeBlock("OLD_UYGHUR",
 3469                     "OLD UYGHUR",
 3470                     "OLDUYGHUR");
 3471 
 3472         /**
 3473          * Constant for the "Unified Canadian Aboriginal Syllabics Extended-A" Unicode
 3474          * character block.
 3475          * @since 19
 3476          */
 3477         public static final UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_A =
 3478             new UnicodeBlock("UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_A",
 3479                     "UNIFIED CANADIAN ABORIGINAL SYLLABICS EXTENDED-A",
 3480                     "UNIFIEDCANADIANABORIGINALSYLLABICSEXTENDED-A");
 3481 
 3482         /**
 3483          * Constant for the "Cypro-Minoan" Unicode
 3484          * character block.
 3485          * @since 19
 3486          */
 3487         public static final UnicodeBlock CYPRO_MINOAN =
 3488             new UnicodeBlock("CYPRO_MINOAN",
 3489                     "CYPRO-MINOAN",
 3490                     "CYPRO-MINOAN");
 3491 
 3492         /**
 3493          * Constant for the "Tangsa" Unicode
 3494          * character block.
 3495          * @since 19
 3496          */
 3497         public static final UnicodeBlock TANGSA =
 3498             new UnicodeBlock("TANGSA");
 3499 
 3500         /**
 3501          * Constant for the "Kana Extended-B" Unicode
 3502          * character block.
 3503          * @since 19
 3504          */
 3505         public static final UnicodeBlock KANA_EXTENDED_B =
 3506             new UnicodeBlock("KANA_EXTENDED_B",
 3507                     "KANA EXTENDED-B",
 3508                     "KANAEXTENDED-B");
 3509 
 3510         /**
 3511          * Constant for the "Znamenny Musical Notation" Unicode
 3512          * character block.
 3513          * @since 19
 3514          */
 3515         public static final UnicodeBlock ZNAMENNY_MUSICAL_NOTATION =
 3516             new UnicodeBlock("ZNAMENNY_MUSICAL_NOTATION",
 3517                     "ZNAMENNY MUSICAL NOTATION",
 3518                     "ZNAMENNYMUSICALNOTATION");
 3519 
 3520         /**
 3521          * Constant for the "Latin Extended-G" Unicode
 3522          * character block.
 3523          * @since 19
 3524          */
 3525         public static final UnicodeBlock LATIN_EXTENDED_G =
 3526             new UnicodeBlock("LATIN_EXTENDED_G",
 3527                     "LATIN EXTENDED-G",
 3528                     "LATINEXTENDED-G");
 3529 
 3530         /**
 3531          * Constant for the "Toto" Unicode
 3532          * character block.
 3533          * @since 19
 3534          */
 3535         public static final UnicodeBlock TOTO =
 3536             new UnicodeBlock("TOTO");
 3537 
 3538         /**
 3539          * Constant for the "Ethiopic Extended-B" Unicode
 3540          * character block.
 3541          * @since 19
 3542          */
 3543         public static final UnicodeBlock ETHIOPIC_EXTENDED_B =
 3544             new UnicodeBlock("ETHIOPIC_EXTENDED_B",
 3545                     "ETHIOPIC EXTENDED-B",
 3546                     "ETHIOPICEXTENDED-B");
 3547 
 3548         /**
 3549          * Constant for the "Arabic Extended-C" Unicode
 3550          * character block.
 3551          * @since 20
 3552          */
 3553         public static final UnicodeBlock ARABIC_EXTENDED_C =
 3554             new UnicodeBlock("ARABIC_EXTENDED_C",
 3555                              "ARABIC EXTENDED-C",
 3556                              "ARABICEXTENDED-C");
 3557 
 3558         /**
 3559          * Constant for the "Devanagari Extended-A" Unicode
 3560          * character block.
 3561          * @since 20
 3562          */
 3563         public static final UnicodeBlock DEVANAGARI_EXTENDED_A =
 3564             new UnicodeBlock("DEVANAGARI_EXTENDED_A",
 3565                              "DEVANAGARI EXTENDED-A",
 3566                              "DEVANAGARIEXTENDED-A");
 3567 
 3568         /**
 3569          * Constant for the "Kawi" Unicode
 3570          * character block.
 3571          * @since 20
 3572          */
 3573         public static final UnicodeBlock KAWI =
 3574             new UnicodeBlock("KAWI");
 3575 
 3576         /**
 3577          * Constant for the "Kaktovik Numerals" Unicode
 3578          * character block.
 3579          * @since 20
 3580          */
 3581         public static final UnicodeBlock KAKTOVIK_NUMERALS =
 3582             new UnicodeBlock("KAKTOVIK_NUMERALS",
 3583                              "KAKTOVIK NUMERALS",
 3584                              "KAKTOVIKNUMERALS");
 3585 
 3586         /**
 3587          * Constant for the "Cyrillic Extended-D" Unicode
 3588          * character block.
 3589          * @since 20
 3590          */
 3591         public static final UnicodeBlock CYRILLIC_EXTENDED_D =
 3592             new UnicodeBlock("CYRILLIC_EXTENDED_D",
 3593                              "CYRILLIC EXTENDED-D",
 3594                              "CYRILLICEXTENDED-D");
 3595 
 3596         /**
 3597          * Constant for the "Nag Mundari" Unicode
 3598          * character block.
 3599          * @since 20
 3600          */
 3601         public static final UnicodeBlock NAG_MUNDARI =
 3602             new UnicodeBlock("NAG_MUNDARI",
 3603                              "NAG MUNDARI",
 3604                              "NAGMUNDARI");
 3605 
 3606         /**
 3607          * Constant for the "CJK Unified Ideographs Extension H" Unicode
 3608          * character block.
 3609          * @since 20
 3610          */
 3611         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_H =
 3612             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_H",
 3613                              "CJK UNIFIED IDEOGRAPHS EXTENSION H",
 3614                              "CJKUNIFIEDIDEOGRAPHSEXTENSIONH");
 3615 
 3616         /**
 3617          * Constant for the "CJK Unified Ideographs Extension I" Unicode
 3618          * character block.
 3619          * @since 22
 3620          */
 3621         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I =
 3622             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I",
 3623                              "CJK UNIFIED IDEOGRAPHS EXTENSION I",
 3624                              "CJKUNIFIEDIDEOGRAPHSEXTENSIONI");
 3625 
 3626         private static final int[] blockStarts = {
 3627             0x0000,   // 0000..007F; Basic Latin
 3628             0x0080,   // 0080..00FF; Latin-1 Supplement
 3629             0x0100,   // 0100..017F; Latin Extended-A
 3630             0x0180,   // 0180..024F; Latin Extended-B
 3631             0x0250,   // 0250..02AF; IPA Extensions
 3632             0x02B0,   // 02B0..02FF; Spacing Modifier Letters
 3633             0x0300,   // 0300..036F; Combining Diacritical Marks
 3634             0x0370,   // 0370..03FF; Greek and Coptic
 3635             0x0400,   // 0400..04FF; Cyrillic
 3636             0x0500,   // 0500..052F; Cyrillic Supplement
 3637             0x0530,   // 0530..058F; Armenian
 3638             0x0590,   // 0590..05FF; Hebrew
 3639             0x0600,   // 0600..06FF; Arabic
 3640             0x0700,   // 0700..074F; Syriac
 3641             0x0750,   // 0750..077F; Arabic Supplement
 3642             0x0780,   // 0780..07BF; Thaana
 3643             0x07C0,   // 07C0..07FF; NKo
 3644             0x0800,   // 0800..083F; Samaritan
 3645             0x0840,   // 0840..085F; Mandaic
 3646             0x0860,   // 0860..086F; Syriac Supplement
 3647             0x0870,   // 0870..089F; Arabic Extended-B
 3648             0x08A0,   // 08A0..08FF; Arabic Extended-A
 3649             0x0900,   // 0900..097F; Devanagari
 3650             0x0980,   // 0980..09FF; Bengali
 3651             0x0A00,   // 0A00..0A7F; Gurmukhi
 3652             0x0A80,   // 0A80..0AFF; Gujarati
 3653             0x0B00,   // 0B00..0B7F; Oriya
 3654             0x0B80,   // 0B80..0BFF; Tamil
 3655             0x0C00,   // 0C00..0C7F; Telugu
 3656             0x0C80,   // 0C80..0CFF; Kannada
 3657             0x0D00,   // 0D00..0D7F; Malayalam
 3658             0x0D80,   // 0D80..0DFF; Sinhala
 3659             0x0E00,   // 0E00..0E7F; Thai
 3660             0x0E80,   // 0E80..0EFF; Lao
 3661             0x0F00,   // 0F00..0FFF; Tibetan
 3662             0x1000,   // 1000..109F; Myanmar
 3663             0x10A0,   // 10A0..10FF; Georgian
 3664             0x1100,   // 1100..11FF; Hangul Jamo
 3665             0x1200,   // 1200..137F; Ethiopic
 3666             0x1380,   // 1380..139F; Ethiopic Supplement
 3667             0x13A0,   // 13A0..13FF; Cherokee
 3668             0x1400,   // 1400..167F; Unified Canadian Aboriginal Syllabics
 3669             0x1680,   // 1680..169F; Ogham
 3670             0x16A0,   // 16A0..16FF; Runic
 3671             0x1700,   // 1700..171F; Tagalog
 3672             0x1720,   // 1720..173F; Hanunoo
 3673             0x1740,   // 1740..175F; Buhid
 3674             0x1760,   // 1760..177F; Tagbanwa
 3675             0x1780,   // 1780..17FF; Khmer
 3676             0x1800,   // 1800..18AF; Mongolian
 3677             0x18B0,   // 18B0..18FF; Unified Canadian Aboriginal Syllabics Extended
 3678             0x1900,   // 1900..194F; Limbu
 3679             0x1950,   // 1950..197F; Tai Le
 3680             0x1980,   // 1980..19DF; New Tai Lue
 3681             0x19E0,   // 19E0..19FF; Khmer Symbols
 3682             0x1A00,   // 1A00..1A1F; Buginese
 3683             0x1A20,   // 1A20..1AAF; Tai Tham
 3684             0x1AB0,   // 1AB0..1AFF; Combining Diacritical Marks Extended
 3685             0x1B00,   // 1B00..1B7F; Balinese
 3686             0x1B80,   // 1B80..1BBF; Sundanese
 3687             0x1BC0,   // 1BC0..1BFF; Batak
 3688             0x1C00,   // 1C00..1C4F; Lepcha
 3689             0x1C50,   // 1C50..1C7F; Ol Chiki
 3690             0x1C80,   // 1C80..1C8F; Cyrillic Extended-C
 3691             0x1C90,   // 1C90..1CBF; Georgian Extended
 3692             0x1CC0,   // 1CC0..1CCF; Sundanese Supplement
 3693             0x1CD0,   // 1CD0..1CFF; Vedic Extensions
 3694             0x1D00,   // 1D00..1D7F; Phonetic Extensions
 3695             0x1D80,   // 1D80..1DBF; Phonetic Extensions Supplement
 3696             0x1DC0,   // 1DC0..1DFF; Combining Diacritical Marks Supplement
 3697             0x1E00,   // 1E00..1EFF; Latin Extended Additional
 3698             0x1F00,   // 1F00..1FFF; Greek Extended
 3699             0x2000,   // 2000..206F; General Punctuation
 3700             0x2070,   // 2070..209F; Superscripts and Subscripts
 3701             0x20A0,   // 20A0..20CF; Currency Symbols
 3702             0x20D0,   // 20D0..20FF; Combining Diacritical Marks for Symbols
 3703             0x2100,   // 2100..214F; Letterlike Symbols
 3704             0x2150,   // 2150..218F; Number Forms
 3705             0x2190,   // 2190..21FF; Arrows
 3706             0x2200,   // 2200..22FF; Mathematical Operators
 3707             0x2300,   // 2300..23FF; Miscellaneous Technical
 3708             0x2400,   // 2400..243F; Control Pictures
 3709             0x2440,   // 2440..245F; Optical Character Recognition
 3710             0x2460,   // 2460..24FF; Enclosed Alphanumerics
 3711             0x2500,   // 2500..257F; Box Drawing
 3712             0x2580,   // 2580..259F; Block Elements
 3713             0x25A0,   // 25A0..25FF; Geometric Shapes
 3714             0x2600,   // 2600..26FF; Miscellaneous Symbols
 3715             0x2700,   // 2700..27BF; Dingbats
 3716             0x27C0,   // 27C0..27EF; Miscellaneous Mathematical Symbols-A
 3717             0x27F0,   // 27F0..27FF; Supplemental Arrows-A
 3718             0x2800,   // 2800..28FF; Braille Patterns
 3719             0x2900,   // 2900..297F; Supplemental Arrows-B
 3720             0x2980,   // 2980..29FF; Miscellaneous Mathematical Symbols-B
 3721             0x2A00,   // 2A00..2AFF; Supplemental Mathematical Operators
 3722             0x2B00,   // 2B00..2BFF; Miscellaneous Symbols and Arrows
 3723             0x2C00,   // 2C00..2C5F; Glagolitic
 3724             0x2C60,   // 2C60..2C7F; Latin Extended-C
 3725             0x2C80,   // 2C80..2CFF; Coptic
 3726             0x2D00,   // 2D00..2D2F; Georgian Supplement
 3727             0x2D30,   // 2D30..2D7F; Tifinagh
 3728             0x2D80,   // 2D80..2DDF; Ethiopic Extended
 3729             0x2DE0,   // 2DE0..2DFF; Cyrillic Extended-A
 3730             0x2E00,   // 2E00..2E7F; Supplemental Punctuation
 3731             0x2E80,   // 2E80..2EFF; CJK Radicals Supplement
 3732             0x2F00,   // 2F00..2FDF; Kangxi Radicals
 3733             0x2FE0,   //             unassigned
 3734             0x2FF0,   // 2FF0..2FFF; Ideographic Description Characters
 3735             0x3000,   // 3000..303F; CJK Symbols and Punctuation
 3736             0x3040,   // 3040..309F; Hiragana
 3737             0x30A0,   // 30A0..30FF; Katakana
 3738             0x3100,   // 3100..312F; Bopomofo
 3739             0x3130,   // 3130..318F; Hangul Compatibility Jamo
 3740             0x3190,   // 3190..319F; Kanbun
 3741             0x31A0,   // 31A0..31BF; Bopomofo Extended
 3742             0x31C0,   // 31C0..31EF; CJK Strokes
 3743             0x31F0,   // 31F0..31FF; Katakana Phonetic Extensions
 3744             0x3200,   // 3200..32FF; Enclosed CJK Letters and Months
 3745             0x3300,   // 3300..33FF; CJK Compatibility
 3746             0x3400,   // 3400..4DBF; CJK Unified Ideographs Extension A
 3747             0x4DC0,   // 4DC0..4DFF; Yijing Hexagram Symbols
 3748             0x4E00,   // 4E00..9FFF; CJK Unified Ideographs
 3749             0xA000,   // A000..A48F; Yi Syllables
 3750             0xA490,   // A490..A4CF; Yi Radicals
 3751             0xA4D0,   // A4D0..A4FF; Lisu
 3752             0xA500,   // A500..A63F; Vai
 3753             0xA640,   // A640..A69F; Cyrillic Extended-B
 3754             0xA6A0,   // A6A0..A6FF; Bamum
 3755             0xA700,   // A700..A71F; Modifier Tone Letters
 3756             0xA720,   // A720..A7FF; Latin Extended-D
 3757             0xA800,   // A800..A82F; Syloti Nagri
 3758             0xA830,   // A830..A83F; Common Indic Number Forms
 3759             0xA840,   // A840..A87F; Phags-pa
 3760             0xA880,   // A880..A8DF; Saurashtra
 3761             0xA8E0,   // A8E0..A8FF; Devanagari Extended
 3762             0xA900,   // A900..A92F; Kayah Li
 3763             0xA930,   // A930..A95F; Rejang
 3764             0xA960,   // A960..A97F; Hangul Jamo Extended-A
 3765             0xA980,   // A980..A9DF; Javanese
 3766             0xA9E0,   // A9E0..A9FF; Myanmar Extended-B
 3767             0xAA00,   // AA00..AA5F; Cham
 3768             0xAA60,   // AA60..AA7F; Myanmar Extended-A
 3769             0xAA80,   // AA80..AADF; Tai Viet
 3770             0xAAE0,   // AAE0..AAFF; Meetei Mayek Extensions
 3771             0xAB00,   // AB00..AB2F; Ethiopic Extended-A
 3772             0xAB30,   // AB30..AB6F; Latin Extended-E
 3773             0xAB70,   // AB70..ABBF; Cherokee Supplement
 3774             0xABC0,   // ABC0..ABFF; Meetei Mayek
 3775             0xAC00,   // AC00..D7AF; Hangul Syllables
 3776             0xD7B0,   // D7B0..D7FF; Hangul Jamo Extended-B
 3777             0xD800,   // D800..DB7F; High Surrogates
 3778             0xDB80,   // DB80..DBFF; High Private Use Surrogates
 3779             0xDC00,   // DC00..DFFF; Low Surrogates
 3780             0xE000,   // E000..F8FF; Private Use Area
 3781             0xF900,   // F900..FAFF; CJK Compatibility Ideographs
 3782             0xFB00,   // FB00..FB4F; Alphabetic Presentation Forms
 3783             0xFB50,   // FB50..FDFF; Arabic Presentation Forms-A
 3784             0xFE00,   // FE00..FE0F; Variation Selectors
 3785             0xFE10,   // FE10..FE1F; Vertical Forms
 3786             0xFE20,   // FE20..FE2F; Combining Half Marks
 3787             0xFE30,   // FE30..FE4F; CJK Compatibility Forms
 3788             0xFE50,   // FE50..FE6F; Small Form Variants
 3789             0xFE70,   // FE70..FEFF; Arabic Presentation Forms-B
 3790             0xFF00,   // FF00..FFEF; Halfwidth and Fullwidth Forms
 3791             0xFFF0,   // FFF0..FFFF; Specials
 3792             0x10000,  // 10000..1007F; Linear B Syllabary
 3793             0x10080,  // 10080..100FF; Linear B Ideograms
 3794             0x10100,  // 10100..1013F; Aegean Numbers
 3795             0x10140,  // 10140..1018F; Ancient Greek Numbers
 3796             0x10190,  // 10190..101CF; Ancient Symbols
 3797             0x101D0,  // 101D0..101FF; Phaistos Disc
 3798             0x10200,  //               unassigned
 3799             0x10280,  // 10280..1029F; Lycian
 3800             0x102A0,  // 102A0..102DF; Carian
 3801             0x102E0,  // 102E0..102FF; Coptic Epact Numbers
 3802             0x10300,  // 10300..1032F; Old Italic
 3803             0x10330,  // 10330..1034F; Gothic
 3804             0x10350,  // 10350..1037F; Old Permic
 3805             0x10380,  // 10380..1039F; Ugaritic
 3806             0x103A0,  // 103A0..103DF; Old Persian
 3807             0x103E0,  //               unassigned
 3808             0x10400,  // 10400..1044F; Deseret
 3809             0x10450,  // 10450..1047F; Shavian
 3810             0x10480,  // 10480..104AF; Osmanya
 3811             0x104B0,  // 104B0..104FF; Osage
 3812             0x10500,  // 10500..1052F; Elbasan
 3813             0x10530,  // 10530..1056F; Caucasian Albanian
 3814             0x10570,  // 10570..105BF; Vithkuqi
 3815             0x105C0,  //               unassigned
 3816             0x10600,  // 10600..1077F; Linear A
 3817             0x10780,  // 10780..107BF; Latin Extended-F
 3818             0x107C0,  //               unassigned
 3819             0x10800,  // 10800..1083F; Cypriot Syllabary
 3820             0x10840,  // 10840..1085F; Imperial Aramaic
 3821             0x10860,  // 10860..1087F; Palmyrene
 3822             0x10880,  // 10880..108AF; Nabataean
 3823             0x108B0,  //               unassigned
 3824             0x108E0,  // 108E0..108FF; Hatran
 3825             0x10900,  // 10900..1091F; Phoenician
 3826             0x10920,  // 10920..1093F; Lydian
 3827             0x10940,  //               unassigned
 3828             0x10980,  // 10980..1099F; Meroitic Hieroglyphs
 3829             0x109A0,  // 109A0..109FF; Meroitic Cursive
 3830             0x10A00,  // 10A00..10A5F; Kharoshthi
 3831             0x10A60,  // 10A60..10A7F; Old South Arabian
 3832             0x10A80,  // 10A80..10A9F; Old North Arabian
 3833             0x10AA0,  //               unassigned
 3834             0x10AC0,  // 10AC0..10AFF; Manichaean
 3835             0x10B00,  // 10B00..10B3F; Avestan
 3836             0x10B40,  // 10B40..10B5F; Inscriptional Parthian
 3837             0x10B60,  // 10B60..10B7F; Inscriptional Pahlavi
 3838             0x10B80,  // 10B80..10BAF; Psalter Pahlavi
 3839             0x10BB0,  //               unassigned
 3840             0x10C00,  // 10C00..10C4F; Old Turkic
 3841             0x10C50,  //               unassigned
 3842             0x10C80,  // 10C80..10CFF; Old Hungarian
 3843             0x10D00,  // 10D00..10D3F; Hanifi Rohingya
 3844             0x10D40,  //               unassigned
 3845             0x10E60,  // 10E60..10E7F; Rumi Numeral Symbols
 3846             0x10E80,  // 10E80..10EBF; Yezidi
 3847             0x10EC0,  // 10EC0..10EFF; Arabic Extended-C
 3848             0x10F00,  // 10F00..10F2F; Old Sogdian
 3849             0x10F30,  // 10F30..10F6F; Sogdian
 3850             0x10F70,  // 10F70..10FAF; Old Uyghur
 3851             0x10FB0,  // 10FB0..10FDF; Chorasmian
 3852             0x10FE0,  // 10FE0..10FFF; Elymaic
 3853             0x11000,  // 11000..1107F; Brahmi
 3854             0x11080,  // 11080..110CF; Kaithi
 3855             0x110D0,  // 110D0..110FF; Sora Sompeng
 3856             0x11100,  // 11100..1114F; Chakma
 3857             0x11150,  // 11150..1117F; Mahajani
 3858             0x11180,  // 11180..111DF; Sharada
 3859             0x111E0,  // 111E0..111FF; Sinhala Archaic Numbers
 3860             0x11200,  // 11200..1124F; Khojki
 3861             0x11250,  //               unassigned
 3862             0x11280,  // 11280..112AF; Multani
 3863             0x112B0,  // 112B0..112FF; Khudawadi
 3864             0x11300,  // 11300..1137F; Grantha
 3865             0x11380,  //               unassigned
 3866             0x11400,  // 11400..1147F; Newa
 3867             0x11480,  // 11480..114DF; Tirhuta
 3868             0x114E0,  //               unassigned
 3869             0x11580,  // 11580..115FF; Siddham
 3870             0x11600,  // 11600..1165F; Modi
 3871             0x11660,  // 11660..1167F; Mongolian Supplement
 3872             0x11680,  // 11680..116CF; Takri
 3873             0x116D0,  //               unassigned
 3874             0x11700,  // 11700..1174F; Ahom
 3875             0x11750,  //               unassigned
 3876             0x11800,  // 11800..1184F; Dogra
 3877             0x11850,  //               unassigned
 3878             0x118A0,  // 118A0..118FF; Warang Citi
 3879             0x11900,  // 11900..1195F; Dives Akuru
 3880             0x11960,  //               unassigned
 3881             0x119A0,  // 119A0..119FF; Nandinagari
 3882             0x11A00,  // 11A00..11A4F; Zanabazar Square
 3883             0x11A50,  // 11A50..11AAF; Soyombo
 3884             0x11AB0,  // 11AB0..11ABF; Unified Canadian Aboriginal Syllabics Extended-A
 3885             0x11AC0,  // 11AC0..11AFF; Pau Cin Hau
 3886             0x11B00,  // 11B00..11B5F; Devanagari Extended-A
 3887             0x11B60,  //               unassigned
 3888             0x11C00,  // 11C00..11C6F; Bhaiksuki
 3889             0x11C70,  // 11C70..11CBF; Marchen
 3890             0x11CC0,  //               unassigned
 3891             0x11D00,  // 11D00..11D5F; Masaram Gondi
 3892             0x11D60,  // 11D60..11DAF; Gunjala Gondi
 3893             0x11DB0,  //               unassigned
 3894             0x11EE0,  // 11EE0..11EFF; Makasar
 3895             0x11F00,  // 11F00..11F5F; Kawi
 3896             0x11F60,  //               unassigned
 3897             0x11FB0,  // 11FB0..11FBF; Lisu Supplement
 3898             0x11FC0,  // 11FC0..11FFF; Tamil Supplement
 3899             0x12000,  // 12000..123FF; Cuneiform
 3900             0x12400,  // 12400..1247F; Cuneiform Numbers and Punctuation
 3901             0x12480,  // 12480..1254F; Early Dynastic Cuneiform
 3902             0x12550,  //               unassigned
 3903             0x12F90,  // 12F90..12FFF; Cypro-Minoan
 3904             0x13000,  // 13000..1342F; Egyptian Hieroglyphs
 3905             0x13430,  // 13430..1345F; Egyptian Hieroglyph Format Controls
 3906             0x13460,  //               unassigned
 3907             0x14400,  // 14400..1467F; Anatolian Hieroglyphs
 3908             0x14680,  //               unassigned
 3909             0x16800,  // 16800..16A3F; Bamum Supplement
 3910             0x16A40,  // 16A40..16A6F; Mro
 3911             0x16A70,  // 16A70..16ACF; Tangsa
 3912             0x16AD0,  // 16AD0..16AFF; Bassa Vah
 3913             0x16B00,  // 16B00..16B8F; Pahawh Hmong
 3914             0x16B90,  //               unassigned
 3915             0x16E40,  // 16E40..16E9F; Medefaidrin
 3916             0x16EA0,  //               unassigned
 3917             0x16F00,  // 16F00..16F9F; Miao
 3918             0x16FA0,  //               unassigned
 3919             0x16FE0,  // 16FE0..16FFF; Ideographic Symbols and Punctuation
 3920             0x17000,  // 17000..187FF; Tangut
 3921             0x18800,  // 18800..18AFF; Tangut Components
 3922             0x18B00,  // 18B00..18CFF; Khitan Small Script
 3923             0x18D00,  // 18D00..18D7F; Tangut Supplement
 3924             0x18D80,  //               unassigned
 3925             0x1AFF0,  // 1AFF0..1AFFF; Kana Extended-B
 3926             0x1B000,  // 1B000..1B0FF; Kana Supplement
 3927             0x1B100,  // 1B100..1B12F; Kana Extended-A
 3928             0x1B130,  // 1B130..1B16F; Small Kana Extension
 3929             0x1B170,  // 1B170..1B2FF; Nushu
 3930             0x1B300,  //               unassigned
 3931             0x1BC00,  // 1BC00..1BC9F; Duployan
 3932             0x1BCA0,  // 1BCA0..1BCAF; Shorthand Format Controls
 3933             0x1BCB0,  //               unassigned
 3934             0x1CF00,  // 1CF00..1CFCF; Znamenny Musical Notation
 3935             0x1CFD0,  //               unassigned
 3936             0x1D000,  // 1D000..1D0FF; Byzantine Musical Symbols
 3937             0x1D100,  // 1D100..1D1FF; Musical Symbols
 3938             0x1D200,  // 1D200..1D24F; Ancient Greek Musical Notation
 3939             0x1D250,  //               unassigned
 3940             0x1D2C0,  // 1D2C0..1D2DF; Kaktovik Numerals
 3941             0x1D2E0,  // 1D2E0..1D2FF; Mayan Numerals
 3942             0x1D300,  // 1D300..1D35F; Tai Xuan Jing Symbols
 3943             0x1D360,  // 1D360..1D37F; Counting Rod Numerals
 3944             0x1D380,  //               unassigned
 3945             0x1D400,  // 1D400..1D7FF; Mathematical Alphanumeric Symbols
 3946             0x1D800,  // 1D800..1DAAF; Sutton SignWriting
 3947             0x1DAB0,  //               unassigned
 3948             0x1DF00,  // 1DF00..1DFFF; Latin Extended-G
 3949             0x1E000,  // 1E000..1E02F; Glagolitic Supplement
 3950             0x1E030,  // 1E030..1E08F; Cyrillic Extended-D
 3951             0x1E090,  //               unassigned
 3952             0x1E100,  // 1E100..1E14F; Nyiakeng Puachue Hmong
 3953             0x1E150,  //               unassigned
 3954             0x1E290,  // 1E290..1E2BF; Toto
 3955             0x1E2C0,  // 1E2C0..1E2FF; Wancho
 3956             0x1E300,  //               unassigned
 3957             0x1E4D0,  // 1E4D0..1E4FF; Nag Mundari
 3958             0x1E500,  //               unassigned
 3959             0x1E7E0,  // 1E7E0..1E7FF; Ethiopic Extended-B
 3960             0x1E800,  // 1E800..1E8DF; Mende Kikakui
 3961             0x1E8E0,  //               unassigned
 3962             0x1E900,  // 1E900..1E95F; Adlam
 3963             0x1E960,  //               unassigned
 3964             0x1EC70,  // 1EC70..1ECBF; Indic Siyaq Numbers
 3965             0x1ECC0,  //               unassigned
 3966             0x1ED00,  // 1ED00..1ED4F; Ottoman Siyaq Numbers
 3967             0x1ED50,  //               unassigned
 3968             0x1EE00,  // 1EE00..1EEFF; Arabic Mathematical Alphabetic Symbols
 3969             0x1EF00,  //               unassigned
 3970             0x1F000,  // 1F000..1F02F; Mahjong Tiles
 3971             0x1F030,  // 1F030..1F09F; Domino Tiles
 3972             0x1F0A0,  // 1F0A0..1F0FF; Playing Cards
 3973             0x1F100,  // 1F100..1F1FF; Enclosed Alphanumeric Supplement
 3974             0x1F200,  // 1F200..1F2FF; Enclosed Ideographic Supplement
 3975             0x1F300,  // 1F300..1F5FF; Miscellaneous Symbols and Pictographs
 3976             0x1F600,  // 1F600..1F64F; Emoticons
 3977             0x1F650,  // 1F650..1F67F; Ornamental Dingbats
 3978             0x1F680,  // 1F680..1F6FF; Transport and Map Symbols
 3979             0x1F700,  // 1F700..1F77F; Alchemical Symbols
 3980             0x1F780,  // 1F780..1F7FF; Geometric Shapes Extended
 3981             0x1F800,  // 1F800..1F8FF; Supplemental Arrows-C
 3982             0x1F900,  // 1F900..1F9FF; Supplemental Symbols and Pictographs
 3983             0x1FA00,  // 1FA00..1FA6F; Chess Symbols
 3984             0x1FA70,  // 1FA70..1FAFF; Symbols and Pictographs Extended-A
 3985             0x1FB00,  // 1FB00..1FBFF; Symbols for Legacy Computing
 3986             0x1FC00,  //               unassigned
 3987             0x20000,  // 20000..2A6DF; CJK Unified Ideographs Extension B
 3988             0x2A6E0,  //               unassigned
 3989             0x2A700,  // 2A700..2B73F; CJK Unified Ideographs Extension C
 3990             0x2B740,  // 2B740..2B81F; CJK Unified Ideographs Extension D
 3991             0x2B820,  // 2B820..2CEAF; CJK Unified Ideographs Extension E
 3992             0x2CEB0,  // 2CEB0..2EBEF; CJK Unified Ideographs Extension F
 3993             0x2EBF0,  // 2EBF0..2EE5F; CJK Unified Ideographs Extension I
 3994             0x2EE60,  //               unassigned
 3995             0x2F800,  // 2F800..2FA1F; CJK Compatibility Ideographs Supplement
 3996             0x2FA20,  //               unassigned
 3997             0x30000,  // 30000..3134F; CJK Unified Ideographs Extension G
 3998             0x31350,  // 31350..323AF; CJK Unified Ideographs Extension H
 3999             0x323B0,  //               unassigned
 4000             0xE0000,  // E0000..E007F; Tags
 4001             0xE0080,  //               unassigned
 4002             0xE0100,  // E0100..E01EF; Variation Selectors Supplement
 4003             0xE01F0,  //               unassigned
 4004             0xF0000,  // F0000..FFFFF; Supplementary Private Use Area-A
 4005             0x100000, // 100000..10FFFF; Supplementary Private Use Area-B
 4006         };
 4007 
 4008         private static final UnicodeBlock[] blocks = {
 4009             BASIC_LATIN,
 4010             LATIN_1_SUPPLEMENT,
 4011             LATIN_EXTENDED_A,
 4012             LATIN_EXTENDED_B,
 4013             IPA_EXTENSIONS,
 4014             SPACING_MODIFIER_LETTERS,
 4015             COMBINING_DIACRITICAL_MARKS,
 4016             GREEK,
 4017             CYRILLIC,
 4018             CYRILLIC_SUPPLEMENTARY,
 4019             ARMENIAN,
 4020             HEBREW,
 4021             ARABIC,
 4022             SYRIAC,
 4023             ARABIC_SUPPLEMENT,
 4024             THAANA,
 4025             NKO,
 4026             SAMARITAN,
 4027             MANDAIC,
 4028             SYRIAC_SUPPLEMENT,
 4029             ARABIC_EXTENDED_B,
 4030             ARABIC_EXTENDED_A,
 4031             DEVANAGARI,
 4032             BENGALI,
 4033             GURMUKHI,
 4034             GUJARATI,
 4035             ORIYA,
 4036             TAMIL,
 4037             TELUGU,
 4038             KANNADA,
 4039             MALAYALAM,
 4040             SINHALA,
 4041             THAI,
 4042             LAO,
 4043             TIBETAN,
 4044             MYANMAR,
 4045             GEORGIAN,
 4046             HANGUL_JAMO,
 4047             ETHIOPIC,
 4048             ETHIOPIC_SUPPLEMENT,
 4049             CHEROKEE,
 4050             UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS,
 4051             OGHAM,
 4052             RUNIC,
 4053             TAGALOG,
 4054             HANUNOO,
 4055             BUHID,
 4056             TAGBANWA,
 4057             KHMER,
 4058             MONGOLIAN,
 4059             UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED,
 4060             LIMBU,
 4061             TAI_LE,
 4062             NEW_TAI_LUE,
 4063             KHMER_SYMBOLS,
 4064             BUGINESE,
 4065             TAI_THAM,
 4066             COMBINING_DIACRITICAL_MARKS_EXTENDED,
 4067             BALINESE,
 4068             SUNDANESE,
 4069             BATAK,
 4070             LEPCHA,
 4071             OL_CHIKI,
 4072             CYRILLIC_EXTENDED_C,
 4073             GEORGIAN_EXTENDED,
 4074             SUNDANESE_SUPPLEMENT,
 4075             VEDIC_EXTENSIONS,
 4076             PHONETIC_EXTENSIONS,
 4077             PHONETIC_EXTENSIONS_SUPPLEMENT,
 4078             COMBINING_DIACRITICAL_MARKS_SUPPLEMENT,
 4079             LATIN_EXTENDED_ADDITIONAL,
 4080             GREEK_EXTENDED,
 4081             GENERAL_PUNCTUATION,
 4082             SUPERSCRIPTS_AND_SUBSCRIPTS,
 4083             CURRENCY_SYMBOLS,
 4084             COMBINING_MARKS_FOR_SYMBOLS,
 4085             LETTERLIKE_SYMBOLS,
 4086             NUMBER_FORMS,
 4087             ARROWS,
 4088             MATHEMATICAL_OPERATORS,
 4089             MISCELLANEOUS_TECHNICAL,
 4090             CONTROL_PICTURES,
 4091             OPTICAL_CHARACTER_RECOGNITION,
 4092             ENCLOSED_ALPHANUMERICS,
 4093             BOX_DRAWING,
 4094             BLOCK_ELEMENTS,
 4095             GEOMETRIC_SHAPES,
 4096             MISCELLANEOUS_SYMBOLS,
 4097             DINGBATS,
 4098             MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A,
 4099             SUPPLEMENTAL_ARROWS_A,
 4100             BRAILLE_PATTERNS,
 4101             SUPPLEMENTAL_ARROWS_B,
 4102             MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B,
 4103             SUPPLEMENTAL_MATHEMATICAL_OPERATORS,
 4104             MISCELLANEOUS_SYMBOLS_AND_ARROWS,
 4105             GLAGOLITIC,
 4106             LATIN_EXTENDED_C,
 4107             COPTIC,
 4108             GEORGIAN_SUPPLEMENT,
 4109             TIFINAGH,
 4110             ETHIOPIC_EXTENDED,
 4111             CYRILLIC_EXTENDED_A,
 4112             SUPPLEMENTAL_PUNCTUATION,
 4113             CJK_RADICALS_SUPPLEMENT,
 4114             KANGXI_RADICALS,
 4115             null,
 4116             IDEOGRAPHIC_DESCRIPTION_CHARACTERS,
 4117             CJK_SYMBOLS_AND_PUNCTUATION,
 4118             HIRAGANA,
 4119             KATAKANA,
 4120             BOPOMOFO,
 4121             HANGUL_COMPATIBILITY_JAMO,
 4122             KANBUN,
 4123             BOPOMOFO_EXTENDED,
 4124             CJK_STROKES,
 4125             KATAKANA_PHONETIC_EXTENSIONS,
 4126             ENCLOSED_CJK_LETTERS_AND_MONTHS,
 4127             CJK_COMPATIBILITY,
 4128             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A,
 4129             YIJING_HEXAGRAM_SYMBOLS,
 4130             CJK_UNIFIED_IDEOGRAPHS,
 4131             YI_SYLLABLES,
 4132             YI_RADICALS,
 4133             LISU,
 4134             VAI,
 4135             CYRILLIC_EXTENDED_B,
 4136             BAMUM,
 4137             MODIFIER_TONE_LETTERS,
 4138             LATIN_EXTENDED_D,
 4139             SYLOTI_NAGRI,
 4140             COMMON_INDIC_NUMBER_FORMS,
 4141             PHAGS_PA,
 4142             SAURASHTRA,
 4143             DEVANAGARI_EXTENDED,
 4144             KAYAH_LI,
 4145             REJANG,
 4146             HANGUL_JAMO_EXTENDED_A,
 4147             JAVANESE,
 4148             MYANMAR_EXTENDED_B,
 4149             CHAM,
 4150             MYANMAR_EXTENDED_A,
 4151             TAI_VIET,
 4152             MEETEI_MAYEK_EXTENSIONS,
 4153             ETHIOPIC_EXTENDED_A,
 4154             LATIN_EXTENDED_E,
 4155             CHEROKEE_SUPPLEMENT,
 4156             MEETEI_MAYEK,
 4157             HANGUL_SYLLABLES,
 4158             HANGUL_JAMO_EXTENDED_B,
 4159             HIGH_SURROGATES,
 4160             HIGH_PRIVATE_USE_SURROGATES,
 4161             LOW_SURROGATES,
 4162             PRIVATE_USE_AREA,
 4163             CJK_COMPATIBILITY_IDEOGRAPHS,
 4164             ALPHABETIC_PRESENTATION_FORMS,
 4165             ARABIC_PRESENTATION_FORMS_A,
 4166             VARIATION_SELECTORS,
 4167             VERTICAL_FORMS,
 4168             COMBINING_HALF_MARKS,
 4169             CJK_COMPATIBILITY_FORMS,
 4170             SMALL_FORM_VARIANTS,
 4171             ARABIC_PRESENTATION_FORMS_B,
 4172             HALFWIDTH_AND_FULLWIDTH_FORMS,
 4173             SPECIALS,
 4174             LINEAR_B_SYLLABARY,
 4175             LINEAR_B_IDEOGRAMS,
 4176             AEGEAN_NUMBERS,
 4177             ANCIENT_GREEK_NUMBERS,
 4178             ANCIENT_SYMBOLS,
 4179             PHAISTOS_DISC,
 4180             null,
 4181             LYCIAN,
 4182             CARIAN,
 4183             COPTIC_EPACT_NUMBERS,
 4184             OLD_ITALIC,
 4185             GOTHIC,
 4186             OLD_PERMIC,
 4187             UGARITIC,
 4188             OLD_PERSIAN,
 4189             null,
 4190             DESERET,
 4191             SHAVIAN,
 4192             OSMANYA,
 4193             OSAGE,
 4194             ELBASAN,
 4195             CAUCASIAN_ALBANIAN,
 4196             VITHKUQI,
 4197             null,
 4198             LINEAR_A,
 4199             LATIN_EXTENDED_F,
 4200             null,
 4201             CYPRIOT_SYLLABARY,
 4202             IMPERIAL_ARAMAIC,
 4203             PALMYRENE,
 4204             NABATAEAN,
 4205             null,
 4206             HATRAN,
 4207             PHOENICIAN,
 4208             LYDIAN,
 4209             null,
 4210             MEROITIC_HIEROGLYPHS,
 4211             MEROITIC_CURSIVE,
 4212             KHAROSHTHI,
 4213             OLD_SOUTH_ARABIAN,
 4214             OLD_NORTH_ARABIAN,
 4215             null,
 4216             MANICHAEAN,
 4217             AVESTAN,
 4218             INSCRIPTIONAL_PARTHIAN,
 4219             INSCRIPTIONAL_PAHLAVI,
 4220             PSALTER_PAHLAVI,
 4221             null,
 4222             OLD_TURKIC,
 4223             null,
 4224             OLD_HUNGARIAN,
 4225             HANIFI_ROHINGYA,
 4226             null,
 4227             RUMI_NUMERAL_SYMBOLS,
 4228             YEZIDI,
 4229             ARABIC_EXTENDED_C,
 4230             OLD_SOGDIAN,
 4231             SOGDIAN,
 4232             OLD_UYGHUR,
 4233             CHORASMIAN,
 4234             ELYMAIC,
 4235             BRAHMI,
 4236             KAITHI,
 4237             SORA_SOMPENG,
 4238             CHAKMA,
 4239             MAHAJANI,
 4240             SHARADA,
 4241             SINHALA_ARCHAIC_NUMBERS,
 4242             KHOJKI,
 4243             null,
 4244             MULTANI,
 4245             KHUDAWADI,
 4246             GRANTHA,
 4247             null,
 4248             NEWA,
 4249             TIRHUTA,
 4250             null,
 4251             SIDDHAM,
 4252             MODI,
 4253             MONGOLIAN_SUPPLEMENT,
 4254             TAKRI,
 4255             null,
 4256             AHOM,
 4257             null,
 4258             DOGRA,
 4259             null,
 4260             WARANG_CITI,
 4261             DIVES_AKURU,
 4262             null,
 4263             NANDINAGARI,
 4264             ZANABAZAR_SQUARE,
 4265             SOYOMBO,
 4266             UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_A,
 4267             PAU_CIN_HAU,
 4268             DEVANAGARI_EXTENDED_A,
 4269             null,
 4270             BHAIKSUKI,
 4271             MARCHEN,
 4272             null,
 4273             MASARAM_GONDI,
 4274             GUNJALA_GONDI,
 4275             null,
 4276             MAKASAR,
 4277             KAWI,
 4278             null,
 4279             LISU_SUPPLEMENT,
 4280             TAMIL_SUPPLEMENT,
 4281             CUNEIFORM,
 4282             CUNEIFORM_NUMBERS_AND_PUNCTUATION,
 4283             EARLY_DYNASTIC_CUNEIFORM,
 4284             null,
 4285             CYPRO_MINOAN,
 4286             EGYPTIAN_HIEROGLYPHS,
 4287             EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS,
 4288             null,
 4289             ANATOLIAN_HIEROGLYPHS,
 4290             null,
 4291             BAMUM_SUPPLEMENT,
 4292             MRO,
 4293             TANGSA,
 4294             BASSA_VAH,
 4295             PAHAWH_HMONG,
 4296             null,
 4297             MEDEFAIDRIN,
 4298             null,
 4299             MIAO,
 4300             null,
 4301             IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION,
 4302             TANGUT,
 4303             TANGUT_COMPONENTS,
 4304             KHITAN_SMALL_SCRIPT,
 4305             TANGUT_SUPPLEMENT,
 4306             null,
 4307             KANA_EXTENDED_B,
 4308             KANA_SUPPLEMENT,
 4309             KANA_EXTENDED_A,
 4310             SMALL_KANA_EXTENSION,
 4311             NUSHU,
 4312             null,
 4313             DUPLOYAN,
 4314             SHORTHAND_FORMAT_CONTROLS,
 4315             null,
 4316             ZNAMENNY_MUSICAL_NOTATION,
 4317             null,
 4318             BYZANTINE_MUSICAL_SYMBOLS,
 4319             MUSICAL_SYMBOLS,
 4320             ANCIENT_GREEK_MUSICAL_NOTATION,
 4321             null,
 4322             KAKTOVIK_NUMERALS,
 4323             MAYAN_NUMERALS,
 4324             TAI_XUAN_JING_SYMBOLS,
 4325             COUNTING_ROD_NUMERALS,
 4326             null,
 4327             MATHEMATICAL_ALPHANUMERIC_SYMBOLS,
 4328             SUTTON_SIGNWRITING,
 4329             null,
 4330             LATIN_EXTENDED_G,
 4331             GLAGOLITIC_SUPPLEMENT,
 4332             CYRILLIC_EXTENDED_D,
 4333             null,
 4334             NYIAKENG_PUACHUE_HMONG,
 4335             null,
 4336             TOTO,
 4337             WANCHO,
 4338             null,
 4339             NAG_MUNDARI,
 4340             null,
 4341             ETHIOPIC_EXTENDED_B,
 4342             MENDE_KIKAKUI,
 4343             null,
 4344             ADLAM,
 4345             null,
 4346             INDIC_SIYAQ_NUMBERS,
 4347             null,
 4348             OTTOMAN_SIYAQ_NUMBERS,
 4349             null,
 4350             ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS,
 4351             null,
 4352             MAHJONG_TILES,
 4353             DOMINO_TILES,
 4354             PLAYING_CARDS,
 4355             ENCLOSED_ALPHANUMERIC_SUPPLEMENT,
 4356             ENCLOSED_IDEOGRAPHIC_SUPPLEMENT,
 4357             MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS,
 4358             EMOTICONS,
 4359             ORNAMENTAL_DINGBATS,
 4360             TRANSPORT_AND_MAP_SYMBOLS,
 4361             ALCHEMICAL_SYMBOLS,
 4362             GEOMETRIC_SHAPES_EXTENDED,
 4363             SUPPLEMENTAL_ARROWS_C,
 4364             SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS,
 4365             CHESS_SYMBOLS,
 4366             SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A,
 4367             SYMBOLS_FOR_LEGACY_COMPUTING,
 4368             null,
 4369             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B,
 4370             null,
 4371             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C,
 4372             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D,
 4373             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E,
 4374             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F,
 4375             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I,
 4376             null,
 4377             CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT,
 4378             null,
 4379             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G,
 4380             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_H,
 4381             null,
 4382             TAGS,
 4383             null,
 4384             VARIATION_SELECTORS_SUPPLEMENT,
 4385             null,
 4386             SUPPLEMENTARY_PRIVATE_USE_AREA_A,
 4387             SUPPLEMENTARY_PRIVATE_USE_AREA_B,
 4388         };
 4389 
 4390 
 4391         /**
 4392          * Returns the object representing the Unicode block containing the
 4393          * given character, or {@code null} if the character is not a
 4394          * member of a defined block.
 4395          *
 4396          * <p><b>Note:</b> This method cannot handle
 4397          * <a href="Character.html#supplementary"> supplementary
 4398          * characters</a>.  To support all Unicode characters, including
 4399          * supplementary characters, use the {@link #of(int)} method.
 4400          *
 4401          * @param   c  The character in question
 4402          * @return  The {@code UnicodeBlock} instance representing the
 4403          *          Unicode block of which this character is a member, or
 4404          *          {@code null} if the character is not a member of any
 4405          *          Unicode block
 4406          */
 4407         public static UnicodeBlock of(char c) {
 4408             return of((int)c);
 4409         }
 4410 
 4411         /**
 4412          * Returns the object representing the Unicode block
 4413          * containing the given character (Unicode code point), or
 4414          * {@code null} if the character is not a member of a
 4415          * defined block.
 4416          *
 4417          * @param   codePoint the character (Unicode code point) in question.
 4418          * @return  The {@code UnicodeBlock} instance representing the
 4419          *          Unicode block of which this character is a member, or
 4420          *          {@code null} if the character is not a member of any
 4421          *          Unicode block
 4422          * @throws  IllegalArgumentException if the specified
 4423          * {@code codePoint} is an invalid Unicode code point.
 4424          * @see Character#isValidCodePoint(int)
 4425          * @since   1.5
 4426          */
 4427         public static UnicodeBlock of(int codePoint) {
 4428             if (!isValidCodePoint(codePoint)) {
 4429                 throw new IllegalArgumentException(
 4430                     String.format("Not a valid Unicode code point: 0x%X", codePoint));
 4431             }
 4432 
 4433             int top, bottom, current;
 4434             bottom = 0;
 4435             top = blockStarts.length;
 4436             current = top/2;
 4437 
 4438             // invariant: top > current >= bottom && codePoint >= unicodeBlockStarts[bottom]
 4439             while (top - bottom > 1) {
 4440                 if (codePoint >= blockStarts[current]) {
 4441                     bottom = current;
 4442                 } else {
 4443                     top = current;
 4444                 }
 4445                 current = (top + bottom) / 2;
 4446             }
 4447             return blocks[current];
 4448         }
 4449 
 4450         /**
 4451          * Returns the UnicodeBlock with the given name. Block
 4452          * names are determined by The Unicode Standard. The file
 4453          * {@code Blocks.txt} defines blocks for a particular
 4454          * version of the standard. The {@link Character} class specifies
 4455          * the version of the standard that it supports.
 4456          * <p>
 4457          * This method accepts block names in the following forms:
 4458          * <ol>
 4459          * <li> Canonical block names as defined by the Unicode Standard.
 4460          * For example, the standard defines a "Basic Latin" block. Therefore, this
 4461          * method accepts "Basic Latin" as a valid block name. The documentation of
 4462          * each UnicodeBlock provides the canonical name.
 4463          * <li>Canonical block names with all spaces removed. For example, "BasicLatin"
 4464          * is a valid block name for the "Basic Latin" block.
 4465          * <li>The text representation of each constant UnicodeBlock identifier.
 4466          * For example, this method will return the {@link #BASIC_LATIN} block if
 4467          * provided with the "BASIC_LATIN" name. This form replaces all spaces and
 4468          * hyphens in the canonical name with underscores.
 4469          * </ol>
 4470          * Finally, character case is ignored for all of the valid block name forms.
 4471          * For example, "BASIC_LATIN" and "basic_latin" are both valid block names.
 4472          * The en_US locale's case mapping rules are used to provide case-insensitive
 4473          * string comparisons for block name validation.
 4474          * <p>
 4475          * If the Unicode Standard changes block names, both the previous and
 4476          * current names will be accepted.
 4477          *
 4478          * @param blockName A {@code UnicodeBlock} name.
 4479          * @return The {@code UnicodeBlock} instance identified
 4480          *         by {@code blockName}
 4481          * @throws IllegalArgumentException if {@code blockName} is an
 4482          *         invalid name
 4483          * @throws NullPointerException if {@code blockName} is null
 4484          * @since 1.5
 4485          */
 4486         public static final UnicodeBlock forName(String blockName) {
 4487             UnicodeBlock block = map.get(blockName.toUpperCase(Locale.US));
 4488             if (block == null) {
 4489                 throw new IllegalArgumentException("Not a valid block name: "
 4490                             + blockName);
 4491             }
 4492             return block;
 4493         }
 4494     }
 4495 
 4496 
 4497     /**
 4498      * A family of character subsets representing the character scripts
 4499      * defined in the <a href="http://www.unicode.org/reports/tr24/">
 4500      * <i>Unicode Standard Annex #24: Script Names</i></a>. Every Unicode
 4501      * character is assigned to a single Unicode script, either a specific
 4502      * script, such as {@link Character.UnicodeScript#LATIN Latin}, or
 4503      * one of the following three special values,
 4504      * {@link Character.UnicodeScript#INHERITED Inherited},
 4505      * {@link Character.UnicodeScript#COMMON Common} or
 4506      * {@link Character.UnicodeScript#UNKNOWN Unknown}.
 4507      *
 4508      * @spec https://www.unicode.org/reports/tr24 Unicode Script Property
 4509      * @since 1.7
 4510      */
 4511     public static enum UnicodeScript {
 4512         /**
 4513          * Unicode script "Common".
 4514          */
 4515         COMMON,
 4516 
 4517         /**
 4518          * Unicode script "Latin".
 4519          */
 4520         LATIN,
 4521 
 4522         /**
 4523          * Unicode script "Greek".
 4524          */
 4525         GREEK,
 4526 
 4527         /**
 4528          * Unicode script "Cyrillic".
 4529          */
 4530         CYRILLIC,
 4531 
 4532         /**
 4533          * Unicode script "Armenian".
 4534          */
 4535         ARMENIAN,
 4536 
 4537         /**
 4538          * Unicode script "Hebrew".
 4539          */
 4540         HEBREW,
 4541 
 4542         /**
 4543          * Unicode script "Arabic".
 4544          */
 4545         ARABIC,
 4546 
 4547         /**
 4548          * Unicode script "Syriac".
 4549          */
 4550         SYRIAC,
 4551 
 4552         /**
 4553          * Unicode script "Thaana".
 4554          */
 4555         THAANA,
 4556 
 4557         /**
 4558          * Unicode script "Devanagari".
 4559          */
 4560         DEVANAGARI,
 4561 
 4562         /**
 4563          * Unicode script "Bengali".
 4564          */
 4565         BENGALI,
 4566 
 4567         /**
 4568          * Unicode script "Gurmukhi".
 4569          */
 4570         GURMUKHI,
 4571 
 4572         /**
 4573          * Unicode script "Gujarati".
 4574          */
 4575         GUJARATI,
 4576 
 4577         /**
 4578          * Unicode script "Oriya".
 4579          */
 4580         ORIYA,
 4581 
 4582         /**
 4583          * Unicode script "Tamil".
 4584          */
 4585         TAMIL,
 4586 
 4587         /**
 4588          * Unicode script "Telugu".
 4589          */
 4590         TELUGU,
 4591 
 4592         /**
 4593          * Unicode script "Kannada".
 4594          */
 4595         KANNADA,
 4596 
 4597         /**
 4598          * Unicode script "Malayalam".
 4599          */
 4600         MALAYALAM,
 4601 
 4602         /**
 4603          * Unicode script "Sinhala".
 4604          */
 4605         SINHALA,
 4606 
 4607         /**
 4608          * Unicode script "Thai".
 4609          */
 4610         THAI,
 4611 
 4612         /**
 4613          * Unicode script "Lao".
 4614          */
 4615         LAO,
 4616 
 4617         /**
 4618          * Unicode script "Tibetan".
 4619          */
 4620         TIBETAN,
 4621 
 4622         /**
 4623          * Unicode script "Myanmar".
 4624          */
 4625         MYANMAR,
 4626 
 4627         /**
 4628          * Unicode script "Georgian".
 4629          */
 4630         GEORGIAN,
 4631 
 4632         /**
 4633          * Unicode script "Hangul".
 4634          */
 4635         HANGUL,
 4636 
 4637         /**
 4638          * Unicode script "Ethiopic".
 4639          */
 4640         ETHIOPIC,
 4641 
 4642         /**
 4643          * Unicode script "Cherokee".
 4644          */
 4645         CHEROKEE,
 4646 
 4647         /**
 4648          * Unicode script "Canadian_Aboriginal".
 4649          */
 4650         CANADIAN_ABORIGINAL,
 4651 
 4652         /**
 4653          * Unicode script "Ogham".
 4654          */
 4655         OGHAM,
 4656 
 4657         /**
 4658          * Unicode script "Runic".
 4659          */
 4660         RUNIC,
 4661 
 4662         /**
 4663          * Unicode script "Khmer".
 4664          */
 4665         KHMER,
 4666 
 4667         /**
 4668          * Unicode script "Mongolian".
 4669          */
 4670         MONGOLIAN,
 4671 
 4672         /**
 4673          * Unicode script "Hiragana".
 4674          */
 4675         HIRAGANA,
 4676 
 4677         /**
 4678          * Unicode script "Katakana".
 4679          */
 4680         KATAKANA,
 4681 
 4682         /**
 4683          * Unicode script "Bopomofo".
 4684          */
 4685         BOPOMOFO,
 4686 
 4687         /**
 4688          * Unicode script "Han".
 4689          */
 4690         HAN,
 4691 
 4692         /**
 4693          * Unicode script "Yi".
 4694          */
 4695         YI,
 4696 
 4697         /**
 4698          * Unicode script "Old_Italic".
 4699          */
 4700         OLD_ITALIC,
 4701 
 4702         /**
 4703          * Unicode script "Gothic".
 4704          */
 4705         GOTHIC,
 4706 
 4707         /**
 4708          * Unicode script "Deseret".
 4709          */
 4710         DESERET,
 4711 
 4712         /**
 4713          * Unicode script "Inherited".
 4714          */
 4715         INHERITED,
 4716 
 4717         /**
 4718          * Unicode script "Tagalog".
 4719          */
 4720         TAGALOG,
 4721 
 4722         /**
 4723          * Unicode script "Hanunoo".
 4724          */
 4725         HANUNOO,
 4726 
 4727         /**
 4728          * Unicode script "Buhid".
 4729          */
 4730         BUHID,
 4731 
 4732         /**
 4733          * Unicode script "Tagbanwa".
 4734          */
 4735         TAGBANWA,
 4736 
 4737         /**
 4738          * Unicode script "Limbu".
 4739          */
 4740         LIMBU,
 4741 
 4742         /**
 4743          * Unicode script "Tai_Le".
 4744          */
 4745         TAI_LE,
 4746 
 4747         /**
 4748          * Unicode script "Linear_B".
 4749          */
 4750         LINEAR_B,
 4751 
 4752         /**
 4753          * Unicode script "Ugaritic".
 4754          */
 4755         UGARITIC,
 4756 
 4757         /**
 4758          * Unicode script "Shavian".
 4759          */
 4760         SHAVIAN,
 4761 
 4762         /**
 4763          * Unicode script "Osmanya".
 4764          */
 4765         OSMANYA,
 4766 
 4767         /**
 4768          * Unicode script "Cypriot".
 4769          */
 4770         CYPRIOT,
 4771 
 4772         /**
 4773          * Unicode script "Braille".
 4774          */
 4775         BRAILLE,
 4776 
 4777         /**
 4778          * Unicode script "Buginese".
 4779          */
 4780         BUGINESE,
 4781 
 4782         /**
 4783          * Unicode script "Coptic".
 4784          */
 4785         COPTIC,
 4786 
 4787         /**
 4788          * Unicode script "New_Tai_Lue".
 4789          */
 4790         NEW_TAI_LUE,
 4791 
 4792         /**
 4793          * Unicode script "Glagolitic".
 4794          */
 4795         GLAGOLITIC,
 4796 
 4797         /**
 4798          * Unicode script "Tifinagh".
 4799          */
 4800         TIFINAGH,
 4801 
 4802         /**
 4803          * Unicode script "Syloti_Nagri".
 4804          */
 4805         SYLOTI_NAGRI,
 4806 
 4807         /**
 4808          * Unicode script "Old_Persian".
 4809          */
 4810         OLD_PERSIAN,
 4811 
 4812         /**
 4813          * Unicode script "Kharoshthi".
 4814          */
 4815         KHAROSHTHI,
 4816 
 4817         /**
 4818          * Unicode script "Balinese".
 4819          */
 4820         BALINESE,
 4821 
 4822         /**
 4823          * Unicode script "Cuneiform".
 4824          */
 4825         CUNEIFORM,
 4826 
 4827         /**
 4828          * Unicode script "Phoenician".
 4829          */
 4830         PHOENICIAN,
 4831 
 4832         /**
 4833          * Unicode script "Phags_Pa".
 4834          */
 4835         PHAGS_PA,
 4836 
 4837         /**
 4838          * Unicode script "Nko".
 4839          */
 4840         NKO,
 4841 
 4842         /**
 4843          * Unicode script "Sundanese".
 4844          */
 4845         SUNDANESE,
 4846 
 4847         /**
 4848          * Unicode script "Batak".
 4849          */
 4850         BATAK,
 4851 
 4852         /**
 4853          * Unicode script "Lepcha".
 4854          */
 4855         LEPCHA,
 4856 
 4857         /**
 4858          * Unicode script "Ol_Chiki".
 4859          */
 4860         OL_CHIKI,
 4861 
 4862         /**
 4863          * Unicode script "Vai".
 4864          */
 4865         VAI,
 4866 
 4867         /**
 4868          * Unicode script "Saurashtra".
 4869          */
 4870         SAURASHTRA,
 4871 
 4872         /**
 4873          * Unicode script "Kayah_Li".
 4874          */
 4875         KAYAH_LI,
 4876 
 4877         /**
 4878          * Unicode script "Rejang".
 4879          */
 4880         REJANG,
 4881 
 4882         /**
 4883          * Unicode script "Lycian".
 4884          */
 4885         LYCIAN,
 4886 
 4887         /**
 4888          * Unicode script "Carian".
 4889          */
 4890         CARIAN,
 4891 
 4892         /**
 4893          * Unicode script "Lydian".
 4894          */
 4895         LYDIAN,
 4896 
 4897         /**
 4898          * Unicode script "Cham".
 4899          */
 4900         CHAM,
 4901 
 4902         /**
 4903          * Unicode script "Tai_Tham".
 4904          */
 4905         TAI_THAM,
 4906 
 4907         /**
 4908          * Unicode script "Tai_Viet".
 4909          */
 4910         TAI_VIET,
 4911 
 4912         /**
 4913          * Unicode script "Avestan".
 4914          */
 4915         AVESTAN,
 4916 
 4917         /**
 4918          * Unicode script "Egyptian_Hieroglyphs".
 4919          */
 4920         EGYPTIAN_HIEROGLYPHS,
 4921 
 4922         /**
 4923          * Unicode script "Samaritan".
 4924          */
 4925         SAMARITAN,
 4926 
 4927         /**
 4928          * Unicode script "Mandaic".
 4929          */
 4930         MANDAIC,
 4931 
 4932         /**
 4933          * Unicode script "Lisu".
 4934          */
 4935         LISU,
 4936 
 4937         /**
 4938          * Unicode script "Bamum".
 4939          */
 4940         BAMUM,
 4941 
 4942         /**
 4943          * Unicode script "Javanese".
 4944          */
 4945         JAVANESE,
 4946 
 4947         /**
 4948          * Unicode script "Meetei_Mayek".
 4949          */
 4950         MEETEI_MAYEK,
 4951 
 4952         /**
 4953          * Unicode script "Imperial_Aramaic".
 4954          */
 4955         IMPERIAL_ARAMAIC,
 4956 
 4957         /**
 4958          * Unicode script "Old_South_Arabian".
 4959          */
 4960         OLD_SOUTH_ARABIAN,
 4961 
 4962         /**
 4963          * Unicode script "Inscriptional_Parthian".
 4964          */
 4965         INSCRIPTIONAL_PARTHIAN,
 4966 
 4967         /**
 4968          * Unicode script "Inscriptional_Pahlavi".
 4969          */
 4970         INSCRIPTIONAL_PAHLAVI,
 4971 
 4972         /**
 4973          * Unicode script "Old_Turkic".
 4974          */
 4975         OLD_TURKIC,
 4976 
 4977         /**
 4978          * Unicode script "Brahmi".
 4979          */
 4980         BRAHMI,
 4981 
 4982         /**
 4983          * Unicode script "Kaithi".
 4984          */
 4985         KAITHI,
 4986 
 4987         /**
 4988          * Unicode script "Meroitic Hieroglyphs".
 4989          * @since 1.8
 4990          */
 4991         MEROITIC_HIEROGLYPHS,
 4992 
 4993         /**
 4994          * Unicode script "Meroitic Cursive".
 4995          * @since 1.8
 4996          */
 4997         MEROITIC_CURSIVE,
 4998 
 4999         /**
 5000          * Unicode script "Sora Sompeng".
 5001          * @since 1.8
 5002          */
 5003         SORA_SOMPENG,
 5004 
 5005         /**
 5006          * Unicode script "Chakma".
 5007          * @since 1.8
 5008          */
 5009         CHAKMA,
 5010 
 5011         /**
 5012          * Unicode script "Sharada".
 5013          * @since 1.8
 5014          */
 5015         SHARADA,
 5016 
 5017         /**
 5018          * Unicode script "Takri".
 5019          * @since 1.8
 5020          */
 5021         TAKRI,
 5022 
 5023         /**
 5024          * Unicode script "Miao".
 5025          * @since 1.8
 5026          */
 5027         MIAO,
 5028 
 5029         /**
 5030          * Unicode script "Caucasian Albanian".
 5031          * @since 9
 5032          */
 5033         CAUCASIAN_ALBANIAN,
 5034 
 5035         /**
 5036          * Unicode script "Bassa Vah".
 5037          * @since 9
 5038          */
 5039         BASSA_VAH,
 5040 
 5041         /**
 5042          * Unicode script "Duployan".
 5043          * @since 9
 5044          */
 5045         DUPLOYAN,
 5046 
 5047         /**
 5048          * Unicode script "Elbasan".
 5049          * @since 9
 5050          */
 5051         ELBASAN,
 5052 
 5053         /**
 5054          * Unicode script "Grantha".
 5055          * @since 9
 5056          */
 5057         GRANTHA,
 5058 
 5059         /**
 5060          * Unicode script "Pahawh Hmong".
 5061          * @since 9
 5062          */
 5063         PAHAWH_HMONG,
 5064 
 5065         /**
 5066          * Unicode script "Khojki".
 5067          * @since 9
 5068          */
 5069         KHOJKI,
 5070 
 5071         /**
 5072          * Unicode script "Linear A".
 5073          * @since 9
 5074          */
 5075         LINEAR_A,
 5076 
 5077         /**
 5078          * Unicode script "Mahajani".
 5079          * @since 9
 5080          */
 5081         MAHAJANI,
 5082 
 5083         /**
 5084          * Unicode script "Manichaean".
 5085          * @since 9
 5086          */
 5087         MANICHAEAN,
 5088 
 5089         /**
 5090          * Unicode script "Mende Kikakui".
 5091          * @since 9
 5092          */
 5093         MENDE_KIKAKUI,
 5094 
 5095         /**
 5096          * Unicode script "Modi".
 5097          * @since 9
 5098          */
 5099         MODI,
 5100 
 5101         /**
 5102          * Unicode script "Mro".
 5103          * @since 9
 5104          */
 5105         MRO,
 5106 
 5107         /**
 5108          * Unicode script "Old North Arabian".
 5109          * @since 9
 5110          */
 5111         OLD_NORTH_ARABIAN,
 5112 
 5113         /**
 5114          * Unicode script "Nabataean".
 5115          * @since 9
 5116          */
 5117         NABATAEAN,
 5118 
 5119         /**
 5120          * Unicode script "Palmyrene".
 5121          * @since 9
 5122          */
 5123         PALMYRENE,
 5124 
 5125         /**
 5126          * Unicode script "Pau Cin Hau".
 5127          * @since 9
 5128          */
 5129         PAU_CIN_HAU,
 5130 
 5131         /**
 5132          * Unicode script "Old Permic".
 5133          * @since 9
 5134          */
 5135         OLD_PERMIC,
 5136 
 5137         /**
 5138          * Unicode script "Psalter Pahlavi".
 5139          * @since 9
 5140          */
 5141         PSALTER_PAHLAVI,
 5142 
 5143         /**
 5144          * Unicode script "Siddham".
 5145          * @since 9
 5146          */
 5147         SIDDHAM,
 5148 
 5149         /**
 5150          * Unicode script "Khudawadi".
 5151          * @since 9
 5152          */
 5153         KHUDAWADI,
 5154 
 5155         /**
 5156          * Unicode script "Tirhuta".
 5157          * @since 9
 5158          */
 5159         TIRHUTA,
 5160 
 5161         /**
 5162          * Unicode script "Warang Citi".
 5163          * @since 9
 5164          */
 5165         WARANG_CITI,
 5166 
 5167         /**
 5168          * Unicode script "Ahom".
 5169          * @since 9
 5170          */
 5171         AHOM,
 5172 
 5173         /**
 5174          * Unicode script "Anatolian Hieroglyphs".
 5175          * @since 9
 5176          */
 5177         ANATOLIAN_HIEROGLYPHS,
 5178 
 5179         /**
 5180          * Unicode script "Hatran".
 5181          * @since 9
 5182          */
 5183         HATRAN,
 5184 
 5185         /**
 5186          * Unicode script "Multani".
 5187          * @since 9
 5188          */
 5189         MULTANI,
 5190 
 5191         /**
 5192          * Unicode script "Old Hungarian".
 5193          * @since 9
 5194          */
 5195         OLD_HUNGARIAN,
 5196 
 5197         /**
 5198          * Unicode script "SignWriting".
 5199          * @since 9
 5200          */
 5201         SIGNWRITING,
 5202 
 5203         /**
 5204          * Unicode script "Adlam".
 5205          * @since 11
 5206          */
 5207         ADLAM,
 5208 
 5209         /**
 5210          * Unicode script "Bhaiksuki".
 5211          * @since 11
 5212          */
 5213         BHAIKSUKI,
 5214 
 5215         /**
 5216          * Unicode script "Marchen".
 5217          * @since 11
 5218          */
 5219         MARCHEN,
 5220 
 5221         /**
 5222          * Unicode script "Newa".
 5223          * @since 11
 5224          */
 5225         NEWA,
 5226 
 5227         /**
 5228          * Unicode script "Osage".
 5229          * @since 11
 5230          */
 5231         OSAGE,
 5232 
 5233         /**
 5234          * Unicode script "Tangut".
 5235          * @since 11
 5236          */
 5237         TANGUT,
 5238 
 5239         /**
 5240          * Unicode script "Masaram Gondi".
 5241          * @since 11
 5242          */
 5243         MASARAM_GONDI,
 5244 
 5245         /**
 5246          * Unicode script "Nushu".
 5247          * @since 11
 5248          */
 5249         NUSHU,
 5250 
 5251         /**
 5252          * Unicode script "Soyombo".
 5253          * @since 11
 5254          */
 5255         SOYOMBO,
 5256 
 5257         /**
 5258          * Unicode script "Zanabazar Square".
 5259          * @since 11
 5260          */
 5261         ZANABAZAR_SQUARE,
 5262 
 5263         /**
 5264          * Unicode script "Hanifi Rohingya".
 5265          * @since 12
 5266          */
 5267         HANIFI_ROHINGYA,
 5268 
 5269         /**
 5270          * Unicode script "Old Sogdian".
 5271          * @since 12
 5272          */
 5273         OLD_SOGDIAN,
 5274 
 5275         /**
 5276          * Unicode script "Sogdian".
 5277          * @since 12
 5278          */
 5279         SOGDIAN,
 5280 
 5281         /**
 5282          * Unicode script "Dogra".
 5283          * @since 12
 5284          */
 5285         DOGRA,
 5286 
 5287         /**
 5288          * Unicode script "Gunjala Gondi".
 5289          * @since 12
 5290          */
 5291         GUNJALA_GONDI,
 5292 
 5293         /**
 5294          * Unicode script "Makasar".
 5295          * @since 12
 5296          */
 5297         MAKASAR,
 5298 
 5299         /**
 5300          * Unicode script "Medefaidrin".
 5301          * @since 12
 5302          */
 5303         MEDEFAIDRIN,
 5304 
 5305         /**
 5306          * Unicode script "Elymaic".
 5307          * @since 13
 5308          */
 5309         ELYMAIC,
 5310 
 5311         /**
 5312          * Unicode script "Nandinagari".
 5313          * @since 13
 5314          */
 5315         NANDINAGARI,
 5316 
 5317         /**
 5318          * Unicode script "Nyiakeng Puachue Hmong".
 5319          * @since 13
 5320          */
 5321         NYIAKENG_PUACHUE_HMONG,
 5322 
 5323         /**
 5324          * Unicode script "Wancho".
 5325          * @since 13
 5326          */
 5327         WANCHO,
 5328 
 5329         /**
 5330          * Unicode script "Yezidi".
 5331          * @since 15
 5332          */
 5333         YEZIDI,
 5334 
 5335         /**
 5336          * Unicode script "Chorasmian".
 5337          * @since 15
 5338          */
 5339         CHORASMIAN,
 5340 
 5341         /**
 5342          * Unicode script "Dives Akuru".
 5343          * @since 15
 5344          */
 5345         DIVES_AKURU,
 5346 
 5347         /**
 5348          * Unicode script "Khitan Small Script".
 5349          * @since 15
 5350          */
 5351         KHITAN_SMALL_SCRIPT,
 5352 
 5353         /**
 5354          * Unicode script "Vithkuqi".
 5355          * @since 19
 5356          */
 5357         VITHKUQI,
 5358 
 5359         /**
 5360          * Unicode script "Old Uyghur".
 5361          * @since 19
 5362          */
 5363         OLD_UYGHUR,
 5364 
 5365         /**
 5366          * Unicode script "Cypro Minoan".
 5367          * @since 19
 5368          */
 5369         CYPRO_MINOAN,
 5370 
 5371         /**
 5372          * Unicode script "Tangsa".
 5373          * @since 19
 5374          */
 5375         TANGSA,
 5376 
 5377         /**
 5378          * Unicode script "Toto".
 5379          * @since 19
 5380          */
 5381         TOTO,
 5382 
 5383         /**
 5384          * Unicode script "Kawi".
 5385          * @since 20
 5386          */
 5387         KAWI,
 5388 
 5389         /**
 5390          * Unicode script "Nag Mundari".
 5391          * @since 20
 5392          */
 5393         NAG_MUNDARI,
 5394 
 5395         /**
 5396          * Unicode script "Unknown".
 5397          */
 5398         UNKNOWN; // must be the last enum constant for calculating the size of "aliases" hash map.
 5399 
 5400         private static final int[] scriptStarts = {
 5401             0x0000,   // 0000..0040; COMMON
 5402             0x0041,   // 0041..005A; LATIN
 5403             0x005B,   // 005B..0060; COMMON
 5404             0x0061,   // 0061..007A; LATIN
 5405             0x007B,   // 007B..00A9; COMMON
 5406             0x00AA,   // 00AA      ; LATIN
 5407             0x00AB,   // 00AB..00B9; COMMON
 5408             0x00BA,   // 00BA      ; LATIN
 5409             0x00BB,   // 00BB..00BF; COMMON
 5410             0x00C0,   // 00C0..00D6; LATIN
 5411             0x00D7,   // 00D7      ; COMMON
 5412             0x00D8,   // 00D8..00F6; LATIN
 5413             0x00F7,   // 00F7      ; COMMON
 5414             0x00F8,   // 00F8..02B8; LATIN
 5415             0x02B9,   // 02B9..02DF; COMMON
 5416             0x02E0,   // 02E0..02E4; LATIN
 5417             0x02E5,   // 02E5..02E9; COMMON
 5418             0x02EA,   // 02EA..02EB; BOPOMOFO
 5419             0x02EC,   // 02EC..02FF; COMMON
 5420             0x0300,   // 0300..036F; INHERITED
 5421             0x0370,   // 0370..0373; GREEK
 5422             0x0374,   // 0374      ; COMMON
 5423             0x0375,   // 0375..0377; GREEK
 5424             0x0378,   // 0378..0379; UNKNOWN
 5425             0x037A,   // 037A..037D; GREEK
 5426             0x037E,   // 037E      ; COMMON
 5427             0x037F,   // 037F      ; GREEK
 5428             0x0380,   // 0380..0383; UNKNOWN
 5429             0x0384,   // 0384      ; GREEK
 5430             0x0385,   // 0385      ; COMMON
 5431             0x0386,   // 0386      ; GREEK
 5432             0x0387,   // 0387      ; COMMON
 5433             0x0388,   // 0388..038A; GREEK
 5434             0x038B,   // 038B      ; UNKNOWN
 5435             0x038C,   // 038C      ; GREEK
 5436             0x038D,   // 038D      ; UNKNOWN
 5437             0x038E,   // 038E..03A1; GREEK
 5438             0x03A2,   // 03A2      ; UNKNOWN
 5439             0x03A3,   // 03A3..03E1; GREEK
 5440             0x03E2,   // 03E2..03EF; COPTIC
 5441             0x03F0,   // 03F0..03FF; GREEK
 5442             0x0400,   // 0400..0484; CYRILLIC
 5443             0x0485,   // 0485..0486; INHERITED
 5444             0x0487,   // 0487..052F; CYRILLIC
 5445             0x0530,   // 0530      ; UNKNOWN
 5446             0x0531,   // 0531..0556; ARMENIAN
 5447             0x0557,   // 0557..0558; UNKNOWN
 5448             0x0559,   // 0559..058A; ARMENIAN
 5449             0x058B,   // 058B..058C; UNKNOWN
 5450             0x058D,   // 058D..058F; ARMENIAN
 5451             0x0590,   // 0590      ; UNKNOWN
 5452             0x0591,   // 0591..05C7; HEBREW
 5453             0x05C8,   // 05C8..05CF; UNKNOWN
 5454             0x05D0,   // 05D0..05EA; HEBREW
 5455             0x05EB,   // 05EB..05EE; UNKNOWN
 5456             0x05EF,   // 05EF..05F4; HEBREW
 5457             0x05F5,   // 05F5..05FF; UNKNOWN
 5458             0x0600,   // 0600..0604; ARABIC
 5459             0x0605,   // 0605      ; COMMON
 5460             0x0606,   // 0606..060B; ARABIC
 5461             0x060C,   // 060C      ; COMMON
 5462             0x060D,   // 060D..061A; ARABIC
 5463             0x061B,   // 061B      ; COMMON
 5464             0x061C,   // 061C..061E; ARABIC
 5465             0x061F,   // 061F      ; COMMON
 5466             0x0620,   // 0620..063F; ARABIC
 5467             0x0640,   // 0640      ; COMMON
 5468             0x0641,   // 0641..064A; ARABIC
 5469             0x064B,   // 064B..0655; INHERITED
 5470             0x0656,   // 0656..066F; ARABIC
 5471             0x0670,   // 0670      ; INHERITED
 5472             0x0671,   // 0671..06DC; ARABIC
 5473             0x06DD,   // 06DD      ; COMMON
 5474             0x06DE,   // 06DE..06FF; ARABIC
 5475             0x0700,   // 0700..070D; SYRIAC
 5476             0x070E,   // 070E      ; UNKNOWN
 5477             0x070F,   // 070F..074A; SYRIAC
 5478             0x074B,   // 074B..074C; UNKNOWN
 5479             0x074D,   // 074D..074F; SYRIAC
 5480             0x0750,   // 0750..077F; ARABIC
 5481             0x0780,   // 0780..07B1; THAANA
 5482             0x07B2,   // 07B2..07BF; UNKNOWN
 5483             0x07C0,   // 07C0..07FA; NKO
 5484             0x07FB,   // 07FB..07FC; UNKNOWN
 5485             0x07FD,   // 07FD..07FF; NKO
 5486             0x0800,   // 0800..082D; SAMARITAN
 5487             0x082E,   // 082E..082F; UNKNOWN
 5488             0x0830,   // 0830..083E; SAMARITAN
 5489             0x083F,   // 083F      ; UNKNOWN
 5490             0x0840,   // 0840..085B; MANDAIC
 5491             0x085C,   // 085C..085D; UNKNOWN
 5492             0x085E,   // 085E      ; MANDAIC
 5493             0x085F,   // 085F      ; UNKNOWN
 5494             0x0860,   // 0860..086A; SYRIAC
 5495             0x086B,   // 086B..086F; UNKNOWN
 5496             0x0870,   // 0870..088E; ARABIC
 5497             0x088F,   // 088F      ; UNKNOWN
 5498             0x0890,   // 0890..0891; ARABIC
 5499             0x0892,   // 0892..0897; UNKNOWN
 5500             0x0898,   // 0898..08E1; ARABIC
 5501             0x08E2,   // 08E2      ; COMMON
 5502             0x08E3,   // 08E3..08FF; ARABIC
 5503             0x0900,   // 0900..0950; DEVANAGARI
 5504             0x0951,   // 0951..0954; INHERITED
 5505             0x0955,   // 0955..0963; DEVANAGARI
 5506             0x0964,   // 0964..0965; COMMON
 5507             0x0966,   // 0966..097F; DEVANAGARI
 5508             0x0980,   // 0980..0983; BENGALI
 5509             0x0984,   // 0984      ; UNKNOWN
 5510             0x0985,   // 0985..098C; BENGALI
 5511             0x098D,   // 098D..098E; UNKNOWN
 5512             0x098F,   // 098F..0990; BENGALI
 5513             0x0991,   // 0991..0992; UNKNOWN
 5514             0x0993,   // 0993..09A8; BENGALI
 5515             0x09A9,   // 09A9      ; UNKNOWN
 5516             0x09AA,   // 09AA..09B0; BENGALI
 5517             0x09B1,   // 09B1      ; UNKNOWN
 5518             0x09B2,   // 09B2      ; BENGALI
 5519             0x09B3,   // 09B3..09B5; UNKNOWN
 5520             0x09B6,   // 09B6..09B9; BENGALI
 5521             0x09BA,   // 09BA..09BB; UNKNOWN
 5522             0x09BC,   // 09BC..09C4; BENGALI
 5523             0x09C5,   // 09C5..09C6; UNKNOWN
 5524             0x09C7,   // 09C7..09C8; BENGALI
 5525             0x09C9,   // 09C9..09CA; UNKNOWN
 5526             0x09CB,   // 09CB..09CE; BENGALI
 5527             0x09CF,   // 09CF..09D6; UNKNOWN
 5528             0x09D7,   // 09D7      ; BENGALI
 5529             0x09D8,   // 09D8..09DB; UNKNOWN
 5530             0x09DC,   // 09DC..09DD; BENGALI
 5531             0x09DE,   // 09DE      ; UNKNOWN
 5532             0x09DF,   // 09DF..09E3; BENGALI
 5533             0x09E4,   // 09E4..09E5; UNKNOWN
 5534             0x09E6,   // 09E6..09FE; BENGALI
 5535             0x09FF,   // 09FF..0A00; UNKNOWN
 5536             0x0A01,   // 0A01..0A03; GURMUKHI
 5537             0x0A04,   // 0A04      ; UNKNOWN
 5538             0x0A05,   // 0A05..0A0A; GURMUKHI
 5539             0x0A0B,   // 0A0B..0A0E; UNKNOWN
 5540             0x0A0F,   // 0A0F..0A10; GURMUKHI
 5541             0x0A11,   // 0A11..0A12; UNKNOWN
 5542             0x0A13,   // 0A13..0A28; GURMUKHI
 5543             0x0A29,   // 0A29      ; UNKNOWN
 5544             0x0A2A,   // 0A2A..0A30; GURMUKHI
 5545             0x0A31,   // 0A31      ; UNKNOWN
 5546             0x0A32,   // 0A32..0A33; GURMUKHI
 5547             0x0A34,   // 0A34      ; UNKNOWN
 5548             0x0A35,   // 0A35..0A36; GURMUKHI
 5549             0x0A37,   // 0A37      ; UNKNOWN
 5550             0x0A38,   // 0A38..0A39; GURMUKHI
 5551             0x0A3A,   // 0A3A..0A3B; UNKNOWN
 5552             0x0A3C,   // 0A3C      ; GURMUKHI
 5553             0x0A3D,   // 0A3D      ; UNKNOWN
 5554             0x0A3E,   // 0A3E..0A42; GURMUKHI
 5555             0x0A43,   // 0A43..0A46; UNKNOWN
 5556             0x0A47,   // 0A47..0A48; GURMUKHI
 5557             0x0A49,   // 0A49..0A4A; UNKNOWN
 5558             0x0A4B,   // 0A4B..0A4D; GURMUKHI
 5559             0x0A4E,   // 0A4E..0A50; UNKNOWN
 5560             0x0A51,   // 0A51      ; GURMUKHI
 5561             0x0A52,   // 0A52..0A58; UNKNOWN
 5562             0x0A59,   // 0A59..0A5C; GURMUKHI
 5563             0x0A5D,   // 0A5D      ; UNKNOWN
 5564             0x0A5E,   // 0A5E      ; GURMUKHI
 5565             0x0A5F,   // 0A5F..0A65; UNKNOWN
 5566             0x0A66,   // 0A66..0A76; GURMUKHI
 5567             0x0A77,   // 0A77..0A80; UNKNOWN
 5568             0x0A81,   // 0A81..0A83; GUJARATI
 5569             0x0A84,   // 0A84      ; UNKNOWN
 5570             0x0A85,   // 0A85..0A8D; GUJARATI
 5571             0x0A8E,   // 0A8E      ; UNKNOWN
 5572             0x0A8F,   // 0A8F..0A91; GUJARATI
 5573             0x0A92,   // 0A92      ; UNKNOWN
 5574             0x0A93,   // 0A93..0AA8; GUJARATI
 5575             0x0AA9,   // 0AA9      ; UNKNOWN
 5576             0x0AAA,   // 0AAA..0AB0; GUJARATI
 5577             0x0AB1,   // 0AB1      ; UNKNOWN
 5578             0x0AB2,   // 0AB2..0AB3; GUJARATI
 5579             0x0AB4,   // 0AB4      ; UNKNOWN
 5580             0x0AB5,   // 0AB5..0AB9; GUJARATI
 5581             0x0ABA,   // 0ABA..0ABB; UNKNOWN
 5582             0x0ABC,   // 0ABC..0AC5; GUJARATI
 5583             0x0AC6,   // 0AC6      ; UNKNOWN
 5584             0x0AC7,   // 0AC7..0AC9; GUJARATI
 5585             0x0ACA,   // 0ACA      ; UNKNOWN
 5586             0x0ACB,   // 0ACB..0ACD; GUJARATI
 5587             0x0ACE,   // 0ACE..0ACF; UNKNOWN
 5588             0x0AD0,   // 0AD0      ; GUJARATI
 5589             0x0AD1,   // 0AD1..0ADF; UNKNOWN
 5590             0x0AE0,   // 0AE0..0AE3; GUJARATI
 5591             0x0AE4,   // 0AE4..0AE5; UNKNOWN
 5592             0x0AE6,   // 0AE6..0AF1; GUJARATI
 5593             0x0AF2,   // 0AF2..0AF8; UNKNOWN
 5594             0x0AF9,   // 0AF9..0AFF; GUJARATI
 5595             0x0B00,   // 0B00      ; UNKNOWN
 5596             0x0B01,   // 0B01..0B03; ORIYA
 5597             0x0B04,   // 0B04      ; UNKNOWN
 5598             0x0B05,   // 0B05..0B0C; ORIYA
 5599             0x0B0D,   // 0B0D..0B0E; UNKNOWN
 5600             0x0B0F,   // 0B0F..0B10; ORIYA
 5601             0x0B11,   // 0B11..0B12; UNKNOWN
 5602             0x0B13,   // 0B13..0B28; ORIYA
 5603             0x0B29,   // 0B29      ; UNKNOWN
 5604             0x0B2A,   // 0B2A..0B30; ORIYA
 5605             0x0B31,   // 0B31      ; UNKNOWN
 5606             0x0B32,   // 0B32..0B33; ORIYA
 5607             0x0B34,   // 0B34      ; UNKNOWN
 5608             0x0B35,   // 0B35..0B39; ORIYA
 5609             0x0B3A,   // 0B3A..0B3B; UNKNOWN
 5610             0x0B3C,   // 0B3C..0B44; ORIYA
 5611             0x0B45,   // 0B45..0B46; UNKNOWN
 5612             0x0B47,   // 0B47..0B48; ORIYA
 5613             0x0B49,   // 0B49..0B4A; UNKNOWN
 5614             0x0B4B,   // 0B4B..0B4D; ORIYA
 5615             0x0B4E,   // 0B4E..0B54; UNKNOWN
 5616             0x0B55,   // 0B55..0B57; ORIYA
 5617             0x0B58,   // 0B58..0B5B; UNKNOWN
 5618             0x0B5C,   // 0B5C..0B5D; ORIYA
 5619             0x0B5E,   // 0B5E      ; UNKNOWN
 5620             0x0B5F,   // 0B5F..0B63; ORIYA
 5621             0x0B64,   // 0B64..0B65; UNKNOWN
 5622             0x0B66,   // 0B66..0B77; ORIYA
 5623             0x0B78,   // 0B78..0B81; UNKNOWN
 5624             0x0B82,   // 0B82..0B83; TAMIL
 5625             0x0B84,   // 0B84      ; UNKNOWN
 5626             0x0B85,   // 0B85..0B8A; TAMIL
 5627             0x0B8B,   // 0B8B..0B8D; UNKNOWN
 5628             0x0B8E,   // 0B8E..0B90; TAMIL
 5629             0x0B91,   // 0B91      ; UNKNOWN
 5630             0x0B92,   // 0B92..0B95; TAMIL
 5631             0x0B96,   // 0B96..0B98; UNKNOWN
 5632             0x0B99,   // 0B99..0B9A; TAMIL
 5633             0x0B9B,   // 0B9B      ; UNKNOWN
 5634             0x0B9C,   // 0B9C      ; TAMIL
 5635             0x0B9D,   // 0B9D      ; UNKNOWN
 5636             0x0B9E,   // 0B9E..0B9F; TAMIL
 5637             0x0BA0,   // 0BA0..0BA2; UNKNOWN
 5638             0x0BA3,   // 0BA3..0BA4; TAMIL
 5639             0x0BA5,   // 0BA5..0BA7; UNKNOWN
 5640             0x0BA8,   // 0BA8..0BAA; TAMIL
 5641             0x0BAB,   // 0BAB..0BAD; UNKNOWN
 5642             0x0BAE,   // 0BAE..0BB9; TAMIL
 5643             0x0BBA,   // 0BBA..0BBD; UNKNOWN
 5644             0x0BBE,   // 0BBE..0BC2; TAMIL
 5645             0x0BC3,   // 0BC3..0BC5; UNKNOWN
 5646             0x0BC6,   // 0BC6..0BC8; TAMIL
 5647             0x0BC9,   // 0BC9      ; UNKNOWN
 5648             0x0BCA,   // 0BCA..0BCD; TAMIL
 5649             0x0BCE,   // 0BCE..0BCF; UNKNOWN
 5650             0x0BD0,   // 0BD0      ; TAMIL
 5651             0x0BD1,   // 0BD1..0BD6; UNKNOWN
 5652             0x0BD7,   // 0BD7      ; TAMIL
 5653             0x0BD8,   // 0BD8..0BE5; UNKNOWN
 5654             0x0BE6,   // 0BE6..0BFA; TAMIL
 5655             0x0BFB,   // 0BFB..0BFF; UNKNOWN
 5656             0x0C00,   // 0C00..0C0C; TELUGU
 5657             0x0C0D,   // 0C0D      ; UNKNOWN
 5658             0x0C0E,   // 0C0E..0C10; TELUGU
 5659             0x0C11,   // 0C11      ; UNKNOWN
 5660             0x0C12,   // 0C12..0C28; TELUGU
 5661             0x0C29,   // 0C29      ; UNKNOWN
 5662             0x0C2A,   // 0C2A..0C39; TELUGU
 5663             0x0C3A,   // 0C3A..0C3B; UNKNOWN
 5664             0x0C3C,   // 0C3C..0C44; TELUGU
 5665             0x0C45,   // 0C45      ; UNKNOWN
 5666             0x0C46,   // 0C46..0C48; TELUGU
 5667             0x0C49,   // 0C49      ; UNKNOWN
 5668             0x0C4A,   // 0C4A..0C4D; TELUGU
 5669             0x0C4E,   // 0C4E..0C54; UNKNOWN
 5670             0x0C55,   // 0C55..0C56; TELUGU
 5671             0x0C57,   // 0C57      ; UNKNOWN
 5672             0x0C58,   // 0C58..0C5A; TELUGU
 5673             0x0C5B,   // 0C5B..0C5C; UNKNOWN
 5674             0x0C5D,   // 0C5D      ; TELUGU
 5675             0x0C5E,   // 0C5E..0C5F; UNKNOWN
 5676             0x0C60,   // 0C60..0C63; TELUGU
 5677             0x0C64,   // 0C64..0C65; UNKNOWN
 5678             0x0C66,   // 0C66..0C6F; TELUGU
 5679             0x0C70,   // 0C70..0C76; UNKNOWN
 5680             0x0C77,   // 0C77..0C7F; TELUGU
 5681             0x0C80,   // 0C80..0C8C; KANNADA
 5682             0x0C8D,   // 0C8D      ; UNKNOWN
 5683             0x0C8E,   // 0C8E..0C90; KANNADA
 5684             0x0C91,   // 0C91      ; UNKNOWN
 5685             0x0C92,   // 0C92..0CA8; KANNADA
 5686             0x0CA9,   // 0CA9      ; UNKNOWN
 5687             0x0CAA,   // 0CAA..0CB3; KANNADA
 5688             0x0CB4,   // 0CB4      ; UNKNOWN
 5689             0x0CB5,   // 0CB5..0CB9; KANNADA
 5690             0x0CBA,   // 0CBA..0CBB; UNKNOWN
 5691             0x0CBC,   // 0CBC..0CC4; KANNADA
 5692             0x0CC5,   // 0CC5      ; UNKNOWN
 5693             0x0CC6,   // 0CC6..0CC8; KANNADA
 5694             0x0CC9,   // 0CC9      ; UNKNOWN
 5695             0x0CCA,   // 0CCA..0CCD; KANNADA
 5696             0x0CCE,   // 0CCE..0CD4; UNKNOWN
 5697             0x0CD5,   // 0CD5..0CD6; KANNADA
 5698             0x0CD7,   // 0CD7..0CDC; UNKNOWN
 5699             0x0CDD,   // 0CDD..0CDE; KANNADA
 5700             0x0CDF,   // 0CDF      ; UNKNOWN
 5701             0x0CE0,   // 0CE0..0CE3; KANNADA
 5702             0x0CE4,   // 0CE4..0CE5; UNKNOWN
 5703             0x0CE6,   // 0CE6..0CEF; KANNADA
 5704             0x0CF0,   // 0CF0      ; UNKNOWN
 5705             0x0CF1,   // 0CF1..0CF3; KANNADA
 5706             0x0CF4,   // 0CF4..0CFF; UNKNOWN
 5707             0x0D00,   // 0D00..0D0C; MALAYALAM
 5708             0x0D0D,   // 0D0D      ; UNKNOWN
 5709             0x0D0E,   // 0D0E..0D10; MALAYALAM
 5710             0x0D11,   // 0D11      ; UNKNOWN
 5711             0x0D12,   // 0D12..0D44; MALAYALAM
 5712             0x0D45,   // 0D45      ; UNKNOWN
 5713             0x0D46,   // 0D46..0D48; MALAYALAM
 5714             0x0D49,   // 0D49      ; UNKNOWN
 5715             0x0D4A,   // 0D4A..0D4F; MALAYALAM
 5716             0x0D50,   // 0D50..0D53; UNKNOWN
 5717             0x0D54,   // 0D54..0D63; MALAYALAM
 5718             0x0D64,   // 0D64..0D65; UNKNOWN
 5719             0x0D66,   // 0D66..0D7F; MALAYALAM
 5720             0x0D80,   // 0D80      ; UNKNOWN
 5721             0x0D81,   // 0D81..0D83; SINHALA
 5722             0x0D84,   // 0D84      ; UNKNOWN
 5723             0x0D85,   // 0D85..0D96; SINHALA
 5724             0x0D97,   // 0D97..0D99; UNKNOWN
 5725             0x0D9A,   // 0D9A..0DB1; SINHALA
 5726             0x0DB2,   // 0DB2      ; UNKNOWN
 5727             0x0DB3,   // 0DB3..0DBB; SINHALA
 5728             0x0DBC,   // 0DBC      ; UNKNOWN
 5729             0x0DBD,   // 0DBD      ; SINHALA
 5730             0x0DBE,   // 0DBE..0DBF; UNKNOWN
 5731             0x0DC0,   // 0DC0..0DC6; SINHALA
 5732             0x0DC7,   // 0DC7..0DC9; UNKNOWN
 5733             0x0DCA,   // 0DCA      ; SINHALA
 5734             0x0DCB,   // 0DCB..0DCE; UNKNOWN
 5735             0x0DCF,   // 0DCF..0DD4; SINHALA
 5736             0x0DD5,   // 0DD5      ; UNKNOWN
 5737             0x0DD6,   // 0DD6      ; SINHALA
 5738             0x0DD7,   // 0DD7      ; UNKNOWN
 5739             0x0DD8,   // 0DD8..0DDF; SINHALA
 5740             0x0DE0,   // 0DE0..0DE5; UNKNOWN
 5741             0x0DE6,   // 0DE6..0DEF; SINHALA
 5742             0x0DF0,   // 0DF0..0DF1; UNKNOWN
 5743             0x0DF2,   // 0DF2..0DF4; SINHALA
 5744             0x0DF5,   // 0DF5..0E00; UNKNOWN
 5745             0x0E01,   // 0E01..0E3A; THAI
 5746             0x0E3B,   // 0E3B..0E3E; UNKNOWN
 5747             0x0E3F,   // 0E3F      ; COMMON
 5748             0x0E40,   // 0E40..0E5B; THAI
 5749             0x0E5C,   // 0E5C..0E80; UNKNOWN
 5750             0x0E81,   // 0E81..0E82; LAO
 5751             0x0E83,   // 0E83      ; UNKNOWN
 5752             0x0E84,   // 0E84      ; LAO
 5753             0x0E85,   // 0E85      ; UNKNOWN
 5754             0x0E86,   // 0E86..0E8A; LAO
 5755             0x0E8B,   // 0E8B      ; UNKNOWN
 5756             0x0E8C,   // 0E8C..0EA3; LAO
 5757             0x0EA4,   // 0EA4      ; UNKNOWN
 5758             0x0EA5,   // 0EA5      ; LAO
 5759             0x0EA6,   // 0EA6      ; UNKNOWN
 5760             0x0EA7,   // 0EA7..0EBD; LAO
 5761             0x0EBE,   // 0EBE..0EBF; UNKNOWN
 5762             0x0EC0,   // 0EC0..0EC4; LAO
 5763             0x0EC5,   // 0EC5      ; UNKNOWN
 5764             0x0EC6,   // 0EC6      ; LAO
 5765             0x0EC7,   // 0EC7      ; UNKNOWN
 5766             0x0EC8,   // 0EC8..0ECE; LAO
 5767             0x0ECF,   // 0ECF      ; UNKNOWN
 5768             0x0ED0,   // 0ED0..0ED9; LAO
 5769             0x0EDA,   // 0EDA..0EDB; UNKNOWN
 5770             0x0EDC,   // 0EDC..0EDF; LAO
 5771             0x0EE0,   // 0EE0..0EFF; UNKNOWN
 5772             0x0F00,   // 0F00..0F47; TIBETAN
 5773             0x0F48,   // 0F48      ; UNKNOWN
 5774             0x0F49,   // 0F49..0F6C; TIBETAN
 5775             0x0F6D,   // 0F6D..0F70; UNKNOWN
 5776             0x0F71,   // 0F71..0F97; TIBETAN
 5777             0x0F98,   // 0F98      ; UNKNOWN
 5778             0x0F99,   // 0F99..0FBC; TIBETAN
 5779             0x0FBD,   // 0FBD      ; UNKNOWN
 5780             0x0FBE,   // 0FBE..0FCC; TIBETAN
 5781             0x0FCD,   // 0FCD      ; UNKNOWN
 5782             0x0FCE,   // 0FCE..0FD4; TIBETAN
 5783             0x0FD5,   // 0FD5..0FD8; COMMON
 5784             0x0FD9,   // 0FD9..0FDA; TIBETAN
 5785             0x0FDB,   // 0FDB..0FFF; UNKNOWN
 5786             0x1000,   // 1000..109F; MYANMAR
 5787             0x10A0,   // 10A0..10C5; GEORGIAN
 5788             0x10C6,   // 10C6      ; UNKNOWN
 5789             0x10C7,   // 10C7      ; GEORGIAN
 5790             0x10C8,   // 10C8..10CC; UNKNOWN
 5791             0x10CD,   // 10CD      ; GEORGIAN
 5792             0x10CE,   // 10CE..10CF; UNKNOWN
 5793             0x10D0,   // 10D0..10FA; GEORGIAN
 5794             0x10FB,   // 10FB      ; COMMON
 5795             0x10FC,   // 10FC..10FF; GEORGIAN
 5796             0x1100,   // 1100..11FF; HANGUL
 5797             0x1200,   // 1200..1248; ETHIOPIC
 5798             0x1249,   // 1249      ; UNKNOWN
 5799             0x124A,   // 124A..124D; ETHIOPIC
 5800             0x124E,   // 124E..124F; UNKNOWN
 5801             0x1250,   // 1250..1256; ETHIOPIC
 5802             0x1257,   // 1257      ; UNKNOWN
 5803             0x1258,   // 1258      ; ETHIOPIC
 5804             0x1259,   // 1259      ; UNKNOWN
 5805             0x125A,   // 125A..125D; ETHIOPIC
 5806             0x125E,   // 125E..125F; UNKNOWN
 5807             0x1260,   // 1260..1288; ETHIOPIC
 5808             0x1289,   // 1289      ; UNKNOWN
 5809             0x128A,   // 128A..128D; ETHIOPIC
 5810             0x128E,   // 128E..128F; UNKNOWN
 5811             0x1290,   // 1290..12B0; ETHIOPIC
 5812             0x12B1,   // 12B1      ; UNKNOWN
 5813             0x12B2,   // 12B2..12B5; ETHIOPIC
 5814             0x12B6,   // 12B6..12B7; UNKNOWN
 5815             0x12B8,   // 12B8..12BE; ETHIOPIC
 5816             0x12BF,   // 12BF      ; UNKNOWN
 5817             0x12C0,   // 12C0      ; ETHIOPIC
 5818             0x12C1,   // 12C1      ; UNKNOWN
 5819             0x12C2,   // 12C2..12C5; ETHIOPIC
 5820             0x12C6,   // 12C6..12C7; UNKNOWN
 5821             0x12C8,   // 12C8..12D6; ETHIOPIC
 5822             0x12D7,   // 12D7      ; UNKNOWN
 5823             0x12D8,   // 12D8..1310; ETHIOPIC
 5824             0x1311,   // 1311      ; UNKNOWN
 5825             0x1312,   // 1312..1315; ETHIOPIC
 5826             0x1316,   // 1316..1317; UNKNOWN
 5827             0x1318,   // 1318..135A; ETHIOPIC
 5828             0x135B,   // 135B..135C; UNKNOWN
 5829             0x135D,   // 135D..137C; ETHIOPIC
 5830             0x137D,   // 137D..137F; UNKNOWN
 5831             0x1380,   // 1380..1399; ETHIOPIC
 5832             0x139A,   // 139A..139F; UNKNOWN
 5833             0x13A0,   // 13A0..13F5; CHEROKEE
 5834             0x13F6,   // 13F6..13F7; UNKNOWN
 5835             0x13F8,   // 13F8..13FD; CHEROKEE
 5836             0x13FE,   // 13FE..13FF; UNKNOWN
 5837             0x1400,   // 1400..167F; CANADIAN_ABORIGINAL
 5838             0x1680,   // 1680..169C; OGHAM
 5839             0x169D,   // 169D..169F; UNKNOWN
 5840             0x16A0,   // 16A0..16EA; RUNIC
 5841             0x16EB,   // 16EB..16ED; COMMON
 5842             0x16EE,   // 16EE..16F8; RUNIC
 5843             0x16F9,   // 16F9..16FF; UNKNOWN
 5844             0x1700,   // 1700..1715; TAGALOG
 5845             0x1716,   // 1716..171E; UNKNOWN
 5846             0x171F,   // 171F      ; TAGALOG
 5847             0x1720,   // 1720..1734; HANUNOO
 5848             0x1735,   // 1735..1736; COMMON
 5849             0x1737,   // 1737..173F; UNKNOWN
 5850             0x1740,   // 1740..1753; BUHID
 5851             0x1754,   // 1754..175F; UNKNOWN
 5852             0x1760,   // 1760..176C; TAGBANWA
 5853             0x176D,   // 176D      ; UNKNOWN
 5854             0x176E,   // 176E..1770; TAGBANWA
 5855             0x1771,   // 1771      ; UNKNOWN
 5856             0x1772,   // 1772..1773; TAGBANWA
 5857             0x1774,   // 1774..177F; UNKNOWN
 5858             0x1780,   // 1780..17DD; KHMER
 5859             0x17DE,   // 17DE..17DF; UNKNOWN
 5860             0x17E0,   // 17E0..17E9; KHMER
 5861             0x17EA,   // 17EA..17EF; UNKNOWN
 5862             0x17F0,   // 17F0..17F9; KHMER
 5863             0x17FA,   // 17FA..17FF; UNKNOWN
 5864             0x1800,   // 1800..1801; MONGOLIAN
 5865             0x1802,   // 1802..1803; COMMON
 5866             0x1804,   // 1804      ; MONGOLIAN
 5867             0x1805,   // 1805      ; COMMON
 5868             0x1806,   // 1806..1819; MONGOLIAN
 5869             0x181A,   // 181A..181F; UNKNOWN
 5870             0x1820,   // 1820..1878; MONGOLIAN
 5871             0x1879,   // 1879..187F; UNKNOWN
 5872             0x1880,   // 1880..18AA; MONGOLIAN
 5873             0x18AB,   // 18AB..18AF; UNKNOWN
 5874             0x18B0,   // 18B0..18F5; CANADIAN_ABORIGINAL
 5875             0x18F6,   // 18F6..18FF; UNKNOWN
 5876             0x1900,   // 1900..191E; LIMBU
 5877             0x191F,   // 191F      ; UNKNOWN
 5878             0x1920,   // 1920..192B; LIMBU
 5879             0x192C,   // 192C..192F; UNKNOWN
 5880             0x1930,   // 1930..193B; LIMBU
 5881             0x193C,   // 193C..193F; UNKNOWN
 5882             0x1940,   // 1940      ; LIMBU
 5883             0x1941,   // 1941..1943; UNKNOWN
 5884             0x1944,   // 1944..194F; LIMBU
 5885             0x1950,   // 1950..196D; TAI_LE
 5886             0x196E,   // 196E..196F; UNKNOWN
 5887             0x1970,   // 1970..1974; TAI_LE
 5888             0x1975,   // 1975..197F; UNKNOWN
 5889             0x1980,   // 1980..19AB; NEW_TAI_LUE
 5890             0x19AC,   // 19AC..19AF; UNKNOWN
 5891             0x19B0,   // 19B0..19C9; NEW_TAI_LUE
 5892             0x19CA,   // 19CA..19CF; UNKNOWN
 5893             0x19D0,   // 19D0..19DA; NEW_TAI_LUE
 5894             0x19DB,   // 19DB..19DD; UNKNOWN
 5895             0x19DE,   // 19DE..19DF; NEW_TAI_LUE
 5896             0x19E0,   // 19E0..19FF; KHMER
 5897             0x1A00,   // 1A00..1A1B; BUGINESE
 5898             0x1A1C,   // 1A1C..1A1D; UNKNOWN
 5899             0x1A1E,   // 1A1E..1A1F; BUGINESE
 5900             0x1A20,   // 1A20..1A5E; TAI_THAM
 5901             0x1A5F,   // 1A5F      ; UNKNOWN
 5902             0x1A60,   // 1A60..1A7C; TAI_THAM
 5903             0x1A7D,   // 1A7D..1A7E; UNKNOWN
 5904             0x1A7F,   // 1A7F..1A89; TAI_THAM
 5905             0x1A8A,   // 1A8A..1A8F; UNKNOWN
 5906             0x1A90,   // 1A90..1A99; TAI_THAM
 5907             0x1A9A,   // 1A9A..1A9F; UNKNOWN
 5908             0x1AA0,   // 1AA0..1AAD; TAI_THAM
 5909             0x1AAE,   // 1AAE..1AAF; UNKNOWN
 5910             0x1AB0,   // 1AB0..1ACE; INHERITED
 5911             0x1ACF,   // 1ACF..1AFF; UNKNOWN
 5912             0x1B00,   // 1B00..1B4C; BALINESE
 5913             0x1B4D,   // 1B4D..1B4F; UNKNOWN
 5914             0x1B50,   // 1B50..1B7E; BALINESE
 5915             0x1B7F,   // 1B7F      ; UNKNOWN
 5916             0x1B80,   // 1B80..1BBF; SUNDANESE
 5917             0x1BC0,   // 1BC0..1BF3; BATAK
 5918             0x1BF4,   // 1BF4..1BFB; UNKNOWN
 5919             0x1BFC,   // 1BFC..1BFF; BATAK
 5920             0x1C00,   // 1C00..1C37; LEPCHA
 5921             0x1C38,   // 1C38..1C3A; UNKNOWN
 5922             0x1C3B,   // 1C3B..1C49; LEPCHA
 5923             0x1C4A,   // 1C4A..1C4C; UNKNOWN
 5924             0x1C4D,   // 1C4D..1C4F; LEPCHA
 5925             0x1C50,   // 1C50..1C7F; OL_CHIKI
 5926             0x1C80,   // 1C80..1C88; CYRILLIC
 5927             0x1C89,   // 1C89..1C8F; UNKNOWN
 5928             0x1C90,   // 1C90..1CBA; GEORGIAN
 5929             0x1CBB,   // 1CBB..1CBC; UNKNOWN
 5930             0x1CBD,   // 1CBD..1CBF; GEORGIAN
 5931             0x1CC0,   // 1CC0..1CC7; SUNDANESE
 5932             0x1CC8,   // 1CC8..1CCF; UNKNOWN
 5933             0x1CD0,   // 1CD0..1CD2; INHERITED
 5934             0x1CD3,   // 1CD3      ; COMMON
 5935             0x1CD4,   // 1CD4..1CE0; INHERITED
 5936             0x1CE1,   // 1CE1      ; COMMON
 5937             0x1CE2,   // 1CE2..1CE8; INHERITED
 5938             0x1CE9,   // 1CE9..1CEC; COMMON
 5939             0x1CED,   // 1CED      ; INHERITED
 5940             0x1CEE,   // 1CEE..1CF3; COMMON
 5941             0x1CF4,   // 1CF4      ; INHERITED
 5942             0x1CF5,   // 1CF5..1CF7; COMMON
 5943             0x1CF8,   // 1CF8..1CF9; INHERITED
 5944             0x1CFA,   // 1CFA      ; COMMON
 5945             0x1CFB,   // 1CFB..1CFF; UNKNOWN
 5946             0x1D00,   // 1D00..1D25; LATIN
 5947             0x1D26,   // 1D26..1D2A; GREEK
 5948             0x1D2B,   // 1D2B      ; CYRILLIC
 5949             0x1D2C,   // 1D2C..1D5C; LATIN
 5950             0x1D5D,   // 1D5D..1D61; GREEK
 5951             0x1D62,   // 1D62..1D65; LATIN
 5952             0x1D66,   // 1D66..1D6A; GREEK
 5953             0x1D6B,   // 1D6B..1D77; LATIN
 5954             0x1D78,   // 1D78      ; CYRILLIC
 5955             0x1D79,   // 1D79..1DBE; LATIN
 5956             0x1DBF,   // 1DBF      ; GREEK
 5957             0x1DC0,   // 1DC0..1DFF; INHERITED
 5958             0x1E00,   // 1E00..1EFF; LATIN
 5959             0x1F00,   // 1F00..1F15; GREEK
 5960             0x1F16,   // 1F16..1F17; UNKNOWN
 5961             0x1F18,   // 1F18..1F1D; GREEK
 5962             0x1F1E,   // 1F1E..1F1F; UNKNOWN
 5963             0x1F20,   // 1F20..1F45; GREEK
 5964             0x1F46,   // 1F46..1F47; UNKNOWN
 5965             0x1F48,   // 1F48..1F4D; GREEK
 5966             0x1F4E,   // 1F4E..1F4F; UNKNOWN
 5967             0x1F50,   // 1F50..1F57; GREEK
 5968             0x1F58,   // 1F58      ; UNKNOWN
 5969             0x1F59,   // 1F59      ; GREEK
 5970             0x1F5A,   // 1F5A      ; UNKNOWN
 5971             0x1F5B,   // 1F5B      ; GREEK
 5972             0x1F5C,   // 1F5C      ; UNKNOWN
 5973             0x1F5D,   // 1F5D      ; GREEK
 5974             0x1F5E,   // 1F5E      ; UNKNOWN
 5975             0x1F5F,   // 1F5F..1F7D; GREEK
 5976             0x1F7E,   // 1F7E..1F7F; UNKNOWN
 5977             0x1F80,   // 1F80..1FB4; GREEK
 5978             0x1FB5,   // 1FB5      ; UNKNOWN
 5979             0x1FB6,   // 1FB6..1FC4; GREEK
 5980             0x1FC5,   // 1FC5      ; UNKNOWN
 5981             0x1FC6,   // 1FC6..1FD3; GREEK
 5982             0x1FD4,   // 1FD4..1FD5; UNKNOWN
 5983             0x1FD6,   // 1FD6..1FDB; GREEK
 5984             0x1FDC,   // 1FDC      ; UNKNOWN
 5985             0x1FDD,   // 1FDD..1FEF; GREEK
 5986             0x1FF0,   // 1FF0..1FF1; UNKNOWN
 5987             0x1FF2,   // 1FF2..1FF4; GREEK
 5988             0x1FF5,   // 1FF5      ; UNKNOWN
 5989             0x1FF6,   // 1FF6..1FFE; GREEK
 5990             0x1FFF,   // 1FFF      ; UNKNOWN
 5991             0x2000,   // 2000..200B; COMMON
 5992             0x200C,   // 200C..200D; INHERITED
 5993             0x200E,   // 200E..2064; COMMON
 5994             0x2065,   // 2065      ; UNKNOWN
 5995             0x2066,   // 2066..2070; COMMON
 5996             0x2071,   // 2071      ; LATIN
 5997             0x2072,   // 2072..2073; UNKNOWN
 5998             0x2074,   // 2074..207E; COMMON
 5999             0x207F,   // 207F      ; LATIN
 6000             0x2080,   // 2080..208E; COMMON
 6001             0x208F,   // 208F      ; UNKNOWN
 6002             0x2090,   // 2090..209C; LATIN
 6003             0x209D,   // 209D..209F; UNKNOWN
 6004             0x20A0,   // 20A0..20C0; COMMON
 6005             0x20C1,   // 20C1..20CF; UNKNOWN
 6006             0x20D0,   // 20D0..20F0; INHERITED
 6007             0x20F1,   // 20F1..20FF; UNKNOWN
 6008             0x2100,   // 2100..2125; COMMON
 6009             0x2126,   // 2126      ; GREEK
 6010             0x2127,   // 2127..2129; COMMON
 6011             0x212A,   // 212A..212B; LATIN
 6012             0x212C,   // 212C..2131; COMMON
 6013             0x2132,   // 2132      ; LATIN
 6014             0x2133,   // 2133..214D; COMMON
 6015             0x214E,   // 214E      ; LATIN
 6016             0x214F,   // 214F..215F; COMMON
 6017             0x2160,   // 2160..2188; LATIN
 6018             0x2189,   // 2189..218B; COMMON
 6019             0x218C,   // 218C..218F; UNKNOWN
 6020             0x2190,   // 2190..2426; COMMON
 6021             0x2427,   // 2427..243F; UNKNOWN
 6022             0x2440,   // 2440..244A; COMMON
 6023             0x244B,   // 244B..245F; UNKNOWN
 6024             0x2460,   // 2460..27FF; COMMON
 6025             0x2800,   // 2800..28FF; BRAILLE
 6026             0x2900,   // 2900..2B73; COMMON
 6027             0x2B74,   // 2B74..2B75; UNKNOWN
 6028             0x2B76,   // 2B76..2B95; COMMON
 6029             0x2B96,   // 2B96      ; UNKNOWN
 6030             0x2B97,   // 2B97..2BFF; COMMON
 6031             0x2C00,   // 2C00..2C5F; GLAGOLITIC
 6032             0x2C60,   // 2C60..2C7F; LATIN
 6033             0x2C80,   // 2C80..2CF3; COPTIC
 6034             0x2CF4,   // 2CF4..2CF8; UNKNOWN
 6035             0x2CF9,   // 2CF9..2CFF; COPTIC
 6036             0x2D00,   // 2D00..2D25; GEORGIAN
 6037             0x2D26,   // 2D26      ; UNKNOWN
 6038             0x2D27,   // 2D27      ; GEORGIAN
 6039             0x2D28,   // 2D28..2D2C; UNKNOWN
 6040             0x2D2D,   // 2D2D      ; GEORGIAN
 6041             0x2D2E,   // 2D2E..2D2F; UNKNOWN
 6042             0x2D30,   // 2D30..2D67; TIFINAGH
 6043             0x2D68,   // 2D68..2D6E; UNKNOWN
 6044             0x2D6F,   // 2D6F..2D70; TIFINAGH
 6045             0x2D71,   // 2D71..2D7E; UNKNOWN
 6046             0x2D7F,   // 2D7F      ; TIFINAGH
 6047             0x2D80,   // 2D80..2D96; ETHIOPIC
 6048             0x2D97,   // 2D97..2D9F; UNKNOWN
 6049             0x2DA0,   // 2DA0..2DA6; ETHIOPIC
 6050             0x2DA7,   // 2DA7      ; UNKNOWN
 6051             0x2DA8,   // 2DA8..2DAE; ETHIOPIC
 6052             0x2DAF,   // 2DAF      ; UNKNOWN
 6053             0x2DB0,   // 2DB0..2DB6; ETHIOPIC
 6054             0x2DB7,   // 2DB7      ; UNKNOWN
 6055             0x2DB8,   // 2DB8..2DBE; ETHIOPIC
 6056             0x2DBF,   // 2DBF      ; UNKNOWN
 6057             0x2DC0,   // 2DC0..2DC6; ETHIOPIC
 6058             0x2DC7,   // 2DC7      ; UNKNOWN
 6059             0x2DC8,   // 2DC8..2DCE; ETHIOPIC
 6060             0x2DCF,   // 2DCF      ; UNKNOWN
 6061             0x2DD0,   // 2DD0..2DD6; ETHIOPIC
 6062             0x2DD7,   // 2DD7      ; UNKNOWN
 6063             0x2DD8,   // 2DD8..2DDE; ETHIOPIC
 6064             0x2DDF,   // 2DDF      ; UNKNOWN
 6065             0x2DE0,   // 2DE0..2DFF; CYRILLIC
 6066             0x2E00,   // 2E00..2E5D; COMMON
 6067             0x2E5E,   // 2E5E..2E7F; UNKNOWN
 6068             0x2E80,   // 2E80..2E99; HAN
 6069             0x2E9A,   // 2E9A      ; UNKNOWN
 6070             0x2E9B,   // 2E9B..2EF3; HAN
 6071             0x2EF4,   // 2EF4..2EFF; UNKNOWN
 6072             0x2F00,   // 2F00..2FD5; HAN
 6073             0x2FD6,   // 2FD6..2FEF; UNKNOWN
 6074             0x2FF0,   // 2FF0..3004; COMMON
 6075             0x3005,   // 3005      ; HAN
 6076             0x3006,   // 3006      ; COMMON
 6077             0x3007,   // 3007      ; HAN
 6078             0x3008,   // 3008..3020; COMMON
 6079             0x3021,   // 3021..3029; HAN
 6080             0x302A,   // 302A..302D; INHERITED
 6081             0x302E,   // 302E..302F; HANGUL
 6082             0x3030,   // 3030..3037; COMMON
 6083             0x3038,   // 3038..303B; HAN
 6084             0x303C,   // 303C..303F; COMMON
 6085             0x3040,   // 3040      ; UNKNOWN
 6086             0x3041,   // 3041..3096; HIRAGANA
 6087             0x3097,   // 3097..3098; UNKNOWN
 6088             0x3099,   // 3099..309A; INHERITED
 6089             0x309B,   // 309B..309C; COMMON
 6090             0x309D,   // 309D..309F; HIRAGANA
 6091             0x30A0,   // 30A0      ; COMMON
 6092             0x30A1,   // 30A1..30FA; KATAKANA
 6093             0x30FB,   // 30FB..30FC; COMMON
 6094             0x30FD,   // 30FD..30FF; KATAKANA
 6095             0x3100,   // 3100..3104; UNKNOWN
 6096             0x3105,   // 3105..312F; BOPOMOFO
 6097             0x3130,   // 3130      ; UNKNOWN
 6098             0x3131,   // 3131..318E; HANGUL
 6099             0x318F,   // 318F      ; UNKNOWN
 6100             0x3190,   // 3190..319F; COMMON
 6101             0x31A0,   // 31A0..31BF; BOPOMOFO
 6102             0x31C0,   // 31C0..31E3; COMMON
 6103             0x31E4,   // 31E4..31EE; UNKNOWN
 6104             0x31EF,   // 31EF      ; COMMON
 6105             0x31F0,   // 31F0..31FF; KATAKANA
 6106             0x3200,   // 3200..321E; HANGUL
 6107             0x321F,   // 321F      ; UNKNOWN
 6108             0x3220,   // 3220..325F; COMMON
 6109             0x3260,   // 3260..327E; HANGUL
 6110             0x327F,   // 327F..32CF; COMMON
 6111             0x32D0,   // 32D0..32FE; KATAKANA
 6112             0x32FF,   // 32FF      ; COMMON
 6113             0x3300,   // 3300..3357; KATAKANA
 6114             0x3358,   // 3358..33FF; COMMON
 6115             0x3400,   // 3400..4DBF; HAN
 6116             0x4DC0,   // 4DC0..4DFF; COMMON
 6117             0x4E00,   // 4E00..9FFF; HAN
 6118             0xA000,   // A000..A48C; YI
 6119             0xA48D,   // A48D..A48F; UNKNOWN
 6120             0xA490,   // A490..A4C6; YI
 6121             0xA4C7,   // A4C7..A4CF; UNKNOWN
 6122             0xA4D0,   // A4D0..A4FF; LISU
 6123             0xA500,   // A500..A62B; VAI
 6124             0xA62C,   // A62C..A63F; UNKNOWN
 6125             0xA640,   // A640..A69F; CYRILLIC
 6126             0xA6A0,   // A6A0..A6F7; BAMUM
 6127             0xA6F8,   // A6F8..A6FF; UNKNOWN
 6128             0xA700,   // A700..A721; COMMON
 6129             0xA722,   // A722..A787; LATIN
 6130             0xA788,   // A788..A78A; COMMON
 6131             0xA78B,   // A78B..A7CA; LATIN
 6132             0xA7CB,   // A7CB..A7CF; UNKNOWN
 6133             0xA7D0,   // A7D0..A7D1; LATIN
 6134             0xA7D2,   // A7D2      ; UNKNOWN
 6135             0xA7D3,   // A7D3      ; LATIN
 6136             0xA7D4,   // A7D4      ; UNKNOWN
 6137             0xA7D5,   // A7D5..A7D9; LATIN
 6138             0xA7DA,   // A7DA..A7F1; UNKNOWN
 6139             0xA7F2,   // A7F2..A7FF; LATIN
 6140             0xA800,   // A800..A82C; SYLOTI_NAGRI
 6141             0xA82D,   // A82D..A82F; UNKNOWN
 6142             0xA830,   // A830..A839; COMMON
 6143             0xA83A,   // A83A..A83F; UNKNOWN
 6144             0xA840,   // A840..A877; PHAGS_PA
 6145             0xA878,   // A878..A87F; UNKNOWN
 6146             0xA880,   // A880..A8C5; SAURASHTRA
 6147             0xA8C6,   // A8C6..A8CD; UNKNOWN
 6148             0xA8CE,   // A8CE..A8D9; SAURASHTRA
 6149             0xA8DA,   // A8DA..A8DF; UNKNOWN
 6150             0xA8E0,   // A8E0..A8FF; DEVANAGARI
 6151             0xA900,   // A900..A92D; KAYAH_LI
 6152             0xA92E,   // A92E      ; COMMON
 6153             0xA92F,   // A92F      ; KAYAH_LI
 6154             0xA930,   // A930..A953; REJANG
 6155             0xA954,   // A954..A95E; UNKNOWN
 6156             0xA95F,   // A95F      ; REJANG
 6157             0xA960,   // A960..A97C; HANGUL
 6158             0xA97D,   // A97D..A97F; UNKNOWN
 6159             0xA980,   // A980..A9CD; JAVANESE
 6160             0xA9CE,   // A9CE      ; UNKNOWN
 6161             0xA9CF,   // A9CF      ; COMMON
 6162             0xA9D0,   // A9D0..A9D9; JAVANESE
 6163             0xA9DA,   // A9DA..A9DD; UNKNOWN
 6164             0xA9DE,   // A9DE..A9DF; JAVANESE
 6165             0xA9E0,   // A9E0..A9FE; MYANMAR
 6166             0xA9FF,   // A9FF      ; UNKNOWN
 6167             0xAA00,   // AA00..AA36; CHAM
 6168             0xAA37,   // AA37..AA3F; UNKNOWN
 6169             0xAA40,   // AA40..AA4D; CHAM
 6170             0xAA4E,   // AA4E..AA4F; UNKNOWN
 6171             0xAA50,   // AA50..AA59; CHAM
 6172             0xAA5A,   // AA5A..AA5B; UNKNOWN
 6173             0xAA5C,   // AA5C..AA5F; CHAM
 6174             0xAA60,   // AA60..AA7F; MYANMAR
 6175             0xAA80,   // AA80..AAC2; TAI_VIET
 6176             0xAAC3,   // AAC3..AADA; UNKNOWN
 6177             0xAADB,   // AADB..AADF; TAI_VIET
 6178             0xAAE0,   // AAE0..AAF6; MEETEI_MAYEK
 6179             0xAAF7,   // AAF7..AB00; UNKNOWN
 6180             0xAB01,   // AB01..AB06; ETHIOPIC
 6181             0xAB07,   // AB07..AB08; UNKNOWN
 6182             0xAB09,   // AB09..AB0E; ETHIOPIC
 6183             0xAB0F,   // AB0F..AB10; UNKNOWN
 6184             0xAB11,   // AB11..AB16; ETHIOPIC
 6185             0xAB17,   // AB17..AB1F; UNKNOWN
 6186             0xAB20,   // AB20..AB26; ETHIOPIC
 6187             0xAB27,   // AB27      ; UNKNOWN
 6188             0xAB28,   // AB28..AB2E; ETHIOPIC
 6189             0xAB2F,   // AB2F      ; UNKNOWN
 6190             0xAB30,   // AB30..AB5A; LATIN
 6191             0xAB5B,   // AB5B      ; COMMON
 6192             0xAB5C,   // AB5C..AB64; LATIN
 6193             0xAB65,   // AB65      ; GREEK
 6194             0xAB66,   // AB66..AB69; LATIN
 6195             0xAB6A,   // AB6A..AB6B; COMMON
 6196             0xAB6C,   // AB6C..AB6F; UNKNOWN
 6197             0xAB70,   // AB70..ABBF; CHEROKEE
 6198             0xABC0,   // ABC0..ABED; MEETEI_MAYEK
 6199             0xABEE,   // ABEE..ABEF; UNKNOWN
 6200             0xABF0,   // ABF0..ABF9; MEETEI_MAYEK
 6201             0xABFA,   // ABFA..ABFF; UNKNOWN
 6202             0xAC00,   // AC00..D7A3; HANGUL
 6203             0xD7A4,   // D7A4..D7AF; UNKNOWN
 6204             0xD7B0,   // D7B0..D7C6; HANGUL
 6205             0xD7C7,   // D7C7..D7CA; UNKNOWN
 6206             0xD7CB,   // D7CB..D7FB; HANGUL
 6207             0xD7FC,   // D7FC..F8FF; UNKNOWN
 6208             0xF900,   // F900..FA6D; HAN
 6209             0xFA6E,   // FA6E..FA6F; UNKNOWN
 6210             0xFA70,   // FA70..FAD9; HAN
 6211             0xFADA,   // FADA..FAFF; UNKNOWN
 6212             0xFB00,   // FB00..FB06; LATIN
 6213             0xFB07,   // FB07..FB12; UNKNOWN
 6214             0xFB13,   // FB13..FB17; ARMENIAN
 6215             0xFB18,   // FB18..FB1C; UNKNOWN
 6216             0xFB1D,   // FB1D..FB36; HEBREW
 6217             0xFB37,   // FB37      ; UNKNOWN
 6218             0xFB38,   // FB38..FB3C; HEBREW
 6219             0xFB3D,   // FB3D      ; UNKNOWN
 6220             0xFB3E,   // FB3E      ; HEBREW
 6221             0xFB3F,   // FB3F      ; UNKNOWN
 6222             0xFB40,   // FB40..FB41; HEBREW
 6223             0xFB42,   // FB42      ; UNKNOWN
 6224             0xFB43,   // FB43..FB44; HEBREW
 6225             0xFB45,   // FB45      ; UNKNOWN
 6226             0xFB46,   // FB46..FB4F; HEBREW
 6227             0xFB50,   // FB50..FBC2; ARABIC
 6228             0xFBC3,   // FBC3..FBD2; UNKNOWN
 6229             0xFBD3,   // FBD3..FD3D; ARABIC
 6230             0xFD3E,   // FD3E..FD3F; COMMON
 6231             0xFD40,   // FD40..FD8F; ARABIC
 6232             0xFD90,   // FD90..FD91; UNKNOWN
 6233             0xFD92,   // FD92..FDC7; ARABIC
 6234             0xFDC8,   // FDC8..FDCE; UNKNOWN
 6235             0xFDCF,   // FDCF      ; ARABIC
 6236             0xFDD0,   // FDD0..FDEF; UNKNOWN
 6237             0xFDF0,   // FDF0..FDFF; ARABIC
 6238             0xFE00,   // FE00..FE0F; INHERITED
 6239             0xFE10,   // FE10..FE19; COMMON
 6240             0xFE1A,   // FE1A..FE1F; UNKNOWN
 6241             0xFE20,   // FE20..FE2D; INHERITED
 6242             0xFE2E,   // FE2E..FE2F; CYRILLIC
 6243             0xFE30,   // FE30..FE52; COMMON
 6244             0xFE53,   // FE53      ; UNKNOWN
 6245             0xFE54,   // FE54..FE66; COMMON
 6246             0xFE67,   // FE67      ; UNKNOWN
 6247             0xFE68,   // FE68..FE6B; COMMON
 6248             0xFE6C,   // FE6C..FE6F; UNKNOWN
 6249             0xFE70,   // FE70..FE74; ARABIC
 6250             0xFE75,   // FE75      ; UNKNOWN
 6251             0xFE76,   // FE76..FEFC; ARABIC
 6252             0xFEFD,   // FEFD..FEFE; UNKNOWN
 6253             0xFEFF,   // FEFF      ; COMMON
 6254             0xFF00,   // FF00      ; UNKNOWN
 6255             0xFF01,   // FF01..FF20; COMMON
 6256             0xFF21,   // FF21..FF3A; LATIN
 6257             0xFF3B,   // FF3B..FF40; COMMON
 6258             0xFF41,   // FF41..FF5A; LATIN
 6259             0xFF5B,   // FF5B..FF65; COMMON
 6260             0xFF66,   // FF66..FF6F; KATAKANA
 6261             0xFF70,   // FF70      ; COMMON
 6262             0xFF71,   // FF71..FF9D; KATAKANA
 6263             0xFF9E,   // FF9E..FF9F; COMMON
 6264             0xFFA0,   // FFA0..FFBE; HANGUL
 6265             0xFFBF,   // FFBF..FFC1; UNKNOWN
 6266             0xFFC2,   // FFC2..FFC7; HANGUL
 6267             0xFFC8,   // FFC8..FFC9; UNKNOWN
 6268             0xFFCA,   // FFCA..FFCF; HANGUL
 6269             0xFFD0,   // FFD0..FFD1; UNKNOWN
 6270             0xFFD2,   // FFD2..FFD7; HANGUL
 6271             0xFFD8,   // FFD8..FFD9; UNKNOWN
 6272             0xFFDA,   // FFDA..FFDC; HANGUL
 6273             0xFFDD,   // FFDD..FFDF; UNKNOWN
 6274             0xFFE0,   // FFE0..FFE6; COMMON
 6275             0xFFE7,   // FFE7      ; UNKNOWN
 6276             0xFFE8,   // FFE8..FFEE; COMMON
 6277             0xFFEF,   // FFEF..FFF8; UNKNOWN
 6278             0xFFF9,   // FFF9..FFFD; COMMON
 6279             0xFFFE,   // FFFE..FFFF; UNKNOWN
 6280             0x10000,  // 10000..1000B; LINEAR_B
 6281             0x1000C,  // 1000C       ; UNKNOWN
 6282             0x1000D,  // 1000D..10026; LINEAR_B
 6283             0x10027,  // 10027       ; UNKNOWN
 6284             0x10028,  // 10028..1003A; LINEAR_B
 6285             0x1003B,  // 1003B       ; UNKNOWN
 6286             0x1003C,  // 1003C..1003D; LINEAR_B
 6287             0x1003E,  // 1003E       ; UNKNOWN
 6288             0x1003F,  // 1003F..1004D; LINEAR_B
 6289             0x1004E,  // 1004E..1004F; UNKNOWN
 6290             0x10050,  // 10050..1005D; LINEAR_B
 6291             0x1005E,  // 1005E..1007F; UNKNOWN
 6292             0x10080,  // 10080..100FA; LINEAR_B
 6293             0x100FB,  // 100FB..100FF; UNKNOWN
 6294             0x10100,  // 10100..10102; COMMON
 6295             0x10103,  // 10103..10106; UNKNOWN
 6296             0x10107,  // 10107..10133; COMMON
 6297             0x10134,  // 10134..10136; UNKNOWN
 6298             0x10137,  // 10137..1013F; COMMON
 6299             0x10140,  // 10140..1018E; GREEK
 6300             0x1018F,  // 1018F       ; UNKNOWN
 6301             0x10190,  // 10190..1019C; COMMON
 6302             0x1019D,  // 1019D..1019F; UNKNOWN
 6303             0x101A0,  // 101A0       ; GREEK
 6304             0x101A1,  // 101A1..101CF; UNKNOWN
 6305             0x101D0,  // 101D0..101FC; COMMON
 6306             0x101FD,  // 101FD       ; INHERITED
 6307             0x101FE,  // 101FE..1027F; UNKNOWN
 6308             0x10280,  // 10280..1029C; LYCIAN
 6309             0x1029D,  // 1029D..1029F; UNKNOWN
 6310             0x102A0,  // 102A0..102D0; CARIAN
 6311             0x102D1,  // 102D1..102DF; UNKNOWN
 6312             0x102E0,  // 102E0       ; INHERITED
 6313             0x102E1,  // 102E1..102FB; COMMON
 6314             0x102FC,  // 102FC..102FF; UNKNOWN
 6315             0x10300,  // 10300..10323; OLD_ITALIC
 6316             0x10324,  // 10324..1032C; UNKNOWN
 6317             0x1032D,  // 1032D..1032F; OLD_ITALIC
 6318             0x10330,  // 10330..1034A; GOTHIC
 6319             0x1034B,  // 1034B..1034F; UNKNOWN
 6320             0x10350,  // 10350..1037A; OLD_PERMIC
 6321             0x1037B,  // 1037B..1037F; UNKNOWN
 6322             0x10380,  // 10380..1039D; UGARITIC
 6323             0x1039E,  // 1039E       ; UNKNOWN
 6324             0x1039F,  // 1039F       ; UGARITIC
 6325             0x103A0,  // 103A0..103C3; OLD_PERSIAN
 6326             0x103C4,  // 103C4..103C7; UNKNOWN
 6327             0x103C8,  // 103C8..103D5; OLD_PERSIAN
 6328             0x103D6,  // 103D6..103FF; UNKNOWN
 6329             0x10400,  // 10400..1044F; DESERET
 6330             0x10450,  // 10450..1047F; SHAVIAN
 6331             0x10480,  // 10480..1049D; OSMANYA
 6332             0x1049E,  // 1049E..1049F; UNKNOWN
 6333             0x104A0,  // 104A0..104A9; OSMANYA
 6334             0x104AA,  // 104AA..104AF; UNKNOWN
 6335             0x104B0,  // 104B0..104D3; OSAGE
 6336             0x104D4,  // 104D4..104D7; UNKNOWN
 6337             0x104D8,  // 104D8..104FB; OSAGE
 6338             0x104FC,  // 104FC..104FF; UNKNOWN
 6339             0x10500,  // 10500..10527; ELBASAN
 6340             0x10528,  // 10528..1052F; UNKNOWN
 6341             0x10530,  // 10530..10563; CAUCASIAN_ALBANIAN
 6342             0x10564,  // 10564..1056E; UNKNOWN
 6343             0x1056F,  // 1056F       ; CAUCASIAN_ALBANIAN
 6344             0x10570,  // 10570..1057A; VITHKUQI
 6345             0x1057B,  // 1057B       ; UNKNOWN
 6346             0x1057C,  // 1057C..1058A; VITHKUQI
 6347             0x1058B,  // 1058B       ; UNKNOWN
 6348             0x1058C,  // 1058C..10592; VITHKUQI
 6349             0x10593,  // 10593       ; UNKNOWN
 6350             0x10594,  // 10594..10595; VITHKUQI
 6351             0x10596,  // 10596       ; UNKNOWN
 6352             0x10597,  // 10597..105A1; VITHKUQI
 6353             0x105A2,  // 105A2       ; UNKNOWN
 6354             0x105A3,  // 105A3..105B1; VITHKUQI
 6355             0x105B2,  // 105B2       ; UNKNOWN
 6356             0x105B3,  // 105B3..105B9; VITHKUQI
 6357             0x105BA,  // 105BA       ; UNKNOWN
 6358             0x105BB,  // 105BB..105BC; VITHKUQI
 6359             0x105BD,  // 105BD..105FF; UNKNOWN
 6360             0x10600,  // 10600..10736; LINEAR_A
 6361             0x10737,  // 10737..1073F; UNKNOWN
 6362             0x10740,  // 10740..10755; LINEAR_A
 6363             0x10756,  // 10756..1075F; UNKNOWN
 6364             0x10760,  // 10760..10767; LINEAR_A
 6365             0x10768,  // 10768..1077F; UNKNOWN
 6366             0x10780,  // 10780..10785; LATIN
 6367             0x10786,  // 10786       ; UNKNOWN
 6368             0x10787,  // 10787..107B0; LATIN
 6369             0x107B1,  // 107B1       ; UNKNOWN
 6370             0x107B2,  // 107B2..107BA; LATIN
 6371             0x107BB,  // 107BB..107FF; UNKNOWN
 6372             0x10800,  // 10800..10805; CYPRIOT
 6373             0x10806,  // 10806..10807; UNKNOWN
 6374             0x10808,  // 10808       ; CYPRIOT
 6375             0x10809,  // 10809       ; UNKNOWN
 6376             0x1080A,  // 1080A..10835; CYPRIOT
 6377             0x10836,  // 10836       ; UNKNOWN
 6378             0x10837,  // 10837..10838; CYPRIOT
 6379             0x10839,  // 10839..1083B; UNKNOWN
 6380             0x1083C,  // 1083C       ; CYPRIOT
 6381             0x1083D,  // 1083D..1083E; UNKNOWN
 6382             0x1083F,  // 1083F       ; CYPRIOT
 6383             0x10840,  // 10840..10855; IMPERIAL_ARAMAIC
 6384             0x10856,  // 10856       ; UNKNOWN
 6385             0x10857,  // 10857..1085F; IMPERIAL_ARAMAIC
 6386             0x10860,  // 10860..1087F; PALMYRENE
 6387             0x10880,  // 10880..1089E; NABATAEAN
 6388             0x1089F,  // 1089F..108A6; UNKNOWN
 6389             0x108A7,  // 108A7..108AF; NABATAEAN
 6390             0x108B0,  // 108B0..108DF; UNKNOWN
 6391             0x108E0,  // 108E0..108F2; HATRAN
 6392             0x108F3,  // 108F3       ; UNKNOWN
 6393             0x108F4,  // 108F4..108F5; HATRAN
 6394             0x108F6,  // 108F6..108FA; UNKNOWN
 6395             0x108FB,  // 108FB..108FF; HATRAN
 6396             0x10900,  // 10900..1091B; PHOENICIAN
 6397             0x1091C,  // 1091C..1091E; UNKNOWN
 6398             0x1091F,  // 1091F       ; PHOENICIAN
 6399             0x10920,  // 10920..10939; LYDIAN
 6400             0x1093A,  // 1093A..1093E; UNKNOWN
 6401             0x1093F,  // 1093F       ; LYDIAN
 6402             0x10940,  // 10940..1097F; UNKNOWN
 6403             0x10980,  // 10980..1099F; MEROITIC_HIEROGLYPHS
 6404             0x109A0,  // 109A0..109B7; MEROITIC_CURSIVE
 6405             0x109B8,  // 109B8..109BB; UNKNOWN
 6406             0x109BC,  // 109BC..109CF; MEROITIC_CURSIVE
 6407             0x109D0,  // 109D0..109D1; UNKNOWN
 6408             0x109D2,  // 109D2..109FF; MEROITIC_CURSIVE
 6409             0x10A00,  // 10A00..10A03; KHAROSHTHI
 6410             0x10A04,  // 10A04       ; UNKNOWN
 6411             0x10A05,  // 10A05..10A06; KHAROSHTHI
 6412             0x10A07,  // 10A07..10A0B; UNKNOWN
 6413             0x10A0C,  // 10A0C..10A13; KHAROSHTHI
 6414             0x10A14,  // 10A14       ; UNKNOWN
 6415             0x10A15,  // 10A15..10A17; KHAROSHTHI
 6416             0x10A18,  // 10A18       ; UNKNOWN
 6417             0x10A19,  // 10A19..10A35; KHAROSHTHI
 6418             0x10A36,  // 10A36..10A37; UNKNOWN
 6419             0x10A38,  // 10A38..10A3A; KHAROSHTHI
 6420             0x10A3B,  // 10A3B..10A3E; UNKNOWN
 6421             0x10A3F,  // 10A3F..10A48; KHAROSHTHI
 6422             0x10A49,  // 10A49..10A4F; UNKNOWN
 6423             0x10A50,  // 10A50..10A58; KHAROSHTHI
 6424             0x10A59,  // 10A59..10A5F; UNKNOWN
 6425             0x10A60,  // 10A60..10A7F; OLD_SOUTH_ARABIAN
 6426             0x10A80,  // 10A80..10A9F; OLD_NORTH_ARABIAN
 6427             0x10AA0,  // 10AA0..10ABF; UNKNOWN
 6428             0x10AC0,  // 10AC0..10AE6; MANICHAEAN
 6429             0x10AE7,  // 10AE7..10AEA; UNKNOWN
 6430             0x10AEB,  // 10AEB..10AF6; MANICHAEAN
 6431             0x10AF7,  // 10AF7..10AFF; UNKNOWN
 6432             0x10B00,  // 10B00..10B35; AVESTAN
 6433             0x10B36,  // 10B36..10B38; UNKNOWN
 6434             0x10B39,  // 10B39..10B3F; AVESTAN
 6435             0x10B40,  // 10B40..10B55; INSCRIPTIONAL_PARTHIAN
 6436             0x10B56,  // 10B56..10B57; UNKNOWN
 6437             0x10B58,  // 10B58..10B5F; INSCRIPTIONAL_PARTHIAN
 6438             0x10B60,  // 10B60..10B72; INSCRIPTIONAL_PAHLAVI
 6439             0x10B73,  // 10B73..10B77; UNKNOWN
 6440             0x10B78,  // 10B78..10B7F; INSCRIPTIONAL_PAHLAVI
 6441             0x10B80,  // 10B80..10B91; PSALTER_PAHLAVI
 6442             0x10B92,  // 10B92..10B98; UNKNOWN
 6443             0x10B99,  // 10B99..10B9C; PSALTER_PAHLAVI
 6444             0x10B9D,  // 10B9D..10BA8; UNKNOWN
 6445             0x10BA9,  // 10BA9..10BAF; PSALTER_PAHLAVI
 6446             0x10BB0,  // 10BB0..10BFF; UNKNOWN
 6447             0x10C00,  // 10C00..10C48; OLD_TURKIC
 6448             0x10C49,  // 10C49..10C7F; UNKNOWN
 6449             0x10C80,  // 10C80..10CB2; OLD_HUNGARIAN
 6450             0x10CB3,  // 10CB3..10CBF; UNKNOWN
 6451             0x10CC0,  // 10CC0..10CF2; OLD_HUNGARIAN
 6452             0x10CF3,  // 10CF3..10CF9; UNKNOWN
 6453             0x10CFA,  // 10CFA..10CFF; OLD_HUNGARIAN
 6454             0x10D00,  // 10D00..10D27; HANIFI_ROHINGYA
 6455             0x10D28,  // 10D28..10D2F; UNKNOWN
 6456             0x10D30,  // 10D30..10D39; HANIFI_ROHINGYA
 6457             0x10D3A,  // 10D3A..10E5F; UNKNOWN
 6458             0x10E60,  // 10E60..10E7E; ARABIC
 6459             0x10E7F,  // 10E7F       ; UNKNOWN
 6460             0x10E80,  // 10E80..10EA9; YEZIDI
 6461             0x10EAA,  // 10EAA       ; UNKNOWN
 6462             0x10EAB,  // 10EAB..10EAD; YEZIDI
 6463             0x10EAE,  // 10EAE..10EAF; UNKNOWN
 6464             0x10EB0,  // 10EB0..10EB1; YEZIDI
 6465             0x10EB2,  // 10EB2..10EFC; UNKNOWN
 6466             0x10EFD,  // 10EFD..10EFF; ARABIC
 6467             0x10F00,  // 10F00..10F27; OLD_SOGDIAN
 6468             0x10F28,  // 10F28..10F2F; UNKNOWN
 6469             0x10F30,  // 10F30..10F59; SOGDIAN
 6470             0x10F5A,  // 10F5A..10F6F; UNKNOWN
 6471             0x10F70,  // 10F70..10F89; OLD_UYGHUR
 6472             0x10F8A,  // 10F8A..10FAF; UNKNOWN
 6473             0x10FB0,  // 10FB0..10FCB; CHORASMIAN
 6474             0x10FCC,  // 10FCC..10FDF; UNKNOWN
 6475             0x10FE0,  // 10FE0..10FF6; ELYMAIC
 6476             0x10FF7,  // 10FF7..10FFF; UNKNOWN
 6477             0x11000,  // 11000..1104D; BRAHMI
 6478             0x1104E,  // 1104E..11051; UNKNOWN
 6479             0x11052,  // 11052..11075; BRAHMI
 6480             0x11076,  // 11076..1107E; UNKNOWN
 6481             0x1107F,  // 1107F       ; BRAHMI
 6482             0x11080,  // 11080..110C2; KAITHI
 6483             0x110C3,  // 110C3..110CC; UNKNOWN
 6484             0x110CD,  // 110CD       ; KAITHI
 6485             0x110CE,  // 110CE..110CF; UNKNOWN
 6486             0x110D0,  // 110D0..110E8; SORA_SOMPENG
 6487             0x110E9,  // 110E9..110EF; UNKNOWN
 6488             0x110F0,  // 110F0..110F9; SORA_SOMPENG
 6489             0x110FA,  // 110FA..110FF; UNKNOWN
 6490             0x11100,  // 11100..11134; CHAKMA
 6491             0x11135,  // 11135       ; UNKNOWN
 6492             0x11136,  // 11136..11147; CHAKMA
 6493             0x11148,  // 11148..1114F; UNKNOWN
 6494             0x11150,  // 11150..11176; MAHAJANI
 6495             0x11177,  // 11177..1117F; UNKNOWN
 6496             0x11180,  // 11180..111DF; SHARADA
 6497             0x111E0,  // 111E0       ; UNKNOWN
 6498             0x111E1,  // 111E1..111F4; SINHALA
 6499             0x111F5,  // 111F5..111FF; UNKNOWN
 6500             0x11200,  // 11200..11211; KHOJKI
 6501             0x11212,  // 11212       ; UNKNOWN
 6502             0x11213,  // 11213..11241; KHOJKI
 6503             0x11242,  // 11242..1127F; UNKNOWN
 6504             0x11280,  // 11280..11286; MULTANI
 6505             0x11287,  // 11287       ; UNKNOWN
 6506             0x11288,  // 11288       ; MULTANI
 6507             0x11289,  // 11289       ; UNKNOWN
 6508             0x1128A,  // 1128A..1128D; MULTANI
 6509             0x1128E,  // 1128E       ; UNKNOWN
 6510             0x1128F,  // 1128F..1129D; MULTANI
 6511             0x1129E,  // 1129E       ; UNKNOWN
 6512             0x1129F,  // 1129F..112A9; MULTANI
 6513             0x112AA,  // 112AA..112AF; UNKNOWN
 6514             0x112B0,  // 112B0..112EA; KHUDAWADI
 6515             0x112EB,  // 112EB..112EF; UNKNOWN
 6516             0x112F0,  // 112F0..112F9; KHUDAWADI
 6517             0x112FA,  // 112FA..112FF; UNKNOWN
 6518             0x11300,  // 11300..11303; GRANTHA
 6519             0x11304,  // 11304       ; UNKNOWN
 6520             0x11305,  // 11305..1130C; GRANTHA
 6521             0x1130D,  // 1130D..1130E; UNKNOWN
 6522             0x1130F,  // 1130F..11310; GRANTHA
 6523             0x11311,  // 11311..11312; UNKNOWN
 6524             0x11313,  // 11313..11328; GRANTHA
 6525             0x11329,  // 11329       ; UNKNOWN
 6526             0x1132A,  // 1132A..11330; GRANTHA
 6527             0x11331,  // 11331       ; UNKNOWN
 6528             0x11332,  // 11332..11333; GRANTHA
 6529             0x11334,  // 11334       ; UNKNOWN
 6530             0x11335,  // 11335..11339; GRANTHA
 6531             0x1133A,  // 1133A       ; UNKNOWN
 6532             0x1133B,  // 1133B       ; INHERITED
 6533             0x1133C,  // 1133C..11344; GRANTHA
 6534             0x11345,  // 11345..11346; UNKNOWN
 6535             0x11347,  // 11347..11348; GRANTHA
 6536             0x11349,  // 11349..1134A; UNKNOWN
 6537             0x1134B,  // 1134B..1134D; GRANTHA
 6538             0x1134E,  // 1134E..1134F; UNKNOWN
 6539             0x11350,  // 11350       ; GRANTHA
 6540             0x11351,  // 11351..11356; UNKNOWN
 6541             0x11357,  // 11357       ; GRANTHA
 6542             0x11358,  // 11358..1135C; UNKNOWN
 6543             0x1135D,  // 1135D..11363; GRANTHA
 6544             0x11364,  // 11364..11365; UNKNOWN
 6545             0x11366,  // 11366..1136C; GRANTHA
 6546             0x1136D,  // 1136D..1136F; UNKNOWN
 6547             0x11370,  // 11370..11374; GRANTHA
 6548             0x11375,  // 11375..113FF; UNKNOWN
 6549             0x11400,  // 11400..1145B; NEWA
 6550             0x1145C,  // 1145C       ; UNKNOWN
 6551             0x1145D,  // 1145D..11461; NEWA
 6552             0x11462,  // 11462..1147F; UNKNOWN
 6553             0x11480,  // 11480..114C7; TIRHUTA
 6554             0x114C8,  // 114C8..114CF; UNKNOWN
 6555             0x114D0,  // 114D0..114D9; TIRHUTA
 6556             0x114DA,  // 114DA..1157F; UNKNOWN
 6557             0x11580,  // 11580..115B5; SIDDHAM
 6558             0x115B6,  // 115B6..115B7; UNKNOWN
 6559             0x115B8,  // 115B8..115DD; SIDDHAM
 6560             0x115DE,  // 115DE..115FF; UNKNOWN
 6561             0x11600,  // 11600..11644; MODI
 6562             0x11645,  // 11645..1164F; UNKNOWN
 6563             0x11650,  // 11650..11659; MODI
 6564             0x1165A,  // 1165A..1165F; UNKNOWN
 6565             0x11660,  // 11660..1166C; MONGOLIAN
 6566             0x1166D,  // 1166D..1167F; UNKNOWN
 6567             0x11680,  // 11680..116B9; TAKRI
 6568             0x116BA,  // 116BA..116BF; UNKNOWN
 6569             0x116C0,  // 116C0..116C9; TAKRI
 6570             0x116CA,  // 116CA..116FF; UNKNOWN
 6571             0x11700,  // 11700..1171A; AHOM
 6572             0x1171B,  // 1171B..1171C; UNKNOWN
 6573             0x1171D,  // 1171D..1172B; AHOM
 6574             0x1172C,  // 1172C..1172F; UNKNOWN
 6575             0x11730,  // 11730..11746; AHOM
 6576             0x11747,  // 11747..117FF; UNKNOWN
 6577             0x11800,  // 11800..1183B; DOGRA
 6578             0x1183C,  // 1183C..1189F; UNKNOWN
 6579             0x118A0,  // 118A0..118F2; WARANG_CITI
 6580             0x118F3,  // 118F3..118FE; UNKNOWN
 6581             0x118FF,  // 118FF       ; WARANG_CITI
 6582             0x11900,  // 11900..11906; DIVES_AKURU
 6583             0x11907,  // 11907..11908; UNKNOWN
 6584             0x11909,  // 11909       ; DIVES_AKURU
 6585             0x1190A,  // 1190A..1190B; UNKNOWN
 6586             0x1190C,  // 1190C..11913; DIVES_AKURU
 6587             0x11914,  // 11914       ; UNKNOWN
 6588             0x11915,  // 11915..11916; DIVES_AKURU
 6589             0x11917,  // 11917       ; UNKNOWN
 6590             0x11918,  // 11918..11935; DIVES_AKURU
 6591             0x11936,  // 11936       ; UNKNOWN
 6592             0x11937,  // 11937..11938; DIVES_AKURU
 6593             0x11939,  // 11939..1193A; UNKNOWN
 6594             0x1193B,  // 1193B..11946; DIVES_AKURU
 6595             0x11947,  // 11947..1194F; UNKNOWN
 6596             0x11950,  // 11950..11959; DIVES_AKURU
 6597             0x1195A,  // 1195A..1199F; UNKNOWN
 6598             0x119A0,  // 119A0..119A7; NANDINAGARI
 6599             0x119A8,  // 119A8..119A9; UNKNOWN
 6600             0x119AA,  // 119AA..119D7; NANDINAGARI
 6601             0x119D8,  // 119D8..119D9; UNKNOWN
 6602             0x119DA,  // 119DA..119E4; NANDINAGARI
 6603             0x119E5,  // 119E5..119FF; UNKNOWN
 6604             0x11A00,  // 11A00..11A47; ZANABAZAR_SQUARE
 6605             0x11A48,  // 11A48..11A4F; UNKNOWN
 6606             0x11A50,  // 11A50..11AA2; SOYOMBO
 6607             0x11AA3,  // 11AA3..11AAF; UNKNOWN
 6608             0x11AB0,  // 11AB0..11ABF; CANADIAN_ABORIGINAL
 6609             0x11AC0,  // 11AC0..11AF8; PAU_CIN_HAU
 6610             0x11AF9,  // 11AF9..11AFF; UNKNOWN
 6611             0x11B00,  // 11B00..11B09; DEVANAGARI
 6612             0x11B0A,  // 11B0A..11BFF; UNKNOWN
 6613             0x11C00,  // 11C00..11C08; BHAIKSUKI
 6614             0x11C09,  // 11C09       ; UNKNOWN
 6615             0x11C0A,  // 11C0A..11C36; BHAIKSUKI
 6616             0x11C37,  // 11C37       ; UNKNOWN
 6617             0x11C38,  // 11C38..11C45; BHAIKSUKI
 6618             0x11C46,  // 11C46..11C4F; UNKNOWN
 6619             0x11C50,  // 11C50..11C6C; BHAIKSUKI
 6620             0x11C6D,  // 11C6D..11C6F; UNKNOWN
 6621             0x11C70,  // 11C70..11C8F; MARCHEN
 6622             0x11C90,  // 11C90..11C91; UNKNOWN
 6623             0x11C92,  // 11C92..11CA7; MARCHEN
 6624             0x11CA8,  // 11CA8       ; UNKNOWN
 6625             0x11CA9,  // 11CA9..11CB6; MARCHEN
 6626             0x11CB7,  // 11CB7..11CFF; UNKNOWN
 6627             0x11D00,  // 11D00..11D06; MASARAM_GONDI
 6628             0x11D07,  // 11D07       ; UNKNOWN
 6629             0x11D08,  // 11D08..11D09; MASARAM_GONDI
 6630             0x11D0A,  // 11D0A       ; UNKNOWN
 6631             0x11D0B,  // 11D0B..11D36; MASARAM_GONDI
 6632             0x11D37,  // 11D37..11D39; UNKNOWN
 6633             0x11D3A,  // 11D3A       ; MASARAM_GONDI
 6634             0x11D3B,  // 11D3B       ; UNKNOWN
 6635             0x11D3C,  // 11D3C..11D3D; MASARAM_GONDI
 6636             0x11D3E,  // 11D3E       ; UNKNOWN
 6637             0x11D3F,  // 11D3F..11D47; MASARAM_GONDI
 6638             0x11D48,  // 11D48..11D4F; UNKNOWN
 6639             0x11D50,  // 11D50..11D59; MASARAM_GONDI
 6640             0x11D5A,  // 11D5A..11D5F; UNKNOWN
 6641             0x11D60,  // 11D60..11D65; GUNJALA_GONDI
 6642             0x11D66,  // 11D66       ; UNKNOWN
 6643             0x11D67,  // 11D67..11D68; GUNJALA_GONDI
 6644             0x11D69,  // 11D69       ; UNKNOWN
 6645             0x11D6A,  // 11D6A..11D8E; GUNJALA_GONDI
 6646             0x11D8F,  // 11D8F       ; UNKNOWN
 6647             0x11D90,  // 11D90..11D91; GUNJALA_GONDI
 6648             0x11D92,  // 11D92       ; UNKNOWN
 6649             0x11D93,  // 11D93..11D98; GUNJALA_GONDI
 6650             0x11D99,  // 11D99..11D9F; UNKNOWN
 6651             0x11DA0,  // 11DA0..11DA9; GUNJALA_GONDI
 6652             0x11DAA,  // 11DAA..11EDF; UNKNOWN
 6653             0x11EE0,  // 11EE0..11EF8; MAKASAR
 6654             0x11EF9,  // 11EF9..11EFF; UNKNOWN
 6655             0x11F00,  // 11F00..11F10; KAWI
 6656             0x11F11,  // 11F11       ; UNKNOWN
 6657             0x11F12,  // 11F12..11F3A; KAWI
 6658             0x11F3B,  // 11F3B..11F3D; UNKNOWN
 6659             0x11F3E,  // 11F3E..11F59; KAWI
 6660             0x11F5A,  // 11F5A..11FAF; UNKNOWN
 6661             0x11FB0,  // 11FB0       ; LISU
 6662             0x11FB1,  // 11FB1..11FBF; UNKNOWN
 6663             0x11FC0,  // 11FC0..11FF1; TAMIL
 6664             0x11FF2,  // 11FF2..11FFE; UNKNOWN
 6665             0x11FFF,  // 11FFF       ; TAMIL
 6666             0x12000,  // 12000..12399; CUNEIFORM
 6667             0x1239A,  // 1239A..123FF; UNKNOWN
 6668             0x12400,  // 12400..1246E; CUNEIFORM
 6669             0x1246F,  // 1246F       ; UNKNOWN
 6670             0x12470,  // 12470..12474; CUNEIFORM
 6671             0x12475,  // 12475..1247F; UNKNOWN
 6672             0x12480,  // 12480..12543; CUNEIFORM
 6673             0x12544,  // 12544..12F8F; UNKNOWN
 6674             0x12F90,  // 12F90..12FF2; CYPRO_MINOAN
 6675             0x12FF3,  // 12FF3..12FFF; UNKNOWN
 6676             0x13000,  // 13000..13455; EGYPTIAN_HIEROGLYPHS
 6677             0x13456,  // 13456..143FF; UNKNOWN
 6678             0x14400,  // 14400..14646; ANATOLIAN_HIEROGLYPHS
 6679             0x14647,  // 14647..167FF; UNKNOWN
 6680             0x16800,  // 16800..16A38; BAMUM
 6681             0x16A39,  // 16A39..16A3F; UNKNOWN
 6682             0x16A40,  // 16A40..16A5E; MRO
 6683             0x16A5F,  // 16A5F       ; UNKNOWN
 6684             0x16A60,  // 16A60..16A69; MRO
 6685             0x16A6A,  // 16A6A..16A6D; UNKNOWN
 6686             0x16A6E,  // 16A6E..16A6F; MRO
 6687             0x16A70,  // 16A70..16ABE; TANGSA
 6688             0x16ABF,  // 16ABF       ; UNKNOWN
 6689             0x16AC0,  // 16AC0..16AC9; TANGSA
 6690             0x16ACA,  // 16ACA..16ACF; UNKNOWN
 6691             0x16AD0,  // 16AD0..16AED; BASSA_VAH
 6692             0x16AEE,  // 16AEE..16AEF; UNKNOWN
 6693             0x16AF0,  // 16AF0..16AF5; BASSA_VAH
 6694             0x16AF6,  // 16AF6..16AFF; UNKNOWN
 6695             0x16B00,  // 16B00..16B45; PAHAWH_HMONG
 6696             0x16B46,  // 16B46..16B4F; UNKNOWN
 6697             0x16B50,  // 16B50..16B59; PAHAWH_HMONG
 6698             0x16B5A,  // 16B5A       ; UNKNOWN
 6699             0x16B5B,  // 16B5B..16B61; PAHAWH_HMONG
 6700             0x16B62,  // 16B62       ; UNKNOWN
 6701             0x16B63,  // 16B63..16B77; PAHAWH_HMONG
 6702             0x16B78,  // 16B78..16B7C; UNKNOWN
 6703             0x16B7D,  // 16B7D..16B8F; PAHAWH_HMONG
 6704             0x16B90,  // 16B90..16E3F; UNKNOWN
 6705             0x16E40,  // 16E40..16E9A; MEDEFAIDRIN
 6706             0x16E9B,  // 16E9B..16EFF; UNKNOWN
 6707             0x16F00,  // 16F00..16F4A; MIAO
 6708             0x16F4B,  // 16F4B..16F4E; UNKNOWN
 6709             0x16F4F,  // 16F4F..16F87; MIAO
 6710             0x16F88,  // 16F88..16F8E; UNKNOWN
 6711             0x16F8F,  // 16F8F..16F9F; MIAO
 6712             0x16FA0,  // 16FA0..16FDF; UNKNOWN
 6713             0x16FE0,  // 16FE0       ; TANGUT
 6714             0x16FE1,  // 16FE1       ; NUSHU
 6715             0x16FE2,  // 16FE2..16FE3; HAN
 6716             0x16FE4,  // 16FE4       ; KHITAN_SMALL_SCRIPT
 6717             0x16FE5,  // 16FE5..16FEF; UNKNOWN
 6718             0x16FF0,  // 16FF0..16FF1; HAN
 6719             0x16FF2,  // 16FF2..16FFF; UNKNOWN
 6720             0x17000,  // 17000..187F7; TANGUT
 6721             0x187F8,  // 187F8..187FF; UNKNOWN
 6722             0x18800,  // 18800..18AFF; TANGUT
 6723             0x18B00,  // 18B00..18CD5; KHITAN_SMALL_SCRIPT
 6724             0x18CD6,  // 18CD6..18CFF; UNKNOWN
 6725             0x18D00,  // 18D00..18D08; TANGUT
 6726             0x18D09,  // 18D09..1AFEF; UNKNOWN
 6727             0x1AFF0,  // 1AFF0..1AFF3; KATAKANA
 6728             0x1AFF4,  // 1AFF4       ; UNKNOWN
 6729             0x1AFF5,  // 1AFF5..1AFFB; KATAKANA
 6730             0x1AFFC,  // 1AFFC       ; UNKNOWN
 6731             0x1AFFD,  // 1AFFD..1AFFE; KATAKANA
 6732             0x1AFFF,  // 1AFFF       ; UNKNOWN
 6733             0x1B000,  // 1B000       ; KATAKANA
 6734             0x1B001,  // 1B001..1B11F; HIRAGANA
 6735             0x1B120,  // 1B120..1B122; KATAKANA
 6736             0x1B123,  // 1B123..1B131; UNKNOWN
 6737             0x1B132,  // 1B132       ; HIRAGANA
 6738             0x1B133,  // 1B133..1B14F; UNKNOWN
 6739             0x1B150,  // 1B150..1B152; HIRAGANA
 6740             0x1B153,  // 1B153..1B154; UNKNOWN
 6741             0x1B155,  // 1B155       ; KATAKANA
 6742             0x1B156,  // 1B156..1B163; UNKNOWN
 6743             0x1B164,  // 1B164..1B167; KATAKANA
 6744             0x1B168,  // 1B168..1B16F; UNKNOWN
 6745             0x1B170,  // 1B170..1B2FB; NUSHU
 6746             0x1B2FC,  // 1B2FC..1BBFF; UNKNOWN
 6747             0x1BC00,  // 1BC00..1BC6A; DUPLOYAN
 6748             0x1BC6B,  // 1BC6B..1BC6F; UNKNOWN
 6749             0x1BC70,  // 1BC70..1BC7C; DUPLOYAN
 6750             0x1BC7D,  // 1BC7D..1BC7F; UNKNOWN
 6751             0x1BC80,  // 1BC80..1BC88; DUPLOYAN
 6752             0x1BC89,  // 1BC89..1BC8F; UNKNOWN
 6753             0x1BC90,  // 1BC90..1BC99; DUPLOYAN
 6754             0x1BC9A,  // 1BC9A..1BC9B; UNKNOWN
 6755             0x1BC9C,  // 1BC9C..1BC9F; DUPLOYAN
 6756             0x1BCA0,  // 1BCA0..1BCA3; COMMON
 6757             0x1BCA4,  // 1BCA4..1CEFF; UNKNOWN
 6758             0x1CF00,  // 1CF00..1CF2D; INHERITED
 6759             0x1CF2E,  // 1CF2E..1CF2F; UNKNOWN
 6760             0x1CF30,  // 1CF30..1CF46; INHERITED
 6761             0x1CF47,  // 1CF47..1CF4F; UNKNOWN
 6762             0x1CF50,  // 1CF50..1CFC3; COMMON
 6763             0x1CFC4,  // 1CFC4..1CFFF; UNKNOWN
 6764             0x1D000,  // 1D000..1D0F5; COMMON
 6765             0x1D0F6,  // 1D0F6..1D0FF; UNKNOWN
 6766             0x1D100,  // 1D100..1D126; COMMON
 6767             0x1D127,  // 1D127..1D128; UNKNOWN
 6768             0x1D129,  // 1D129..1D166; COMMON
 6769             0x1D167,  // 1D167..1D169; INHERITED
 6770             0x1D16A,  // 1D16A..1D17A; COMMON
 6771             0x1D17B,  // 1D17B..1D182; INHERITED
 6772             0x1D183,  // 1D183..1D184; COMMON
 6773             0x1D185,  // 1D185..1D18B; INHERITED
 6774             0x1D18C,  // 1D18C..1D1A9; COMMON
 6775             0x1D1AA,  // 1D1AA..1D1AD; INHERITED
 6776             0x1D1AE,  // 1D1AE..1D1EA; COMMON
 6777             0x1D1EB,  // 1D1EB..1D1FF; UNKNOWN
 6778             0x1D200,  // 1D200..1D245; GREEK
 6779             0x1D246,  // 1D246..1D2BF; UNKNOWN
 6780             0x1D2C0,  // 1D2C0..1D2D3; COMMON
 6781             0x1D2D4,  // 1D2D4..1D2DF; UNKNOWN
 6782             0x1D2E0,  // 1D2E0..1D2F3; COMMON
 6783             0x1D2F4,  // 1D2F4..1D2FF; UNKNOWN
 6784             0x1D300,  // 1D300..1D356; COMMON
 6785             0x1D357,  // 1D357..1D35F; UNKNOWN
 6786             0x1D360,  // 1D360..1D378; COMMON
 6787             0x1D379,  // 1D379..1D3FF; UNKNOWN
 6788             0x1D400,  // 1D400..1D454; COMMON
 6789             0x1D455,  // 1D455       ; UNKNOWN
 6790             0x1D456,  // 1D456..1D49C; COMMON
 6791             0x1D49D,  // 1D49D       ; UNKNOWN
 6792             0x1D49E,  // 1D49E..1D49F; COMMON
 6793             0x1D4A0,  // 1D4A0..1D4A1; UNKNOWN
 6794             0x1D4A2,  // 1D4A2       ; COMMON
 6795             0x1D4A3,  // 1D4A3..1D4A4; UNKNOWN
 6796             0x1D4A5,  // 1D4A5..1D4A6; COMMON
 6797             0x1D4A7,  // 1D4A7..1D4A8; UNKNOWN
 6798             0x1D4A9,  // 1D4A9..1D4AC; COMMON
 6799             0x1D4AD,  // 1D4AD       ; UNKNOWN
 6800             0x1D4AE,  // 1D4AE..1D4B9; COMMON
 6801             0x1D4BA,  // 1D4BA       ; UNKNOWN
 6802             0x1D4BB,  // 1D4BB       ; COMMON
 6803             0x1D4BC,  // 1D4BC       ; UNKNOWN
 6804             0x1D4BD,  // 1D4BD..1D4C3; COMMON
 6805             0x1D4C4,  // 1D4C4       ; UNKNOWN
 6806             0x1D4C5,  // 1D4C5..1D505; COMMON
 6807             0x1D506,  // 1D506       ; UNKNOWN
 6808             0x1D507,  // 1D507..1D50A; COMMON
 6809             0x1D50B,  // 1D50B..1D50C; UNKNOWN
 6810             0x1D50D,  // 1D50D..1D514; COMMON
 6811             0x1D515,  // 1D515       ; UNKNOWN
 6812             0x1D516,  // 1D516..1D51C; COMMON
 6813             0x1D51D,  // 1D51D       ; UNKNOWN
 6814             0x1D51E,  // 1D51E..1D539; COMMON
 6815             0x1D53A,  // 1D53A       ; UNKNOWN
 6816             0x1D53B,  // 1D53B..1D53E; COMMON
 6817             0x1D53F,  // 1D53F       ; UNKNOWN
 6818             0x1D540,  // 1D540..1D544; COMMON
 6819             0x1D545,  // 1D545       ; UNKNOWN
 6820             0x1D546,  // 1D546       ; COMMON
 6821             0x1D547,  // 1D547..1D549; UNKNOWN
 6822             0x1D54A,  // 1D54A..1D550; COMMON
 6823             0x1D551,  // 1D551       ; UNKNOWN
 6824             0x1D552,  // 1D552..1D6A5; COMMON
 6825             0x1D6A6,  // 1D6A6..1D6A7; UNKNOWN
 6826             0x1D6A8,  // 1D6A8..1D7CB; COMMON
 6827             0x1D7CC,  // 1D7CC..1D7CD; UNKNOWN
 6828             0x1D7CE,  // 1D7CE..1D7FF; COMMON
 6829             0x1D800,  // 1D800..1DA8B; SIGNWRITING
 6830             0x1DA8C,  // 1DA8C..1DA9A; UNKNOWN
 6831             0x1DA9B,  // 1DA9B..1DA9F; SIGNWRITING
 6832             0x1DAA0,  // 1DAA0       ; UNKNOWN
 6833             0x1DAA1,  // 1DAA1..1DAAF; SIGNWRITING
 6834             0x1DAB0,  // 1DAB0..1DEFF; UNKNOWN
 6835             0x1DF00,  // 1DF00..1DF1E; LATIN
 6836             0x1DF1F,  // 1DF1F..1DF24; UNKNOWN
 6837             0x1DF25,  // 1DF25..1DF2A; LATIN
 6838             0x1DF2B,  // 1DF2B..1DFFF; UNKNOWN
 6839             0x1E000,  // 1E000..1E006; GLAGOLITIC
 6840             0x1E007,  // 1E007       ; UNKNOWN
 6841             0x1E008,  // 1E008..1E018; GLAGOLITIC
 6842             0x1E019,  // 1E019..1E01A; UNKNOWN
 6843             0x1E01B,  // 1E01B..1E021; GLAGOLITIC
 6844             0x1E022,  // 1E022       ; UNKNOWN
 6845             0x1E023,  // 1E023..1E024; GLAGOLITIC
 6846             0x1E025,  // 1E025       ; UNKNOWN
 6847             0x1E026,  // 1E026..1E02A; GLAGOLITIC
 6848             0x1E02B,  // 1E02B..1E02F; UNKNOWN
 6849             0x1E030,  // 1E030..1E06D; CYRILLIC
 6850             0x1E06E,  // 1E06E..1E08E; UNKNOWN
 6851             0x1E08F,  // 1E08F       ; CYRILLIC
 6852             0x1E090,  // 1E090..1E0FF; UNKNOWN
 6853             0x1E100,  // 1E100..1E12C; NYIAKENG_PUACHUE_HMONG
 6854             0x1E12D,  // 1E12D..1E12F; UNKNOWN
 6855             0x1E130,  // 1E130..1E13D; NYIAKENG_PUACHUE_HMONG
 6856             0x1E13E,  // 1E13E..1E13F; UNKNOWN
 6857             0x1E140,  // 1E140..1E149; NYIAKENG_PUACHUE_HMONG
 6858             0x1E14A,  // 1E14A..1E14D; UNKNOWN
 6859             0x1E14E,  // 1E14E..1E14F; NYIAKENG_PUACHUE_HMONG
 6860             0x1E150,  // 1E150..1E28F; UNKNOWN
 6861             0x1E290,  // 1E290..1E2AE; TOTO
 6862             0x1E2AF,  // 1E2AF..1E2BF; UNKNOWN
 6863             0x1E2C0,  // 1E2C0..1E2F9; WANCHO
 6864             0x1E2FA,  // 1E2FA..1E2FE; UNKNOWN
 6865             0x1E2FF,  // 1E2FF       ; WANCHO
 6866             0x1E300,  // 1E300..1E4CF; UNKNOWN
 6867             0x1E4D0,  // 1E4D0..1E4F9; NAG_MUNDARI
 6868             0x1E4FA,  // 1E4FA..1E7DF; UNKNOWN
 6869             0x1E7E0,  // 1E7E0..1E7E6; ETHIOPIC
 6870             0x1E7E7,  // 1E7E7       ; UNKNOWN
 6871             0x1E7E8,  // 1E7E8..1E7EB; ETHIOPIC
 6872             0x1E7EC,  // 1E7EC       ; UNKNOWN
 6873             0x1E7ED,  // 1E7ED..1E7EE; ETHIOPIC
 6874             0x1E7EF,  // 1E7EF       ; UNKNOWN
 6875             0x1E7F0,  // 1E7F0..1E7FE; ETHIOPIC
 6876             0x1E7FF,  // 1E7FF       ; UNKNOWN
 6877             0x1E800,  // 1E800..1E8C4; MENDE_KIKAKUI
 6878             0x1E8C5,  // 1E8C5..1E8C6; UNKNOWN
 6879             0x1E8C7,  // 1E8C7..1E8D6; MENDE_KIKAKUI
 6880             0x1E8D7,  // 1E8D7..1E8FF; UNKNOWN
 6881             0x1E900,  // 1E900..1E94B; ADLAM
 6882             0x1E94C,  // 1E94C..1E94F; UNKNOWN
 6883             0x1E950,  // 1E950..1E959; ADLAM
 6884             0x1E95A,  // 1E95A..1E95D; UNKNOWN
 6885             0x1E95E,  // 1E95E..1E95F; ADLAM
 6886             0x1E960,  // 1E960..1EC70; UNKNOWN
 6887             0x1EC71,  // 1EC71..1ECB4; COMMON
 6888             0x1ECB5,  // 1ECB5..1ED00; UNKNOWN
 6889             0x1ED01,  // 1ED01..1ED3D; COMMON
 6890             0x1ED3E,  // 1ED3E..1EDFF; UNKNOWN
 6891             0x1EE00,  // 1EE00..1EE03; ARABIC
 6892             0x1EE04,  // 1EE04       ; UNKNOWN
 6893             0x1EE05,  // 1EE05..1EE1F; ARABIC
 6894             0x1EE20,  // 1EE20       ; UNKNOWN
 6895             0x1EE21,  // 1EE21..1EE22; ARABIC
 6896             0x1EE23,  // 1EE23       ; UNKNOWN
 6897             0x1EE24,  // 1EE24       ; ARABIC
 6898             0x1EE25,  // 1EE25..1EE26; UNKNOWN
 6899             0x1EE27,  // 1EE27       ; ARABIC
 6900             0x1EE28,  // 1EE28       ; UNKNOWN
 6901             0x1EE29,  // 1EE29..1EE32; ARABIC
 6902             0x1EE33,  // 1EE33       ; UNKNOWN
 6903             0x1EE34,  // 1EE34..1EE37; ARABIC
 6904             0x1EE38,  // 1EE38       ; UNKNOWN
 6905             0x1EE39,  // 1EE39       ; ARABIC
 6906             0x1EE3A,  // 1EE3A       ; UNKNOWN
 6907             0x1EE3B,  // 1EE3B       ; ARABIC
 6908             0x1EE3C,  // 1EE3C..1EE41; UNKNOWN
 6909             0x1EE42,  // 1EE42       ; ARABIC
 6910             0x1EE43,  // 1EE43..1EE46; UNKNOWN
 6911             0x1EE47,  // 1EE47       ; ARABIC
 6912             0x1EE48,  // 1EE48       ; UNKNOWN
 6913             0x1EE49,  // 1EE49       ; ARABIC
 6914             0x1EE4A,  // 1EE4A       ; UNKNOWN
 6915             0x1EE4B,  // 1EE4B       ; ARABIC
 6916             0x1EE4C,  // 1EE4C       ; UNKNOWN
 6917             0x1EE4D,  // 1EE4D..1EE4F; ARABIC
 6918             0x1EE50,  // 1EE50       ; UNKNOWN
 6919             0x1EE51,  // 1EE51..1EE52; ARABIC
 6920             0x1EE53,  // 1EE53       ; UNKNOWN
 6921             0x1EE54,  // 1EE54       ; ARABIC
 6922             0x1EE55,  // 1EE55..1EE56; UNKNOWN
 6923             0x1EE57,  // 1EE57       ; ARABIC
 6924             0x1EE58,  // 1EE58       ; UNKNOWN
 6925             0x1EE59,  // 1EE59       ; ARABIC
 6926             0x1EE5A,  // 1EE5A       ; UNKNOWN
 6927             0x1EE5B,  // 1EE5B       ; ARABIC
 6928             0x1EE5C,  // 1EE5C       ; UNKNOWN
 6929             0x1EE5D,  // 1EE5D       ; ARABIC
 6930             0x1EE5E,  // 1EE5E       ; UNKNOWN
 6931             0x1EE5F,  // 1EE5F       ; ARABIC
 6932             0x1EE60,  // 1EE60       ; UNKNOWN
 6933             0x1EE61,  // 1EE61..1EE62; ARABIC
 6934             0x1EE63,  // 1EE63       ; UNKNOWN
 6935             0x1EE64,  // 1EE64       ; ARABIC
 6936             0x1EE65,  // 1EE65..1EE66; UNKNOWN
 6937             0x1EE67,  // 1EE67..1EE6A; ARABIC
 6938             0x1EE6B,  // 1EE6B       ; UNKNOWN
 6939             0x1EE6C,  // 1EE6C..1EE72; ARABIC
 6940             0x1EE73,  // 1EE73       ; UNKNOWN
 6941             0x1EE74,  // 1EE74..1EE77; ARABIC
 6942             0x1EE78,  // 1EE78       ; UNKNOWN
 6943             0x1EE79,  // 1EE79..1EE7C; ARABIC
 6944             0x1EE7D,  // 1EE7D       ; UNKNOWN
 6945             0x1EE7E,  // 1EE7E       ; ARABIC
 6946             0x1EE7F,  // 1EE7F       ; UNKNOWN
 6947             0x1EE80,  // 1EE80..1EE89; ARABIC
 6948             0x1EE8A,  // 1EE8A       ; UNKNOWN
 6949             0x1EE8B,  // 1EE8B..1EE9B; ARABIC
 6950             0x1EE9C,  // 1EE9C..1EEA0; UNKNOWN
 6951             0x1EEA1,  // 1EEA1..1EEA3; ARABIC
 6952             0x1EEA4,  // 1EEA4       ; UNKNOWN
 6953             0x1EEA5,  // 1EEA5..1EEA9; ARABIC
 6954             0x1EEAA,  // 1EEAA       ; UNKNOWN
 6955             0x1EEAB,  // 1EEAB..1EEBB; ARABIC
 6956             0x1EEBC,  // 1EEBC..1EEEF; UNKNOWN
 6957             0x1EEF0,  // 1EEF0..1EEF1; ARABIC
 6958             0x1EEF2,  // 1EEF2..1EFFF; UNKNOWN
 6959             0x1F000,  // 1F000..1F02B; COMMON
 6960             0x1F02C,  // 1F02C..1F02F; UNKNOWN
 6961             0x1F030,  // 1F030..1F093; COMMON
 6962             0x1F094,  // 1F094..1F09F; UNKNOWN
 6963             0x1F0A0,  // 1F0A0..1F0AE; COMMON
 6964             0x1F0AF,  // 1F0AF..1F0B0; UNKNOWN
 6965             0x1F0B1,  // 1F0B1..1F0BF; COMMON
 6966             0x1F0C0,  // 1F0C0       ; UNKNOWN
 6967             0x1F0C1,  // 1F0C1..1F0CF; COMMON
 6968             0x1F0D0,  // 1F0D0       ; UNKNOWN
 6969             0x1F0D1,  // 1F0D1..1F0F5; COMMON
 6970             0x1F0F6,  // 1F0F6..1F0FF; UNKNOWN
 6971             0x1F100,  // 1F100..1F1AD; COMMON
 6972             0x1F1AE,  // 1F1AE..1F1E5; UNKNOWN
 6973             0x1F1E6,  // 1F1E6..1F1FF; COMMON
 6974             0x1F200,  // 1F200       ; HIRAGANA
 6975             0x1F201,  // 1F201..1F202; COMMON
 6976             0x1F203,  // 1F203..1F20F; UNKNOWN
 6977             0x1F210,  // 1F210..1F23B; COMMON
 6978             0x1F23C,  // 1F23C..1F23F; UNKNOWN
 6979             0x1F240,  // 1F240..1F248; COMMON
 6980             0x1F249,  // 1F249..1F24F; UNKNOWN
 6981             0x1F250,  // 1F250..1F251; COMMON
 6982             0x1F252,  // 1F252..1F25F; UNKNOWN
 6983             0x1F260,  // 1F260..1F265; COMMON
 6984             0x1F266,  // 1F266..1F2FF; UNKNOWN
 6985             0x1F300,  // 1F300..1F6D7; COMMON
 6986             0x1F6D8,  // 1F6D8..1F6DB; UNKNOWN
 6987             0x1F6DC,  // 1F6DC..1F6EC; COMMON
 6988             0x1F6ED,  // 1F6ED..1F6EF; UNKNOWN
 6989             0x1F6F0,  // 1F6F0..1F6FC; COMMON
 6990             0x1F6FD,  // 1F6FD..1F6FF; UNKNOWN
 6991             0x1F700,  // 1F700..1F776; COMMON
 6992             0x1F777,  // 1F777..1F77A; UNKNOWN
 6993             0x1F77B,  // 1F77B..1F7D9; COMMON
 6994             0x1F7DA,  // 1F7DA..1F7DF; UNKNOWN
 6995             0x1F7E0,  // 1F7E0..1F7EB; COMMON
 6996             0x1F7EC,  // 1F7EC..1F7EF; UNKNOWN
 6997             0x1F7F0,  // 1F7F0       ; COMMON
 6998             0x1F7F1,  // 1F7F1..1F7FF; UNKNOWN
 6999             0x1F800,  // 1F800..1F80B; COMMON
 7000             0x1F80C,  // 1F80C..1F80F; UNKNOWN
 7001             0x1F810,  // 1F810..1F847; COMMON
 7002             0x1F848,  // 1F848..1F84F; UNKNOWN
 7003             0x1F850,  // 1F850..1F859; COMMON
 7004             0x1F85A,  // 1F85A..1F85F; UNKNOWN
 7005             0x1F860,  // 1F860..1F887; COMMON
 7006             0x1F888,  // 1F888..1F88F; UNKNOWN
 7007             0x1F890,  // 1F890..1F8AD; COMMON
 7008             0x1F8AE,  // 1F8AE..1F8AF; UNKNOWN
 7009             0x1F8B0,  // 1F8B0..1F8B1; COMMON
 7010             0x1F8B2,  // 1F8B2..1F8FF; UNKNOWN
 7011             0x1F900,  // 1F900..1FA53; COMMON
 7012             0x1FA54,  // 1FA54..1FA5F; UNKNOWN
 7013             0x1FA60,  // 1FA60..1FA6D; COMMON
 7014             0x1FA6E,  // 1FA6E..1FA6F; UNKNOWN
 7015             0x1FA70,  // 1FA70..1FA7C; COMMON
 7016             0x1FA7D,  // 1FA7D..1FA7F; UNKNOWN
 7017             0x1FA80,  // 1FA80..1FA88; COMMON
 7018             0x1FA89,  // 1FA89..1FA8F; UNKNOWN
 7019             0x1FA90,  // 1FA90..1FABD; COMMON
 7020             0x1FABE,  // 1FABE       ; UNKNOWN
 7021             0x1FABF,  // 1FABF..1FAC5; COMMON
 7022             0x1FAC6,  // 1FAC6..1FACD; UNKNOWN
 7023             0x1FACE,  // 1FACE..1FADB; COMMON
 7024             0x1FADC,  // 1FADC..1FADF; UNKNOWN
 7025             0x1FAE0,  // 1FAE0..1FAE8; COMMON
 7026             0x1FAE9,  // 1FAE9..1FAEF; UNKNOWN
 7027             0x1FAF0,  // 1FAF0..1FAF8; COMMON
 7028             0x1FAF9,  // 1FAF9..1FAFF; UNKNOWN
 7029             0x1FB00,  // 1FB00..1FB92; COMMON
 7030             0x1FB93,  // 1FB93       ; UNKNOWN
 7031             0x1FB94,  // 1FB94..1FBCA; COMMON
 7032             0x1FBCB,  // 1FBCB..1FBEF; UNKNOWN
 7033             0x1FBF0,  // 1FBF0..1FBF9; COMMON
 7034             0x1FBFA,  // 1FBFA..1FFFF; UNKNOWN
 7035             0x20000,  // 20000..2A6DF; HAN
 7036             0x2A6E0,  // 2A6E0..2A6FF; UNKNOWN
 7037             0x2A700,  // 2A700..2B739; HAN
 7038             0x2B73A,  // 2B73A..2B73F; UNKNOWN
 7039             0x2B740,  // 2B740..2B81D; HAN
 7040             0x2B81E,  // 2B81E..2B81F; UNKNOWN
 7041             0x2B820,  // 2B820..2CEA1; HAN
 7042             0x2CEA2,  // 2CEA2..2CEAF; UNKNOWN
 7043             0x2CEB0,  // 2CEB0..2EBE0; HAN
 7044             0x2EBE1,  // 2EBE1..2EBEF; UNKNOWN
 7045             0x2EBF0,  // 2EBF0..2EE5D; HAN
 7046             0x2EE5E,  // 2EE5E..2F7FF; UNKNOWN
 7047             0x2F800,  // 2F800..2FA1D; HAN
 7048             0x2FA1E,  // 2FA1E..2FFFF; UNKNOWN
 7049             0x30000,  // 30000..3134A; HAN
 7050             0x3134B,  // 3134B..3134F; UNKNOWN
 7051             0x31350,  // 31350..323AF; HAN
 7052             0x323B0,  // 323B0..E0000; UNKNOWN
 7053             0xE0001,  // E0001       ; COMMON
 7054             0xE0002,  // E0002..E001F; UNKNOWN
 7055             0xE0020,  // E0020..E007F; COMMON
 7056             0xE0080,  // E0080..E00FF; UNKNOWN
 7057             0xE0100,  // E0100..E01EF; INHERITED
 7058             0xE01F0,  // E01F0..10FFFF; UNKNOWN
 7059         };
 7060 
 7061         private static final UnicodeScript[] scripts = {
 7062             COMMON,                   // 0000..0040
 7063             LATIN,                    // 0041..005A
 7064             COMMON,                   // 005B..0060
 7065             LATIN,                    // 0061..007A
 7066             COMMON,                   // 007B..00A9
 7067             LATIN,                    // 00AA
 7068             COMMON,                   // 00AB..00B9
 7069             LATIN,                    // 00BA
 7070             COMMON,                   // 00BB..00BF
 7071             LATIN,                    // 00C0..00D6
 7072             COMMON,                   // 00D7
 7073             LATIN,                    // 00D8..00F6
 7074             COMMON,                   // 00F7
 7075             LATIN,                    // 00F8..02B8
 7076             COMMON,                   // 02B9..02DF
 7077             LATIN,                    // 02E0..02E4
 7078             COMMON,                   // 02E5..02E9
 7079             BOPOMOFO,                 // 02EA..02EB
 7080             COMMON,                   // 02EC..02FF
 7081             INHERITED,                // 0300..036F
 7082             GREEK,                    // 0370..0373
 7083             COMMON,                   // 0374
 7084             GREEK,                    // 0375..0377
 7085             UNKNOWN,                  // 0378..0379
 7086             GREEK,                    // 037A..037D
 7087             COMMON,                   // 037E
 7088             GREEK,                    // 037F
 7089             UNKNOWN,                  // 0380..0383
 7090             GREEK,                    // 0384
 7091             COMMON,                   // 0385
 7092             GREEK,                    // 0386
 7093             COMMON,                   // 0387
 7094             GREEK,                    // 0388..038A
 7095             UNKNOWN,                  // 038B
 7096             GREEK,                    // 038C
 7097             UNKNOWN,                  // 038D
 7098             GREEK,                    // 038E..03A1
 7099             UNKNOWN,                  // 03A2
 7100             GREEK,                    // 03A3..03E1
 7101             COPTIC,                   // 03E2..03EF
 7102             GREEK,                    // 03F0..03FF
 7103             CYRILLIC,                 // 0400..0484
 7104             INHERITED,                // 0485..0486
 7105             CYRILLIC,                 // 0487..052F
 7106             UNKNOWN,                  // 0530
 7107             ARMENIAN,                 // 0531..0556
 7108             UNKNOWN,                  // 0557..0558
 7109             ARMENIAN,                 // 0559..058A
 7110             UNKNOWN,                  // 058B..058C
 7111             ARMENIAN,                 // 058D..058F
 7112             UNKNOWN,                  // 0590
 7113             HEBREW,                   // 0591..05C7
 7114             UNKNOWN,                  // 05C8..05CF
 7115             HEBREW,                   // 05D0..05EA
 7116             UNKNOWN,                  // 05EB..05EE
 7117             HEBREW,                   // 05EF..05F4
 7118             UNKNOWN,                  // 05F5..05FF
 7119             ARABIC,                   // 0600..0604
 7120             COMMON,                   // 0605
 7121             ARABIC,                   // 0606..060B
 7122             COMMON,                   // 060C
 7123             ARABIC,                   // 060D..061A
 7124             COMMON,                   // 061B
 7125             ARABIC,                   // 061C..061E
 7126             COMMON,                   // 061F
 7127             ARABIC,                   // 0620..063F
 7128             COMMON,                   // 0640
 7129             ARABIC,                   // 0641..064A
 7130             INHERITED,                // 064B..0655
 7131             ARABIC,                   // 0656..066F
 7132             INHERITED,                // 0670
 7133             ARABIC,                   // 0671..06DC
 7134             COMMON,                   // 06DD
 7135             ARABIC,                   // 06DE..06FF
 7136             SYRIAC,                   // 0700..070D
 7137             UNKNOWN,                  // 070E
 7138             SYRIAC,                   // 070F..074A
 7139             UNKNOWN,                  // 074B..074C
 7140             SYRIAC,                   // 074D..074F
 7141             ARABIC,                   // 0750..077F
 7142             THAANA,                   // 0780..07B1
 7143             UNKNOWN,                  // 07B2..07BF
 7144             NKO,                      // 07C0..07FA
 7145             UNKNOWN,                  // 07FB..07FC
 7146             NKO,                      // 07FD..07FF
 7147             SAMARITAN,                // 0800..082D
 7148             UNKNOWN,                  // 082E..082F
 7149             SAMARITAN,                // 0830..083E
 7150             UNKNOWN,                  // 083F
 7151             MANDAIC,                  // 0840..085B
 7152             UNKNOWN,                  // 085C..085D
 7153             MANDAIC,                  // 085E
 7154             UNKNOWN,                  // 085F
 7155             SYRIAC,                   // 0860..086A
 7156             UNKNOWN,                  // 086B..086F
 7157             ARABIC,                   // 0870..088E
 7158             UNKNOWN,                  // 088F
 7159             ARABIC,                   // 0890..0891
 7160             UNKNOWN,                  // 0892..0897
 7161             ARABIC,                   // 0898..08E1
 7162             COMMON,                   // 08E2
 7163             ARABIC,                   // 08E3..08FF
 7164             DEVANAGARI,               // 0900..0950
 7165             INHERITED,                // 0951..0954
 7166             DEVANAGARI,               // 0955..0963
 7167             COMMON,                   // 0964..0965
 7168             DEVANAGARI,               // 0966..097F
 7169             BENGALI,                  // 0980..0983
 7170             UNKNOWN,                  // 0984
 7171             BENGALI,                  // 0985..098C
 7172             UNKNOWN,                  // 098D..098E
 7173             BENGALI,                  // 098F..0990
 7174             UNKNOWN,                  // 0991..0992
 7175             BENGALI,                  // 0993..09A8
 7176             UNKNOWN,                  // 09A9
 7177             BENGALI,                  // 09AA..09B0
 7178             UNKNOWN,                  // 09B1
 7179             BENGALI,                  // 09B2
 7180             UNKNOWN,                  // 09B3..09B5
 7181             BENGALI,                  // 09B6..09B9
 7182             UNKNOWN,                  // 09BA..09BB
 7183             BENGALI,                  // 09BC..09C4
 7184             UNKNOWN,                  // 09C5..09C6
 7185             BENGALI,                  // 09C7..09C8
 7186             UNKNOWN,                  // 09C9..09CA
 7187             BENGALI,                  // 09CB..09CE
 7188             UNKNOWN,                  // 09CF..09D6
 7189             BENGALI,                  // 09D7
 7190             UNKNOWN,                  // 09D8..09DB
 7191             BENGALI,                  // 09DC..09DD
 7192             UNKNOWN,                  // 09DE
 7193             BENGALI,                  // 09DF..09E3
 7194             UNKNOWN,                  // 09E4..09E5
 7195             BENGALI,                  // 09E6..09FE
 7196             UNKNOWN,                  // 09FF..0A00
 7197             GURMUKHI,                 // 0A01..0A03
 7198             UNKNOWN,                  // 0A04
 7199             GURMUKHI,                 // 0A05..0A0A
 7200             UNKNOWN,                  // 0A0B..0A0E
 7201             GURMUKHI,                 // 0A0F..0A10
 7202             UNKNOWN,                  // 0A11..0A12
 7203             GURMUKHI,                 // 0A13..0A28
 7204             UNKNOWN,                  // 0A29
 7205             GURMUKHI,                 // 0A2A..0A30
 7206             UNKNOWN,                  // 0A31
 7207             GURMUKHI,                 // 0A32..0A33
 7208             UNKNOWN,                  // 0A34
 7209             GURMUKHI,                 // 0A35..0A36
 7210             UNKNOWN,                  // 0A37
 7211             GURMUKHI,                 // 0A38..0A39
 7212             UNKNOWN,                  // 0A3A..0A3B
 7213             GURMUKHI,                 // 0A3C
 7214             UNKNOWN,                  // 0A3D
 7215             GURMUKHI,                 // 0A3E..0A42
 7216             UNKNOWN,                  // 0A43..0A46
 7217             GURMUKHI,                 // 0A47..0A48
 7218             UNKNOWN,                  // 0A49..0A4A
 7219             GURMUKHI,                 // 0A4B..0A4D
 7220             UNKNOWN,                  // 0A4E..0A50
 7221             GURMUKHI,                 // 0A51
 7222             UNKNOWN,                  // 0A52..0A58
 7223             GURMUKHI,                 // 0A59..0A5C
 7224             UNKNOWN,                  // 0A5D
 7225             GURMUKHI,                 // 0A5E
 7226             UNKNOWN,                  // 0A5F..0A65
 7227             GURMUKHI,                 // 0A66..0A76
 7228             UNKNOWN,                  // 0A77..0A80
 7229             GUJARATI,                 // 0A81..0A83
 7230             UNKNOWN,                  // 0A84
 7231             GUJARATI,                 // 0A85..0A8D
 7232             UNKNOWN,                  // 0A8E
 7233             GUJARATI,                 // 0A8F..0A91
 7234             UNKNOWN,                  // 0A92
 7235             GUJARATI,                 // 0A93..0AA8
 7236             UNKNOWN,                  // 0AA9
 7237             GUJARATI,                 // 0AAA..0AB0
 7238             UNKNOWN,                  // 0AB1
 7239             GUJARATI,                 // 0AB2..0AB3
 7240             UNKNOWN,                  // 0AB4
 7241             GUJARATI,                 // 0AB5..0AB9
 7242             UNKNOWN,                  // 0ABA..0ABB
 7243             GUJARATI,                 // 0ABC..0AC5
 7244             UNKNOWN,                  // 0AC6
 7245             GUJARATI,                 // 0AC7..0AC9
 7246             UNKNOWN,                  // 0ACA
 7247             GUJARATI,                 // 0ACB..0ACD
 7248             UNKNOWN,                  // 0ACE..0ACF
 7249             GUJARATI,                 // 0AD0
 7250             UNKNOWN,                  // 0AD1..0ADF
 7251             GUJARATI,                 // 0AE0..0AE3
 7252             UNKNOWN,                  // 0AE4..0AE5
 7253             GUJARATI,                 // 0AE6..0AF1
 7254             UNKNOWN,                  // 0AF2..0AF8
 7255             GUJARATI,                 // 0AF9..0AFF
 7256             UNKNOWN,                  // 0B00
 7257             ORIYA,                    // 0B01..0B03
 7258             UNKNOWN,                  // 0B04
 7259             ORIYA,                    // 0B05..0B0C
 7260             UNKNOWN,                  // 0B0D..0B0E
 7261             ORIYA,                    // 0B0F..0B10
 7262             UNKNOWN,                  // 0B11..0B12
 7263             ORIYA,                    // 0B13..0B28
 7264             UNKNOWN,                  // 0B29
 7265             ORIYA,                    // 0B2A..0B30
 7266             UNKNOWN,                  // 0B31
 7267             ORIYA,                    // 0B32..0B33
 7268             UNKNOWN,                  // 0B34
 7269             ORIYA,                    // 0B35..0B39
 7270             UNKNOWN,                  // 0B3A..0B3B
 7271             ORIYA,                    // 0B3C..0B44
 7272             UNKNOWN,                  // 0B45..0B46
 7273             ORIYA,                    // 0B47..0B48
 7274             UNKNOWN,                  // 0B49..0B4A
 7275             ORIYA,                    // 0B4B..0B4D
 7276             UNKNOWN,                  // 0B4E..0B54
 7277             ORIYA,                    // 0B55..0B57
 7278             UNKNOWN,                  // 0B58..0B5B
 7279             ORIYA,                    // 0B5C..0B5D
 7280             UNKNOWN,                  // 0B5E
 7281             ORIYA,                    // 0B5F..0B63
 7282             UNKNOWN,                  // 0B64..0B65
 7283             ORIYA,                    // 0B66..0B77
 7284             UNKNOWN,                  // 0B78..0B81
 7285             TAMIL,                    // 0B82..0B83
 7286             UNKNOWN,                  // 0B84
 7287             TAMIL,                    // 0B85..0B8A
 7288             UNKNOWN,                  // 0B8B..0B8D
 7289             TAMIL,                    // 0B8E..0B90
 7290             UNKNOWN,                  // 0B91
 7291             TAMIL,                    // 0B92..0B95
 7292             UNKNOWN,                  // 0B96..0B98
 7293             TAMIL,                    // 0B99..0B9A
 7294             UNKNOWN,                  // 0B9B
 7295             TAMIL,                    // 0B9C
 7296             UNKNOWN,                  // 0B9D
 7297             TAMIL,                    // 0B9E..0B9F
 7298             UNKNOWN,                  // 0BA0..0BA2
 7299             TAMIL,                    // 0BA3..0BA4
 7300             UNKNOWN,                  // 0BA5..0BA7
 7301             TAMIL,                    // 0BA8..0BAA
 7302             UNKNOWN,                  // 0BAB..0BAD
 7303             TAMIL,                    // 0BAE..0BB9
 7304             UNKNOWN,                  // 0BBA..0BBD
 7305             TAMIL,                    // 0BBE..0BC2
 7306             UNKNOWN,                  // 0BC3..0BC5
 7307             TAMIL,                    // 0BC6..0BC8
 7308             UNKNOWN,                  // 0BC9
 7309             TAMIL,                    // 0BCA..0BCD
 7310             UNKNOWN,                  // 0BCE..0BCF
 7311             TAMIL,                    // 0BD0
 7312             UNKNOWN,                  // 0BD1..0BD6
 7313             TAMIL,                    // 0BD7
 7314             UNKNOWN,                  // 0BD8..0BE5
 7315             TAMIL,                    // 0BE6..0BFA
 7316             UNKNOWN,                  // 0BFB..0BFF
 7317             TELUGU,                   // 0C00..0C0C
 7318             UNKNOWN,                  // 0C0D
 7319             TELUGU,                   // 0C0E..0C10
 7320             UNKNOWN,                  // 0C11
 7321             TELUGU,                   // 0C12..0C28
 7322             UNKNOWN,                  // 0C29
 7323             TELUGU,                   // 0C2A..0C39
 7324             UNKNOWN,                  // 0C3A..0C3B
 7325             TELUGU,                   // 0C3C..0C44
 7326             UNKNOWN,                  // 0C45
 7327             TELUGU,                   // 0C46..0C48
 7328             UNKNOWN,                  // 0C49
 7329             TELUGU,                   // 0C4A..0C4D
 7330             UNKNOWN,                  // 0C4E..0C54
 7331             TELUGU,                   // 0C55..0C56
 7332             UNKNOWN,                  // 0C57
 7333             TELUGU,                   // 0C58..0C5A
 7334             UNKNOWN,                  // 0C5B..0C5C
 7335             TELUGU,                   // 0C5D
 7336             UNKNOWN,                  // 0C5E..0C5F
 7337             TELUGU,                   // 0C60..0C63
 7338             UNKNOWN,                  // 0C64..0C65
 7339             TELUGU,                   // 0C66..0C6F
 7340             UNKNOWN,                  // 0C70..0C76
 7341             TELUGU,                   // 0C77..0C7F
 7342             KANNADA,                  // 0C80..0C8C
 7343             UNKNOWN,                  // 0C8D
 7344             KANNADA,                  // 0C8E..0C90
 7345             UNKNOWN,                  // 0C91
 7346             KANNADA,                  // 0C92..0CA8
 7347             UNKNOWN,                  // 0CA9
 7348             KANNADA,                  // 0CAA..0CB3
 7349             UNKNOWN,                  // 0CB4
 7350             KANNADA,                  // 0CB5..0CB9
 7351             UNKNOWN,                  // 0CBA..0CBB
 7352             KANNADA,                  // 0CBC..0CC4
 7353             UNKNOWN,                  // 0CC5
 7354             KANNADA,                  // 0CC6..0CC8
 7355             UNKNOWN,                  // 0CC9
 7356             KANNADA,                  // 0CCA..0CCD
 7357             UNKNOWN,                  // 0CCE..0CD4
 7358             KANNADA,                  // 0CD5..0CD6
 7359             UNKNOWN,                  // 0CD7..0CDC
 7360             KANNADA,                  // 0CDD..0CDE
 7361             UNKNOWN,                  // 0CDF
 7362             KANNADA,                  // 0CE0..0CE3
 7363             UNKNOWN,                  // 0CE4..0CE5
 7364             KANNADA,                  // 0CE6..0CEF
 7365             UNKNOWN,                  // 0CF0
 7366             KANNADA,                  // 0CF1..0CF3
 7367             UNKNOWN,                  // 0CF4..0CFF
 7368             MALAYALAM,                // 0D00..0D0C
 7369             UNKNOWN,                  // 0D0D
 7370             MALAYALAM,                // 0D0E..0D10
 7371             UNKNOWN,                  // 0D11
 7372             MALAYALAM,                // 0D12..0D44
 7373             UNKNOWN,                  // 0D45
 7374             MALAYALAM,                // 0D46..0D48
 7375             UNKNOWN,                  // 0D49
 7376             MALAYALAM,                // 0D4A..0D4F
 7377             UNKNOWN,                  // 0D50..0D53
 7378             MALAYALAM,                // 0D54..0D63
 7379             UNKNOWN,                  // 0D64..0D65
 7380             MALAYALAM,                // 0D66..0D7F
 7381             UNKNOWN,                  // 0D80
 7382             SINHALA,                  // 0D81..0D83
 7383             UNKNOWN,                  // 0D84
 7384             SINHALA,                  // 0D85..0D96
 7385             UNKNOWN,                  // 0D97..0D99
 7386             SINHALA,                  // 0D9A..0DB1
 7387             UNKNOWN,                  // 0DB2
 7388             SINHALA,                  // 0DB3..0DBB
 7389             UNKNOWN,                  // 0DBC
 7390             SINHALA,                  // 0DBD
 7391             UNKNOWN,                  // 0DBE..0DBF
 7392             SINHALA,                  // 0DC0..0DC6
 7393             UNKNOWN,                  // 0DC7..0DC9
 7394             SINHALA,                  // 0DCA
 7395             UNKNOWN,                  // 0DCB..0DCE
 7396             SINHALA,                  // 0DCF..0DD4
 7397             UNKNOWN,                  // 0DD5
 7398             SINHALA,                  // 0DD6
 7399             UNKNOWN,                  // 0DD7
 7400             SINHALA,                  // 0DD8..0DDF
 7401             UNKNOWN,                  // 0DE0..0DE5
 7402             SINHALA,                  // 0DE6..0DEF
 7403             UNKNOWN,                  // 0DF0..0DF1
 7404             SINHALA,                  // 0DF2..0DF4
 7405             UNKNOWN,                  // 0DF5..0E00
 7406             THAI,                     // 0E01..0E3A
 7407             UNKNOWN,                  // 0E3B..0E3E
 7408             COMMON,                   // 0E3F
 7409             THAI,                     // 0E40..0E5B
 7410             UNKNOWN,                  // 0E5C..0E80
 7411             LAO,                      // 0E81..0E82
 7412             UNKNOWN,                  // 0E83
 7413             LAO,                      // 0E84
 7414             UNKNOWN,                  // 0E85
 7415             LAO,                      // 0E86..0E8A
 7416             UNKNOWN,                  // 0E8B
 7417             LAO,                      // 0E8C..0EA3
 7418             UNKNOWN,                  // 0EA4
 7419             LAO,                      // 0EA5
 7420             UNKNOWN,                  // 0EA6
 7421             LAO,                      // 0EA7..0EBD
 7422             UNKNOWN,                  // 0EBE..0EBF
 7423             LAO,                      // 0EC0..0EC4
 7424             UNKNOWN,                  // 0EC5
 7425             LAO,                      // 0EC6
 7426             UNKNOWN,                  // 0EC7
 7427             LAO,                      // 0EC8..0ECE
 7428             UNKNOWN,                  // 0ECF
 7429             LAO,                      // 0ED0..0ED9
 7430             UNKNOWN,                  // 0EDA..0EDB
 7431             LAO,                      // 0EDC..0EDF
 7432             UNKNOWN,                  // 0EE0..0EFF
 7433             TIBETAN,                  // 0F00..0F47
 7434             UNKNOWN,                  // 0F48
 7435             TIBETAN,                  // 0F49..0F6C
 7436             UNKNOWN,                  // 0F6D..0F70
 7437             TIBETAN,                  // 0F71..0F97
 7438             UNKNOWN,                  // 0F98
 7439             TIBETAN,                  // 0F99..0FBC
 7440             UNKNOWN,                  // 0FBD
 7441             TIBETAN,                  // 0FBE..0FCC
 7442             UNKNOWN,                  // 0FCD
 7443             TIBETAN,                  // 0FCE..0FD4
 7444             COMMON,                   // 0FD5..0FD8
 7445             TIBETAN,                  // 0FD9..0FDA
 7446             UNKNOWN,                  // 0FDB..0FFF
 7447             MYANMAR,                  // 1000..109F
 7448             GEORGIAN,                 // 10A0..10C5
 7449             UNKNOWN,                  // 10C6
 7450             GEORGIAN,                 // 10C7
 7451             UNKNOWN,                  // 10C8..10CC
 7452             GEORGIAN,                 // 10CD
 7453             UNKNOWN,                  // 10CE..10CF
 7454             GEORGIAN,                 // 10D0..10FA
 7455             COMMON,                   // 10FB
 7456             GEORGIAN,                 // 10FC..10FF
 7457             HANGUL,                   // 1100..11FF
 7458             ETHIOPIC,                 // 1200..1248
 7459             UNKNOWN,                  // 1249
 7460             ETHIOPIC,                 // 124A..124D
 7461             UNKNOWN,                  // 124E..124F
 7462             ETHIOPIC,                 // 1250..1256
 7463             UNKNOWN,                  // 1257
 7464             ETHIOPIC,                 // 1258
 7465             UNKNOWN,                  // 1259
 7466             ETHIOPIC,                 // 125A..125D
 7467             UNKNOWN,                  // 125E..125F
 7468             ETHIOPIC,                 // 1260..1288
 7469             UNKNOWN,                  // 1289
 7470             ETHIOPIC,                 // 128A..128D
 7471             UNKNOWN,                  // 128E..128F
 7472             ETHIOPIC,                 // 1290..12B0
 7473             UNKNOWN,                  // 12B1
 7474             ETHIOPIC,                 // 12B2..12B5
 7475             UNKNOWN,                  // 12B6..12B7
 7476             ETHIOPIC,                 // 12B8..12BE
 7477             UNKNOWN,                  // 12BF
 7478             ETHIOPIC,                 // 12C0
 7479             UNKNOWN,                  // 12C1
 7480             ETHIOPIC,                 // 12C2..12C5
 7481             UNKNOWN,                  // 12C6..12C7
 7482             ETHIOPIC,                 // 12C8..12D6
 7483             UNKNOWN,                  // 12D7
 7484             ETHIOPIC,                 // 12D8..1310
 7485             UNKNOWN,                  // 1311
 7486             ETHIOPIC,                 // 1312..1315
 7487             UNKNOWN,                  // 1316..1317
 7488             ETHIOPIC,                 // 1318..135A
 7489             UNKNOWN,                  // 135B..135C
 7490             ETHIOPIC,                 // 135D..137C
 7491             UNKNOWN,                  // 137D..137F
 7492             ETHIOPIC,                 // 1380..1399
 7493             UNKNOWN,                  // 139A..139F
 7494             CHEROKEE,                 // 13A0..13F5
 7495             UNKNOWN,                  // 13F6..13F7
 7496             CHEROKEE,                 // 13F8..13FD
 7497             UNKNOWN,                  // 13FE..13FF
 7498             CANADIAN_ABORIGINAL,      // 1400..167F
 7499             OGHAM,                    // 1680..169C
 7500             UNKNOWN,                  // 169D..169F
 7501             RUNIC,                    // 16A0..16EA
 7502             COMMON,                   // 16EB..16ED
 7503             RUNIC,                    // 16EE..16F8
 7504             UNKNOWN,                  // 16F9..16FF
 7505             TAGALOG,                  // 1700..1715
 7506             UNKNOWN,                  // 1716..171E
 7507             TAGALOG,                  // 171F
 7508             HANUNOO,                  // 1720..1734
 7509             COMMON,                   // 1735..1736
 7510             UNKNOWN,                  // 1737..173F
 7511             BUHID,                    // 1740..1753
 7512             UNKNOWN,                  // 1754..175F
 7513             TAGBANWA,                 // 1760..176C
 7514             UNKNOWN,                  // 176D
 7515             TAGBANWA,                 // 176E..1770
 7516             UNKNOWN,                  // 1771
 7517             TAGBANWA,                 // 1772..1773
 7518             UNKNOWN,                  // 1774..177F
 7519             KHMER,                    // 1780..17DD
 7520             UNKNOWN,                  // 17DE..17DF
 7521             KHMER,                    // 17E0..17E9
 7522             UNKNOWN,                  // 17EA..17EF
 7523             KHMER,                    // 17F0..17F9
 7524             UNKNOWN,                  // 17FA..17FF
 7525             MONGOLIAN,                // 1800..1801
 7526             COMMON,                   // 1802..1803
 7527             MONGOLIAN,                // 1804
 7528             COMMON,                   // 1805
 7529             MONGOLIAN,                // 1806..1819
 7530             UNKNOWN,                  // 181A..181F
 7531             MONGOLIAN,                // 1820..1878
 7532             UNKNOWN,                  // 1879..187F
 7533             MONGOLIAN,                // 1880..18AA
 7534             UNKNOWN,                  // 18AB..18AF
 7535             CANADIAN_ABORIGINAL,      // 18B0..18F5
 7536             UNKNOWN,                  // 18F6..18FF
 7537             LIMBU,                    // 1900..191E
 7538             UNKNOWN,                  // 191F
 7539             LIMBU,                    // 1920..192B
 7540             UNKNOWN,                  // 192C..192F
 7541             LIMBU,                    // 1930..193B
 7542             UNKNOWN,                  // 193C..193F
 7543             LIMBU,                    // 1940
 7544             UNKNOWN,                  // 1941..1943
 7545             LIMBU,                    // 1944..194F
 7546             TAI_LE,                   // 1950..196D
 7547             UNKNOWN,                  // 196E..196F
 7548             TAI_LE,                   // 1970..1974
 7549             UNKNOWN,                  // 1975..197F
 7550             NEW_TAI_LUE,              // 1980..19AB
 7551             UNKNOWN,                  // 19AC..19AF
 7552             NEW_TAI_LUE,              // 19B0..19C9
 7553             UNKNOWN,                  // 19CA..19CF
 7554             NEW_TAI_LUE,              // 19D0..19DA
 7555             UNKNOWN,                  // 19DB..19DD
 7556             NEW_TAI_LUE,              // 19DE..19DF
 7557             KHMER,                    // 19E0..19FF
 7558             BUGINESE,                 // 1A00..1A1B
 7559             UNKNOWN,                  // 1A1C..1A1D
 7560             BUGINESE,                 // 1A1E..1A1F
 7561             TAI_THAM,                 // 1A20..1A5E
 7562             UNKNOWN,                  // 1A5F
 7563             TAI_THAM,                 // 1A60..1A7C
 7564             UNKNOWN,                  // 1A7D..1A7E
 7565             TAI_THAM,                 // 1A7F..1A89
 7566             UNKNOWN,                  // 1A8A..1A8F
 7567             TAI_THAM,                 // 1A90..1A99
 7568             UNKNOWN,                  // 1A9A..1A9F
 7569             TAI_THAM,                 // 1AA0..1AAD
 7570             UNKNOWN,                  // 1AAE..1AAF
 7571             INHERITED,                // 1AB0..1ACE
 7572             UNKNOWN,                  // 1ACF..1AFF
 7573             BALINESE,                 // 1B00..1B4C
 7574             UNKNOWN,                  // 1B4D..1B4F
 7575             BALINESE,                 // 1B50..1B7E
 7576             UNKNOWN,                  // 1B7F
 7577             SUNDANESE,                // 1B80..1BBF
 7578             BATAK,                    // 1BC0..1BF3
 7579             UNKNOWN,                  // 1BF4..1BFB
 7580             BATAK,                    // 1BFC..1BFF
 7581             LEPCHA,                   // 1C00..1C37
 7582             UNKNOWN,                  // 1C38..1C3A
 7583             LEPCHA,                   // 1C3B..1C49
 7584             UNKNOWN,                  // 1C4A..1C4C
 7585             LEPCHA,                   // 1C4D..1C4F
 7586             OL_CHIKI,                 // 1C50..1C7F
 7587             CYRILLIC,                 // 1C80..1C88
 7588             UNKNOWN,                  // 1C89..1C8F
 7589             GEORGIAN,                 // 1C90..1CBA
 7590             UNKNOWN,                  // 1CBB..1CBC
 7591             GEORGIAN,                 // 1CBD..1CBF
 7592             SUNDANESE,                // 1CC0..1CC7
 7593             UNKNOWN,                  // 1CC8..1CCF
 7594             INHERITED,                // 1CD0..1CD2
 7595             COMMON,                   // 1CD3
 7596             INHERITED,                // 1CD4..1CE0
 7597             COMMON,                   // 1CE1
 7598             INHERITED,                // 1CE2..1CE8
 7599             COMMON,                   // 1CE9..1CEC
 7600             INHERITED,                // 1CED
 7601             COMMON,                   // 1CEE..1CF3
 7602             INHERITED,                // 1CF4
 7603             COMMON,                   // 1CF5..1CF7
 7604             INHERITED,                // 1CF8..1CF9
 7605             COMMON,                   // 1CFA
 7606             UNKNOWN,                  // 1CFB..1CFF
 7607             LATIN,                    // 1D00..1D25
 7608             GREEK,                    // 1D26..1D2A
 7609             CYRILLIC,                 // 1D2B
 7610             LATIN,                    // 1D2C..1D5C
 7611             GREEK,                    // 1D5D..1D61
 7612             LATIN,                    // 1D62..1D65
 7613             GREEK,                    // 1D66..1D6A
 7614             LATIN,                    // 1D6B..1D77
 7615             CYRILLIC,                 // 1D78
 7616             LATIN,                    // 1D79..1DBE
 7617             GREEK,                    // 1DBF
 7618             INHERITED,                // 1DC0..1DFF
 7619             LATIN,                    // 1E00..1EFF
 7620             GREEK,                    // 1F00..1F15
 7621             UNKNOWN,                  // 1F16..1F17
 7622             GREEK,                    // 1F18..1F1D
 7623             UNKNOWN,                  // 1F1E..1F1F
 7624             GREEK,                    // 1F20..1F45
 7625             UNKNOWN,                  // 1F46..1F47
 7626             GREEK,                    // 1F48..1F4D
 7627             UNKNOWN,                  // 1F4E..1F4F
 7628             GREEK,                    // 1F50..1F57
 7629             UNKNOWN,                  // 1F58
 7630             GREEK,                    // 1F59
 7631             UNKNOWN,                  // 1F5A
 7632             GREEK,                    // 1F5B
 7633             UNKNOWN,                  // 1F5C
 7634             GREEK,                    // 1F5D
 7635             UNKNOWN,                  // 1F5E
 7636             GREEK,                    // 1F5F..1F7D
 7637             UNKNOWN,                  // 1F7E..1F7F
 7638             GREEK,                    // 1F80..1FB4
 7639             UNKNOWN,                  // 1FB5
 7640             GREEK,                    // 1FB6..1FC4
 7641             UNKNOWN,                  // 1FC5
 7642             GREEK,                    // 1FC6..1FD3
 7643             UNKNOWN,                  // 1FD4..1FD5
 7644             GREEK,                    // 1FD6..1FDB
 7645             UNKNOWN,                  // 1FDC
 7646             GREEK,                    // 1FDD..1FEF
 7647             UNKNOWN,                  // 1FF0..1FF1
 7648             GREEK,                    // 1FF2..1FF4
 7649             UNKNOWN,                  // 1FF5
 7650             GREEK,                    // 1FF6..1FFE
 7651             UNKNOWN,                  // 1FFF
 7652             COMMON,                   // 2000..200B
 7653             INHERITED,                // 200C..200D
 7654             COMMON,                   // 200E..2064
 7655             UNKNOWN,                  // 2065
 7656             COMMON,                   // 2066..2070
 7657             LATIN,                    // 2071
 7658             UNKNOWN,                  // 2072..2073
 7659             COMMON,                   // 2074..207E
 7660             LATIN,                    // 207F
 7661             COMMON,                   // 2080..208E
 7662             UNKNOWN,                  // 208F
 7663             LATIN,                    // 2090..209C
 7664             UNKNOWN,                  // 209D..209F
 7665             COMMON,                   // 20A0..20C0
 7666             UNKNOWN,                  // 20C1..20CF
 7667             INHERITED,                // 20D0..20F0
 7668             UNKNOWN,                  // 20F1..20FF
 7669             COMMON,                   // 2100..2125
 7670             GREEK,                    // 2126
 7671             COMMON,                   // 2127..2129
 7672             LATIN,                    // 212A..212B
 7673             COMMON,                   // 212C..2131
 7674             LATIN,                    // 2132
 7675             COMMON,                   // 2133..214D
 7676             LATIN,                    // 214E
 7677             COMMON,                   // 214F..215F
 7678             LATIN,                    // 2160..2188
 7679             COMMON,                   // 2189..218B
 7680             UNKNOWN,                  // 218C..218F
 7681             COMMON,                   // 2190..2426
 7682             UNKNOWN,                  // 2427..243F
 7683             COMMON,                   // 2440..244A
 7684             UNKNOWN,                  // 244B..245F
 7685             COMMON,                   // 2460..27FF
 7686             BRAILLE,                  // 2800..28FF
 7687             COMMON,                   // 2900..2B73
 7688             UNKNOWN,                  // 2B74..2B75
 7689             COMMON,                   // 2B76..2B95
 7690             UNKNOWN,                  // 2B96
 7691             COMMON,                   // 2B97..2BFF
 7692             GLAGOLITIC,               // 2C00..2C5F
 7693             LATIN,                    // 2C60..2C7F
 7694             COPTIC,                   // 2C80..2CF3
 7695             UNKNOWN,                  // 2CF4..2CF8
 7696             COPTIC,                   // 2CF9..2CFF
 7697             GEORGIAN,                 // 2D00..2D25
 7698             UNKNOWN,                  // 2D26
 7699             GEORGIAN,                 // 2D27
 7700             UNKNOWN,                  // 2D28..2D2C
 7701             GEORGIAN,                 // 2D2D
 7702             UNKNOWN,                  // 2D2E..2D2F
 7703             TIFINAGH,                 // 2D30..2D67
 7704             UNKNOWN,                  // 2D68..2D6E
 7705             TIFINAGH,                 // 2D6F..2D70
 7706             UNKNOWN,                  // 2D71..2D7E
 7707             TIFINAGH,                 // 2D7F
 7708             ETHIOPIC,                 // 2D80..2D96
 7709             UNKNOWN,                  // 2D97..2D9F
 7710             ETHIOPIC,                 // 2DA0..2DA6
 7711             UNKNOWN,                  // 2DA7
 7712             ETHIOPIC,                 // 2DA8..2DAE
 7713             UNKNOWN,                  // 2DAF
 7714             ETHIOPIC,                 // 2DB0..2DB6
 7715             UNKNOWN,                  // 2DB7
 7716             ETHIOPIC,                 // 2DB8..2DBE
 7717             UNKNOWN,                  // 2DBF
 7718             ETHIOPIC,                 // 2DC0..2DC6
 7719             UNKNOWN,                  // 2DC7
 7720             ETHIOPIC,                 // 2DC8..2DCE
 7721             UNKNOWN,                  // 2DCF
 7722             ETHIOPIC,                 // 2DD0..2DD6
 7723             UNKNOWN,                  // 2DD7
 7724             ETHIOPIC,                 // 2DD8..2DDE
 7725             UNKNOWN,                  // 2DDF
 7726             CYRILLIC,                 // 2DE0..2DFF
 7727             COMMON,                   // 2E00..2E5D
 7728             UNKNOWN,                  // 2E5E..2E7F
 7729             HAN,                      // 2E80..2E99
 7730             UNKNOWN,                  // 2E9A
 7731             HAN,                      // 2E9B..2EF3
 7732             UNKNOWN,                  // 2EF4..2EFF
 7733             HAN,                      // 2F00..2FD5
 7734             UNKNOWN,                  // 2FD6..2FEF
 7735             COMMON,                   // 2FF0..3004
 7736             HAN,                      // 3005
 7737             COMMON,                   // 3006
 7738             HAN,                      // 3007
 7739             COMMON,                   // 3008..3020
 7740             HAN,                      // 3021..3029
 7741             INHERITED,                // 302A..302D
 7742             HANGUL,                   // 302E..302F
 7743             COMMON,                   // 3030..3037
 7744             HAN,                      // 3038..303B
 7745             COMMON,                   // 303C..303F
 7746             UNKNOWN,                  // 3040
 7747             HIRAGANA,                 // 3041..3096
 7748             UNKNOWN,                  // 3097..3098
 7749             INHERITED,                // 3099..309A
 7750             COMMON,                   // 309B..309C
 7751             HIRAGANA,                 // 309D..309F
 7752             COMMON,                   // 30A0
 7753             KATAKANA,                 // 30A1..30FA
 7754             COMMON,                   // 30FB..30FC
 7755             KATAKANA,                 // 30FD..30FF
 7756             UNKNOWN,                  // 3100..3104
 7757             BOPOMOFO,                 // 3105..312F
 7758             UNKNOWN,                  // 3130
 7759             HANGUL,                   // 3131..318E
 7760             UNKNOWN,                  // 318F
 7761             COMMON,                   // 3190..319F
 7762             BOPOMOFO,                 // 31A0..31BF
 7763             COMMON,                   // 31C0..31E3
 7764             UNKNOWN,                  // 31E4..31EE
 7765             COMMON,                   // 31EF
 7766             KATAKANA,                 // 31F0..31FF
 7767             HANGUL,                   // 3200..321E
 7768             UNKNOWN,                  // 321F
 7769             COMMON,                   // 3220..325F
 7770             HANGUL,                   // 3260..327E
 7771             COMMON,                   // 327F..32CF
 7772             KATAKANA,                 // 32D0..32FE
 7773             COMMON,                   // 32FF
 7774             KATAKANA,                 // 3300..3357
 7775             COMMON,                   // 3358..33FF
 7776             HAN,                      // 3400..4DBF
 7777             COMMON,                   // 4DC0..4DFF
 7778             HAN,                      // 4E00..9FFF
 7779             YI,                       // A000..A48C
 7780             UNKNOWN,                  // A48D..A48F
 7781             YI,                       // A490..A4C6
 7782             UNKNOWN,                  // A4C7..A4CF
 7783             LISU,                     // A4D0..A4FF
 7784             VAI,                      // A500..A62B
 7785             UNKNOWN,                  // A62C..A63F
 7786             CYRILLIC,                 // A640..A69F
 7787             BAMUM,                    // A6A0..A6F7
 7788             UNKNOWN,                  // A6F8..A6FF
 7789             COMMON,                   // A700..A721
 7790             LATIN,                    // A722..A787
 7791             COMMON,                   // A788..A78A
 7792             LATIN,                    // A78B..A7CA
 7793             UNKNOWN,                  // A7CB..A7CF
 7794             LATIN,                    // A7D0..A7D1
 7795             UNKNOWN,                  // A7D2
 7796             LATIN,                    // A7D3
 7797             UNKNOWN,                  // A7D4
 7798             LATIN,                    // A7D5..A7D9
 7799             UNKNOWN,                  // A7DA..A7F1
 7800             LATIN,                    // A7F2..A7FF
 7801             SYLOTI_NAGRI,             // A800..A82C
 7802             UNKNOWN,                  // A82D..A82F
 7803             COMMON,                   // A830..A839
 7804             UNKNOWN,                  // A83A..A83F
 7805             PHAGS_PA,                 // A840..A877
 7806             UNKNOWN,                  // A878..A87F
 7807             SAURASHTRA,               // A880..A8C5
 7808             UNKNOWN,                  // A8C6..A8CD
 7809             SAURASHTRA,               // A8CE..A8D9
 7810             UNKNOWN,                  // A8DA..A8DF
 7811             DEVANAGARI,               // A8E0..A8FF
 7812             KAYAH_LI,                 // A900..A92D
 7813             COMMON,                   // A92E
 7814             KAYAH_LI,                 // A92F
 7815             REJANG,                   // A930..A953
 7816             UNKNOWN,                  // A954..A95E
 7817             REJANG,                   // A95F
 7818             HANGUL,                   // A960..A97C
 7819             UNKNOWN,                  // A97D..A97F
 7820             JAVANESE,                 // A980..A9CD
 7821             UNKNOWN,                  // A9CE
 7822             COMMON,                   // A9CF
 7823             JAVANESE,                 // A9D0..A9D9
 7824             UNKNOWN,                  // A9DA..A9DD
 7825             JAVANESE,                 // A9DE..A9DF
 7826             MYANMAR,                  // A9E0..A9FE
 7827             UNKNOWN,                  // A9FF
 7828             CHAM,                     // AA00..AA36
 7829             UNKNOWN,                  // AA37..AA3F
 7830             CHAM,                     // AA40..AA4D
 7831             UNKNOWN,                  // AA4E..AA4F
 7832             CHAM,                     // AA50..AA59
 7833             UNKNOWN,                  // AA5A..AA5B
 7834             CHAM,                     // AA5C..AA5F
 7835             MYANMAR,                  // AA60..AA7F
 7836             TAI_VIET,                 // AA80..AAC2
 7837             UNKNOWN,                  // AAC3..AADA
 7838             TAI_VIET,                 // AADB..AADF
 7839             MEETEI_MAYEK,             // AAE0..AAF6
 7840             UNKNOWN,                  // AAF7..AB00
 7841             ETHIOPIC,                 // AB01..AB06
 7842             UNKNOWN,                  // AB07..AB08
 7843             ETHIOPIC,                 // AB09..AB0E
 7844             UNKNOWN,                  // AB0F..AB10
 7845             ETHIOPIC,                 // AB11..AB16
 7846             UNKNOWN,                  // AB17..AB1F
 7847             ETHIOPIC,                 // AB20..AB26
 7848             UNKNOWN,                  // AB27
 7849             ETHIOPIC,                 // AB28..AB2E
 7850             UNKNOWN,                  // AB2F
 7851             LATIN,                    // AB30..AB5A
 7852             COMMON,                   // AB5B
 7853             LATIN,                    // AB5C..AB64
 7854             GREEK,                    // AB65
 7855             LATIN,                    // AB66..AB69
 7856             COMMON,                   // AB6A..AB6B
 7857             UNKNOWN,                  // AB6C..AB6F
 7858             CHEROKEE,                 // AB70..ABBF
 7859             MEETEI_MAYEK,             // ABC0..ABED
 7860             UNKNOWN,                  // ABEE..ABEF
 7861             MEETEI_MAYEK,             // ABF0..ABF9
 7862             UNKNOWN,                  // ABFA..ABFF
 7863             HANGUL,                   // AC00..D7A3
 7864             UNKNOWN,                  // D7A4..D7AF
 7865             HANGUL,                   // D7B0..D7C6
 7866             UNKNOWN,                  // D7C7..D7CA
 7867             HANGUL,                   // D7CB..D7FB
 7868             UNKNOWN,                  // D7FC..F8FF
 7869             HAN,                      // F900..FA6D
 7870             UNKNOWN,                  // FA6E..FA6F
 7871             HAN,                      // FA70..FAD9
 7872             UNKNOWN,                  // FADA..FAFF
 7873             LATIN,                    // FB00..FB06
 7874             UNKNOWN,                  // FB07..FB12
 7875             ARMENIAN,                 // FB13..FB17
 7876             UNKNOWN,                  // FB18..FB1C
 7877             HEBREW,                   // FB1D..FB36
 7878             UNKNOWN,                  // FB37
 7879             HEBREW,                   // FB38..FB3C
 7880             UNKNOWN,                  // FB3D
 7881             HEBREW,                   // FB3E
 7882             UNKNOWN,                  // FB3F
 7883             HEBREW,                   // FB40..FB41
 7884             UNKNOWN,                  // FB42
 7885             HEBREW,                   // FB43..FB44
 7886             UNKNOWN,                  // FB45
 7887             HEBREW,                   // FB46..FB4F
 7888             ARABIC,                   // FB50..FBC2
 7889             UNKNOWN,                  // FBC3..FBD2
 7890             ARABIC,                   // FBD3..FD3D
 7891             COMMON,                   // FD3E..FD3F
 7892             ARABIC,                   // FD40..FD8F
 7893             UNKNOWN,                  // FD90..FD91
 7894             ARABIC,                   // FD92..FDC7
 7895             UNKNOWN,                  // FDC8..FDCE
 7896             ARABIC,                   // FDCF
 7897             UNKNOWN,                  // FDD0..FDEF
 7898             ARABIC,                   // FDF0..FDFF
 7899             INHERITED,                // FE00..FE0F
 7900             COMMON,                   // FE10..FE19
 7901             UNKNOWN,                  // FE1A..FE1F
 7902             INHERITED,                // FE20..FE2D
 7903             CYRILLIC,                 // FE2E..FE2F
 7904             COMMON,                   // FE30..FE52
 7905             UNKNOWN,                  // FE53
 7906             COMMON,                   // FE54..FE66
 7907             UNKNOWN,                  // FE67
 7908             COMMON,                   // FE68..FE6B
 7909             UNKNOWN,                  // FE6C..FE6F
 7910             ARABIC,                   // FE70..FE74
 7911             UNKNOWN,                  // FE75
 7912             ARABIC,                   // FE76..FEFC
 7913             UNKNOWN,                  // FEFD..FEFE
 7914             COMMON,                   // FEFF
 7915             UNKNOWN,                  // FF00
 7916             COMMON,                   // FF01..FF20
 7917             LATIN,                    // FF21..FF3A
 7918             COMMON,                   // FF3B..FF40
 7919             LATIN,                    // FF41..FF5A
 7920             COMMON,                   // FF5B..FF65
 7921             KATAKANA,                 // FF66..FF6F
 7922             COMMON,                   // FF70
 7923             KATAKANA,                 // FF71..FF9D
 7924             COMMON,                   // FF9E..FF9F
 7925             HANGUL,                   // FFA0..FFBE
 7926             UNKNOWN,                  // FFBF..FFC1
 7927             HANGUL,                   // FFC2..FFC7
 7928             UNKNOWN,                  // FFC8..FFC9
 7929             HANGUL,                   // FFCA..FFCF
 7930             UNKNOWN,                  // FFD0..FFD1
 7931             HANGUL,                   // FFD2..FFD7
 7932             UNKNOWN,                  // FFD8..FFD9
 7933             HANGUL,                   // FFDA..FFDC
 7934             UNKNOWN,                  // FFDD..FFDF
 7935             COMMON,                   // FFE0..FFE6
 7936             UNKNOWN,                  // FFE7
 7937             COMMON,                   // FFE8..FFEE
 7938             UNKNOWN,                  // FFEF..FFF8
 7939             COMMON,                   // FFF9..FFFD
 7940             UNKNOWN,                  // FFFE..FFFF
 7941             LINEAR_B,                 // 10000..1000B
 7942             UNKNOWN,                  // 1000C
 7943             LINEAR_B,                 // 1000D..10026
 7944             UNKNOWN,                  // 10027
 7945             LINEAR_B,                 // 10028..1003A
 7946             UNKNOWN,                  // 1003B
 7947             LINEAR_B,                 // 1003C..1003D
 7948             UNKNOWN,                  // 1003E
 7949             LINEAR_B,                 // 1003F..1004D
 7950             UNKNOWN,                  // 1004E..1004F
 7951             LINEAR_B,                 // 10050..1005D
 7952             UNKNOWN,                  // 1005E..1007F
 7953             LINEAR_B,                 // 10080..100FA
 7954             UNKNOWN,                  // 100FB..100FF
 7955             COMMON,                   // 10100..10102
 7956             UNKNOWN,                  // 10103..10106
 7957             COMMON,                   // 10107..10133
 7958             UNKNOWN,                  // 10134..10136
 7959             COMMON,                   // 10137..1013F
 7960             GREEK,                    // 10140..1018E
 7961             UNKNOWN,                  // 1018F
 7962             COMMON,                   // 10190..1019C
 7963             UNKNOWN,                  // 1019D..1019F
 7964             GREEK,                    // 101A0
 7965             UNKNOWN,                  // 101A1..101CF
 7966             COMMON,                   // 101D0..101FC
 7967             INHERITED,                // 101FD
 7968             UNKNOWN,                  // 101FE..1027F
 7969             LYCIAN,                   // 10280..1029C
 7970             UNKNOWN,                  // 1029D..1029F
 7971             CARIAN,                   // 102A0..102D0
 7972             UNKNOWN,                  // 102D1..102DF
 7973             INHERITED,                // 102E0
 7974             COMMON,                   // 102E1..102FB
 7975             UNKNOWN,                  // 102FC..102FF
 7976             OLD_ITALIC,               // 10300..10323
 7977             UNKNOWN,                  // 10324..1032C
 7978             OLD_ITALIC,               // 1032D..1032F
 7979             GOTHIC,                   // 10330..1034A
 7980             UNKNOWN,                  // 1034B..1034F
 7981             OLD_PERMIC,               // 10350..1037A
 7982             UNKNOWN,                  // 1037B..1037F
 7983             UGARITIC,                 // 10380..1039D
 7984             UNKNOWN,                  // 1039E
 7985             UGARITIC,                 // 1039F
 7986             OLD_PERSIAN,              // 103A0..103C3
 7987             UNKNOWN,                  // 103C4..103C7
 7988             OLD_PERSIAN,              // 103C8..103D5
 7989             UNKNOWN,                  // 103D6..103FF
 7990             DESERET,                  // 10400..1044F
 7991             SHAVIAN,                  // 10450..1047F
 7992             OSMANYA,                  // 10480..1049D
 7993             UNKNOWN,                  // 1049E..1049F
 7994             OSMANYA,                  // 104A0..104A9
 7995             UNKNOWN,                  // 104AA..104AF
 7996             OSAGE,                    // 104B0..104D3
 7997             UNKNOWN,                  // 104D4..104D7
 7998             OSAGE,                    // 104D8..104FB
 7999             UNKNOWN,                  // 104FC..104FF
 8000             ELBASAN,                  // 10500..10527
 8001             UNKNOWN,                  // 10528..1052F
 8002             CAUCASIAN_ALBANIAN,       // 10530..10563
 8003             UNKNOWN,                  // 10564..1056E
 8004             CAUCASIAN_ALBANIAN,       // 1056F
 8005             VITHKUQI,                 // 10570..1057A
 8006             UNKNOWN,                  // 1057B
 8007             VITHKUQI,                 // 1057C..1058A
 8008             UNKNOWN,                  // 1058B
 8009             VITHKUQI,                 // 1058C..10592
 8010             UNKNOWN,                  // 10593
 8011             VITHKUQI,                 // 10594..10595
 8012             UNKNOWN,                  // 10596
 8013             VITHKUQI,                 // 10597..105A1
 8014             UNKNOWN,                  // 105A2
 8015             VITHKUQI,                 // 105A3..105B1
 8016             UNKNOWN,                  // 105B2
 8017             VITHKUQI,                 // 105B3..105B9
 8018             UNKNOWN,                  // 105BA
 8019             VITHKUQI,                 // 105BB..105BC
 8020             UNKNOWN,                  // 105BD..105FF
 8021             LINEAR_A,                 // 10600..10736
 8022             UNKNOWN,                  // 10737..1073F
 8023             LINEAR_A,                 // 10740..10755
 8024             UNKNOWN,                  // 10756..1075F
 8025             LINEAR_A,                 // 10760..10767
 8026             UNKNOWN,                  // 10768..1077F
 8027             LATIN,                    // 10780..10785
 8028             UNKNOWN,                  // 10786
 8029             LATIN,                    // 10787..107B0
 8030             UNKNOWN,                  // 107B1
 8031             LATIN,                    // 107B2..107BA
 8032             UNKNOWN,                  // 107BB..107FF
 8033             CYPRIOT,                  // 10800..10805
 8034             UNKNOWN,                  // 10806..10807
 8035             CYPRIOT,                  // 10808
 8036             UNKNOWN,                  // 10809
 8037             CYPRIOT,                  // 1080A..10835
 8038             UNKNOWN,                  // 10836
 8039             CYPRIOT,                  // 10837..10838
 8040             UNKNOWN,                  // 10839..1083B
 8041             CYPRIOT,                  // 1083C
 8042             UNKNOWN,                  // 1083D..1083E
 8043             CYPRIOT,                  // 1083F
 8044             IMPERIAL_ARAMAIC,         // 10840..10855
 8045             UNKNOWN,                  // 10856
 8046             IMPERIAL_ARAMAIC,         // 10857..1085F
 8047             PALMYRENE,                // 10860..1087F
 8048             NABATAEAN,                // 10880..1089E
 8049             UNKNOWN,                  // 1089F..108A6
 8050             NABATAEAN,                // 108A7..108AF
 8051             UNKNOWN,                  // 108B0..108DF
 8052             HATRAN,                   // 108E0..108F2
 8053             UNKNOWN,                  // 108F3
 8054             HATRAN,                   // 108F4..108F5
 8055             UNKNOWN,                  // 108F6..108FA
 8056             HATRAN,                   // 108FB..108FF
 8057             PHOENICIAN,               // 10900..1091B
 8058             UNKNOWN,                  // 1091C..1091E
 8059             PHOENICIAN,               // 1091F
 8060             LYDIAN,                   // 10920..10939
 8061             UNKNOWN,                  // 1093A..1093E
 8062             LYDIAN,                   // 1093F
 8063             UNKNOWN,                  // 10940..1097F
 8064             MEROITIC_HIEROGLYPHS,     // 10980..1099F
 8065             MEROITIC_CURSIVE,         // 109A0..109B7
 8066             UNKNOWN,                  // 109B8..109BB
 8067             MEROITIC_CURSIVE,         // 109BC..109CF
 8068             UNKNOWN,                  // 109D0..109D1
 8069             MEROITIC_CURSIVE,         // 109D2..109FF
 8070             KHAROSHTHI,               // 10A00..10A03
 8071             UNKNOWN,                  // 10A04
 8072             KHAROSHTHI,               // 10A05..10A06
 8073             UNKNOWN,                  // 10A07..10A0B
 8074             KHAROSHTHI,               // 10A0C..10A13
 8075             UNKNOWN,                  // 10A14
 8076             KHAROSHTHI,               // 10A15..10A17
 8077             UNKNOWN,                  // 10A18
 8078             KHAROSHTHI,               // 10A19..10A35
 8079             UNKNOWN,                  // 10A36..10A37
 8080             KHAROSHTHI,               // 10A38..10A3A
 8081             UNKNOWN,                  // 10A3B..10A3E
 8082             KHAROSHTHI,               // 10A3F..10A48
 8083             UNKNOWN,                  // 10A49..10A4F
 8084             KHAROSHTHI,               // 10A50..10A58
 8085             UNKNOWN,                  // 10A59..10A5F
 8086             OLD_SOUTH_ARABIAN,        // 10A60..10A7F
 8087             OLD_NORTH_ARABIAN,        // 10A80..10A9F
 8088             UNKNOWN,                  // 10AA0..10ABF
 8089             MANICHAEAN,               // 10AC0..10AE6
 8090             UNKNOWN,                  // 10AE7..10AEA
 8091             MANICHAEAN,               // 10AEB..10AF6
 8092             UNKNOWN,                  // 10AF7..10AFF
 8093             AVESTAN,                  // 10B00..10B35
 8094             UNKNOWN,                  // 10B36..10B38
 8095             AVESTAN,                  // 10B39..10B3F
 8096             INSCRIPTIONAL_PARTHIAN,   // 10B40..10B55
 8097             UNKNOWN,                  // 10B56..10B57
 8098             INSCRIPTIONAL_PARTHIAN,   // 10B58..10B5F
 8099             INSCRIPTIONAL_PAHLAVI,    // 10B60..10B72
 8100             UNKNOWN,                  // 10B73..10B77
 8101             INSCRIPTIONAL_PAHLAVI,    // 10B78..10B7F
 8102             PSALTER_PAHLAVI,          // 10B80..10B91
 8103             UNKNOWN,                  // 10B92..10B98
 8104             PSALTER_PAHLAVI,          // 10B99..10B9C
 8105             UNKNOWN,                  // 10B9D..10BA8
 8106             PSALTER_PAHLAVI,          // 10BA9..10BAF
 8107             UNKNOWN,                  // 10BB0..10BFF
 8108             OLD_TURKIC,               // 10C00..10C48
 8109             UNKNOWN,                  // 10C49..10C7F
 8110             OLD_HUNGARIAN,            // 10C80..10CB2
 8111             UNKNOWN,                  // 10CB3..10CBF
 8112             OLD_HUNGARIAN,            // 10CC0..10CF2
 8113             UNKNOWN,                  // 10CF3..10CF9
 8114             OLD_HUNGARIAN,            // 10CFA..10CFF
 8115             HANIFI_ROHINGYA,          // 10D00..10D27
 8116             UNKNOWN,                  // 10D28..10D2F
 8117             HANIFI_ROHINGYA,          // 10D30..10D39
 8118             UNKNOWN,                  // 10D3A..10E5F
 8119             ARABIC,                   // 10E60..10E7E
 8120             UNKNOWN,                  // 10E7F
 8121             YEZIDI,                   // 10E80..10EA9
 8122             UNKNOWN,                  // 10EAA
 8123             YEZIDI,                   // 10EAB..10EAD
 8124             UNKNOWN,                  // 10EAE..10EAF
 8125             YEZIDI,                   // 10EB0..10EB1
 8126             UNKNOWN,                  // 10EB2..10EFC
 8127             ARABIC,                   // 10EFD..10EFF
 8128             OLD_SOGDIAN,              // 10F00..10F27
 8129             UNKNOWN,                  // 10F28..10F2F
 8130             SOGDIAN,                  // 10F30..10F59
 8131             UNKNOWN,                  // 10F5A..10F6F
 8132             OLD_UYGHUR,               // 10F70..10F89
 8133             UNKNOWN,                  // 10F8A..10FAF
 8134             CHORASMIAN,               // 10FB0..10FCB
 8135             UNKNOWN,                  // 10FCC..10FDF
 8136             ELYMAIC,                  // 10FE0..10FF6
 8137             UNKNOWN,                  // 10FF7..10FFF
 8138             BRAHMI,                   // 11000..1104D
 8139             UNKNOWN,                  // 1104E..11051
 8140             BRAHMI,                   // 11052..11075
 8141             UNKNOWN,                  // 11076..1107E
 8142             BRAHMI,                   // 1107F
 8143             KAITHI,                   // 11080..110C2
 8144             UNKNOWN,                  // 110C3..110CC
 8145             KAITHI,                   // 110CD
 8146             UNKNOWN,                  // 110CE..110CF
 8147             SORA_SOMPENG,             // 110D0..110E8
 8148             UNKNOWN,                  // 110E9..110EF
 8149             SORA_SOMPENG,             // 110F0..110F9
 8150             UNKNOWN,                  // 110FA..110FF
 8151             CHAKMA,                   // 11100..11134
 8152             UNKNOWN,                  // 11135
 8153             CHAKMA,                   // 11136..11147
 8154             UNKNOWN,                  // 11148..1114F
 8155             MAHAJANI,                 // 11150..11176
 8156             UNKNOWN,                  // 11177..1117F
 8157             SHARADA,                  // 11180..111DF
 8158             UNKNOWN,                  // 111E0
 8159             SINHALA,                  // 111E1..111F4
 8160             UNKNOWN,                  // 111F5..111FF
 8161             KHOJKI,                   // 11200..11211
 8162             UNKNOWN,                  // 11212
 8163             KHOJKI,                   // 11213..11241
 8164             UNKNOWN,                  // 11242..1127F
 8165             MULTANI,                  // 11280..11286
 8166             UNKNOWN,                  // 11287
 8167             MULTANI,                  // 11288
 8168             UNKNOWN,                  // 11289
 8169             MULTANI,                  // 1128A..1128D
 8170             UNKNOWN,                  // 1128E
 8171             MULTANI,                  // 1128F..1129D
 8172             UNKNOWN,                  // 1129E
 8173             MULTANI,                  // 1129F..112A9
 8174             UNKNOWN,                  // 112AA..112AF
 8175             KHUDAWADI,                // 112B0..112EA
 8176             UNKNOWN,                  // 112EB..112EF
 8177             KHUDAWADI,                // 112F0..112F9
 8178             UNKNOWN,                  // 112FA..112FF
 8179             GRANTHA,                  // 11300..11303
 8180             UNKNOWN,                  // 11304
 8181             GRANTHA,                  // 11305..1130C
 8182             UNKNOWN,                  // 1130D..1130E
 8183             GRANTHA,                  // 1130F..11310
 8184             UNKNOWN,                  // 11311..11312
 8185             GRANTHA,                  // 11313..11328
 8186             UNKNOWN,                  // 11329
 8187             GRANTHA,                  // 1132A..11330
 8188             UNKNOWN,                  // 11331
 8189             GRANTHA,                  // 11332..11333
 8190             UNKNOWN,                  // 11334
 8191             GRANTHA,                  // 11335..11339
 8192             UNKNOWN,                  // 1133A
 8193             INHERITED,                // 1133B
 8194             GRANTHA,                  // 1133C..11344
 8195             UNKNOWN,                  // 11345..11346
 8196             GRANTHA,                  // 11347..11348
 8197             UNKNOWN,                  // 11349..1134A
 8198             GRANTHA,                  // 1134B..1134D
 8199             UNKNOWN,                  // 1134E..1134F
 8200             GRANTHA,                  // 11350
 8201             UNKNOWN,                  // 11351..11356
 8202             GRANTHA,                  // 11357
 8203             UNKNOWN,                  // 11358..1135C
 8204             GRANTHA,                  // 1135D..11363
 8205             UNKNOWN,                  // 11364..11365
 8206             GRANTHA,                  // 11366..1136C
 8207             UNKNOWN,                  // 1136D..1136F
 8208             GRANTHA,                  // 11370..11374
 8209             UNKNOWN,                  // 11375..113FF
 8210             NEWA,                     // 11400..1145B
 8211             UNKNOWN,                  // 1145C
 8212             NEWA,                     // 1145D..11461
 8213             UNKNOWN,                  // 11462..1147F
 8214             TIRHUTA,                  // 11480..114C7
 8215             UNKNOWN,                  // 114C8..114CF
 8216             TIRHUTA,                  // 114D0..114D9
 8217             UNKNOWN,                  // 114DA..1157F
 8218             SIDDHAM,                  // 11580..115B5
 8219             UNKNOWN,                  // 115B6..115B7
 8220             SIDDHAM,                  // 115B8..115DD
 8221             UNKNOWN,                  // 115DE..115FF
 8222             MODI,                     // 11600..11644
 8223             UNKNOWN,                  // 11645..1164F
 8224             MODI,                     // 11650..11659
 8225             UNKNOWN,                  // 1165A..1165F
 8226             MONGOLIAN,                // 11660..1166C
 8227             UNKNOWN,                  // 1166D..1167F
 8228             TAKRI,                    // 11680..116B9
 8229             UNKNOWN,                  // 116BA..116BF
 8230             TAKRI,                    // 116C0..116C9
 8231             UNKNOWN,                  // 116CA..116FF
 8232             AHOM,                     // 11700..1171A
 8233             UNKNOWN,                  // 1171B..1171C
 8234             AHOM,                     // 1171D..1172B
 8235             UNKNOWN,                  // 1172C..1172F
 8236             AHOM,                     // 11730..11746
 8237             UNKNOWN,                  // 11747..117FF
 8238             DOGRA,                    // 11800..1183B
 8239             UNKNOWN,                  // 1183C..1189F
 8240             WARANG_CITI,              // 118A0..118F2
 8241             UNKNOWN,                  // 118F3..118FE
 8242             WARANG_CITI,              // 118FF
 8243             DIVES_AKURU,              // 11900..11906
 8244             UNKNOWN,                  // 11907..11908
 8245             DIVES_AKURU,              // 11909
 8246             UNKNOWN,                  // 1190A..1190B
 8247             DIVES_AKURU,              // 1190C..11913
 8248             UNKNOWN,                  // 11914
 8249             DIVES_AKURU,              // 11915..11916
 8250             UNKNOWN,                  // 11917
 8251             DIVES_AKURU,              // 11918..11935
 8252             UNKNOWN,                  // 11936
 8253             DIVES_AKURU,              // 11937..11938
 8254             UNKNOWN,                  // 11939..1193A
 8255             DIVES_AKURU,              // 1193B..11946
 8256             UNKNOWN,                  // 11947..1194F
 8257             DIVES_AKURU,              // 11950..11959
 8258             UNKNOWN,                  // 1195A..1199F
 8259             NANDINAGARI,              // 119A0..119A7
 8260             UNKNOWN,                  // 119A8..119A9
 8261             NANDINAGARI,              // 119AA..119D7
 8262             UNKNOWN,                  // 119D8..119D9
 8263             NANDINAGARI,              // 119DA..119E4
 8264             UNKNOWN,                  // 119E5..119FF
 8265             ZANABAZAR_SQUARE,         // 11A00..11A47
 8266             UNKNOWN,                  // 11A48..11A4F
 8267             SOYOMBO,                  // 11A50..11AA2
 8268             UNKNOWN,                  // 11AA3..11AAF
 8269             CANADIAN_ABORIGINAL,      // 11AB0..11ABF
 8270             PAU_CIN_HAU,              // 11AC0..11AF8
 8271             UNKNOWN,                  // 11AF9..11AFF
 8272             DEVANAGARI,               // 11B00..11B09
 8273             UNKNOWN,                  // 11B0A..11BFF
 8274             BHAIKSUKI,                // 11C00..11C08
 8275             UNKNOWN,                  // 11C09
 8276             BHAIKSUKI,                // 11C0A..11C36
 8277             UNKNOWN,                  // 11C37
 8278             BHAIKSUKI,                // 11C38..11C45
 8279             UNKNOWN,                  // 11C46..11C4F
 8280             BHAIKSUKI,                // 11C50..11C6C
 8281             UNKNOWN,                  // 11C6D..11C6F
 8282             MARCHEN,                  // 11C70..11C8F
 8283             UNKNOWN,                  // 11C90..11C91
 8284             MARCHEN,                  // 11C92..11CA7
 8285             UNKNOWN,                  // 11CA8
 8286             MARCHEN,                  // 11CA9..11CB6
 8287             UNKNOWN,                  // 11CB7..11CFF
 8288             MASARAM_GONDI,            // 11D00..11D06
 8289             UNKNOWN,                  // 11D07
 8290             MASARAM_GONDI,            // 11D08..11D09
 8291             UNKNOWN,                  // 11D0A
 8292             MASARAM_GONDI,            // 11D0B..11D36
 8293             UNKNOWN,                  // 11D37..11D39
 8294             MASARAM_GONDI,            // 11D3A
 8295             UNKNOWN,                  // 11D3B
 8296             MASARAM_GONDI,            // 11D3C..11D3D
 8297             UNKNOWN,                  // 11D3E
 8298             MASARAM_GONDI,            // 11D3F..11D47
 8299             UNKNOWN,                  // 11D48..11D4F
 8300             MASARAM_GONDI,            // 11D50..11D59
 8301             UNKNOWN,                  // 11D5A..11D5F
 8302             GUNJALA_GONDI,            // 11D60..11D65
 8303             UNKNOWN,                  // 11D66
 8304             GUNJALA_GONDI,            // 11D67..11D68
 8305             UNKNOWN,                  // 11D69
 8306             GUNJALA_GONDI,            // 11D6A..11D8E
 8307             UNKNOWN,                  // 11D8F
 8308             GUNJALA_GONDI,            // 11D90..11D91
 8309             UNKNOWN,                  // 11D92
 8310             GUNJALA_GONDI,            // 11D93..11D98
 8311             UNKNOWN,                  // 11D99..11D9F
 8312             GUNJALA_GONDI,            // 11DA0..11DA9
 8313             UNKNOWN,                  // 11DAA..11EDF
 8314             MAKASAR,                  // 11EE0..11EF8
 8315             UNKNOWN,                  // 11EF9..11EFF
 8316             KAWI,                     // 11F00..11F10
 8317             UNKNOWN,                  // 11F11
 8318             KAWI,                     // 11F12..11F3A
 8319             UNKNOWN,                  // 11F3B..11F3D
 8320             KAWI,                     // 11F3E..11F59
 8321             UNKNOWN,                  // 11F5A..11FAF
 8322             LISU,                     // 11FB0
 8323             UNKNOWN,                  // 11FB1..11FBF
 8324             TAMIL,                    // 11FC0..11FF1
 8325             UNKNOWN,                  // 11FF2..11FFE
 8326             TAMIL,                    // 11FFF
 8327             CUNEIFORM,                // 12000..12399
 8328             UNKNOWN,                  // 1239A..123FF
 8329             CUNEIFORM,                // 12400..1246E
 8330             UNKNOWN,                  // 1246F
 8331             CUNEIFORM,                // 12470..12474
 8332             UNKNOWN,                  // 12475..1247F
 8333             CUNEIFORM,                // 12480..12543
 8334             UNKNOWN,                  // 12544..12F8F
 8335             CYPRO_MINOAN,             // 12F90..12FF2
 8336             UNKNOWN,                  // 12FF3..12FFF
 8337             EGYPTIAN_HIEROGLYPHS,     // 13000..13455
 8338             UNKNOWN,                  // 13456..143FF
 8339             ANATOLIAN_HIEROGLYPHS,    // 14400..14646
 8340             UNKNOWN,                  // 14647..167FF
 8341             BAMUM,                    // 16800..16A38
 8342             UNKNOWN,                  // 16A39..16A3F
 8343             MRO,                      // 16A40..16A5E
 8344             UNKNOWN,                  // 16A5F
 8345             MRO,                      // 16A60..16A69
 8346             UNKNOWN,                  // 16A6A..16A6D
 8347             MRO,                      // 16A6E..16A6F
 8348             TANGSA,                   // 16A70..16ABE
 8349             UNKNOWN,                  // 16ABF
 8350             TANGSA,                   // 16AC0..16AC9
 8351             UNKNOWN,                  // 16ACA..16ACF
 8352             BASSA_VAH,                // 16AD0..16AED
 8353             UNKNOWN,                  // 16AEE..16AEF
 8354             BASSA_VAH,                // 16AF0..16AF5
 8355             UNKNOWN,                  // 16AF6..16AFF
 8356             PAHAWH_HMONG,             // 16B00..16B45
 8357             UNKNOWN,                  // 16B46..16B4F
 8358             PAHAWH_HMONG,             // 16B50..16B59
 8359             UNKNOWN,                  // 16B5A
 8360             PAHAWH_HMONG,             // 16B5B..16B61
 8361             UNKNOWN,                  // 16B62
 8362             PAHAWH_HMONG,             // 16B63..16B77
 8363             UNKNOWN,                  // 16B78..16B7C
 8364             PAHAWH_HMONG,             // 16B7D..16B8F
 8365             UNKNOWN,                  // 16B90..16E3F
 8366             MEDEFAIDRIN,              // 16E40..16E9A
 8367             UNKNOWN,                  // 16E9B..16EFF
 8368             MIAO,                     // 16F00..16F4A
 8369             UNKNOWN,                  // 16F4B..16F4E
 8370             MIAO,                     // 16F4F..16F87
 8371             UNKNOWN,                  // 16F88..16F8E
 8372             MIAO,                     // 16F8F..16F9F
 8373             UNKNOWN,                  // 16FA0..16FDF
 8374             TANGUT,                   // 16FE0
 8375             NUSHU,                    // 16FE1
 8376             HAN,                      // 16FE2..16FE3
 8377             KHITAN_SMALL_SCRIPT,      // 16FE4
 8378             UNKNOWN,                  // 16FE5..16FEF
 8379             HAN,                      // 16FF0..16FF1
 8380             UNKNOWN,                  // 16FF2..16FFF
 8381             TANGUT,                   // 17000..187F7
 8382             UNKNOWN,                  // 187F8..187FF
 8383             TANGUT,                   // 18800..18AFF
 8384             KHITAN_SMALL_SCRIPT,      // 18B00..18CD5
 8385             UNKNOWN,                  // 18CD6..18CFF
 8386             TANGUT,                   // 18D00..18D08
 8387             UNKNOWN,                  // 18D09..1AFEF
 8388             KATAKANA,                 // 1AFF0..1AFF3
 8389             UNKNOWN,                  // 1AFF4
 8390             KATAKANA,                 // 1AFF5..1AFFB
 8391             UNKNOWN,                  // 1AFFC
 8392             KATAKANA,                 // 1AFFD..1AFFE
 8393             UNKNOWN,                  // 1AFFF
 8394             KATAKANA,                 // 1B000
 8395             HIRAGANA,                 // 1B001..1B11F
 8396             KATAKANA,                 // 1B120..1B122
 8397             UNKNOWN,                  // 1B123..1B131
 8398             HIRAGANA,                 // 1B132
 8399             UNKNOWN,                  // 1B133..1B14F
 8400             HIRAGANA,                 // 1B150..1B152
 8401             UNKNOWN,                  // 1B153..1B154
 8402             KATAKANA,                 // 1B155
 8403             UNKNOWN,                  // 1B156..1B163
 8404             KATAKANA,                 // 1B164..1B167
 8405             UNKNOWN,                  // 1B168..1B16F
 8406             NUSHU,                    // 1B170..1B2FB
 8407             UNKNOWN,                  // 1B2FC..1BBFF
 8408             DUPLOYAN,                 // 1BC00..1BC6A
 8409             UNKNOWN,                  // 1BC6B..1BC6F
 8410             DUPLOYAN,                 // 1BC70..1BC7C
 8411             UNKNOWN,                  // 1BC7D..1BC7F
 8412             DUPLOYAN,                 // 1BC80..1BC88
 8413             UNKNOWN,                  // 1BC89..1BC8F
 8414             DUPLOYAN,                 // 1BC90..1BC99
 8415             UNKNOWN,                  // 1BC9A..1BC9B
 8416             DUPLOYAN,                 // 1BC9C..1BC9F
 8417             COMMON,                   // 1BCA0..1BCA3
 8418             UNKNOWN,                  // 1BCA4..1CEFF
 8419             INHERITED,                // 1CF00..1CF2D
 8420             UNKNOWN,                  // 1CF2E..1CF2F
 8421             INHERITED,                // 1CF30..1CF46
 8422             UNKNOWN,                  // 1CF47..1CF4F
 8423             COMMON,                   // 1CF50..1CFC3
 8424             UNKNOWN,                  // 1CFC4..1CFFF
 8425             COMMON,                   // 1D000..1D0F5
 8426             UNKNOWN,                  // 1D0F6..1D0FF
 8427             COMMON,                   // 1D100..1D126
 8428             UNKNOWN,                  // 1D127..1D128
 8429             COMMON,                   // 1D129..1D166
 8430             INHERITED,                // 1D167..1D169
 8431             COMMON,                   // 1D16A..1D17A
 8432             INHERITED,                // 1D17B..1D182
 8433             COMMON,                   // 1D183..1D184
 8434             INHERITED,                // 1D185..1D18B
 8435             COMMON,                   // 1D18C..1D1A9
 8436             INHERITED,                // 1D1AA..1D1AD
 8437             COMMON,                   // 1D1AE..1D1EA
 8438             UNKNOWN,                  // 1D1EB..1D1FF
 8439             GREEK,                    // 1D200..1D245
 8440             UNKNOWN,                  // 1D246..1D2BF
 8441             COMMON,                   // 1D2C0..1D2D3
 8442             UNKNOWN,                  // 1D2D4..1D2DF
 8443             COMMON,                   // 1D2E0..1D2F3
 8444             UNKNOWN,                  // 1D2F4..1D2FF
 8445             COMMON,                   // 1D300..1D356
 8446             UNKNOWN,                  // 1D357..1D35F
 8447             COMMON,                   // 1D360..1D378
 8448             UNKNOWN,                  // 1D379..1D3FF
 8449             COMMON,                   // 1D400..1D454
 8450             UNKNOWN,                  // 1D455
 8451             COMMON,                   // 1D456..1D49C
 8452             UNKNOWN,                  // 1D49D
 8453             COMMON,                   // 1D49E..1D49F
 8454             UNKNOWN,                  // 1D4A0..1D4A1
 8455             COMMON,                   // 1D4A2
 8456             UNKNOWN,                  // 1D4A3..1D4A4
 8457             COMMON,                   // 1D4A5..1D4A6
 8458             UNKNOWN,                  // 1D4A7..1D4A8
 8459             COMMON,                   // 1D4A9..1D4AC
 8460             UNKNOWN,                  // 1D4AD
 8461             COMMON,                   // 1D4AE..1D4B9
 8462             UNKNOWN,                  // 1D4BA
 8463             COMMON,                   // 1D4BB
 8464             UNKNOWN,                  // 1D4BC
 8465             COMMON,                   // 1D4BD..1D4C3
 8466             UNKNOWN,                  // 1D4C4
 8467             COMMON,                   // 1D4C5..1D505
 8468             UNKNOWN,                  // 1D506
 8469             COMMON,                   // 1D507..1D50A
 8470             UNKNOWN,                  // 1D50B..1D50C
 8471             COMMON,                   // 1D50D..1D514
 8472             UNKNOWN,                  // 1D515
 8473             COMMON,                   // 1D516..1D51C
 8474             UNKNOWN,                  // 1D51D
 8475             COMMON,                   // 1D51E..1D539
 8476             UNKNOWN,                  // 1D53A
 8477             COMMON,                   // 1D53B..1D53E
 8478             UNKNOWN,                  // 1D53F
 8479             COMMON,                   // 1D540..1D544
 8480             UNKNOWN,                  // 1D545
 8481             COMMON,                   // 1D546
 8482             UNKNOWN,                  // 1D547..1D549
 8483             COMMON,                   // 1D54A..1D550
 8484             UNKNOWN,                  // 1D551
 8485             COMMON,                   // 1D552..1D6A5
 8486             UNKNOWN,                  // 1D6A6..1D6A7
 8487             COMMON,                   // 1D6A8..1D7CB
 8488             UNKNOWN,                  // 1D7CC..1D7CD
 8489             COMMON,                   // 1D7CE..1D7FF
 8490             SIGNWRITING,              // 1D800..1DA8B
 8491             UNKNOWN,                  // 1DA8C..1DA9A
 8492             SIGNWRITING,              // 1DA9B..1DA9F
 8493             UNKNOWN,                  // 1DAA0
 8494             SIGNWRITING,              // 1DAA1..1DAAF
 8495             UNKNOWN,                  // 1DAB0..1DEFF
 8496             LATIN,                    // 1DF00..1DF1E
 8497             UNKNOWN,                  // 1DF1F..1DF24
 8498             LATIN,                    // 1DF25..1DF2A
 8499             UNKNOWN,                  // 1DF2B..1DFFF
 8500             GLAGOLITIC,               // 1E000..1E006
 8501             UNKNOWN,                  // 1E007
 8502             GLAGOLITIC,               // 1E008..1E018
 8503             UNKNOWN,                  // 1E019..1E01A
 8504             GLAGOLITIC,               // 1E01B..1E021
 8505             UNKNOWN,                  // 1E022
 8506             GLAGOLITIC,               // 1E023..1E024
 8507             UNKNOWN,                  // 1E025
 8508             GLAGOLITIC,               // 1E026..1E02A
 8509             UNKNOWN,                  // 1E02B..1E02F
 8510             CYRILLIC,                 // 1E030..1E06D
 8511             UNKNOWN,                  // 1E06E..1E08E
 8512             CYRILLIC,                 // 1E08F
 8513             UNKNOWN,                  // 1E090..1E0FF
 8514             NYIAKENG_PUACHUE_HMONG,   // 1E100..1E12C
 8515             UNKNOWN,                  // 1E12D..1E12F
 8516             NYIAKENG_PUACHUE_HMONG,   // 1E130..1E13D
 8517             UNKNOWN,                  // 1E13E..1E13F
 8518             NYIAKENG_PUACHUE_HMONG,   // 1E140..1E149
 8519             UNKNOWN,                  // 1E14A..1E14D
 8520             NYIAKENG_PUACHUE_HMONG,   // 1E14E..1E14F
 8521             UNKNOWN,                  // 1E150..1E28F
 8522             TOTO,                     // 1E290..1E2AE
 8523             UNKNOWN,                  // 1E2AF..1E2BF
 8524             WANCHO,                   // 1E2C0..1E2F9
 8525             UNKNOWN,                  // 1E2FA..1E2FE
 8526             WANCHO,                   // 1E2FF
 8527             UNKNOWN,                  // 1E300..1E4CF
 8528             NAG_MUNDARI,              // 1E4D0..1E4F9
 8529             UNKNOWN,                  // 1E4FA..1E7DF
 8530             ETHIOPIC,                 // 1E7E0..1E7E6
 8531             UNKNOWN,                  // 1E7E7
 8532             ETHIOPIC,                 // 1E7E8..1E7EB
 8533             UNKNOWN,                  // 1E7EC
 8534             ETHIOPIC,                 // 1E7ED..1E7EE
 8535             UNKNOWN,                  // 1E7EF
 8536             ETHIOPIC,                 // 1E7F0..1E7FE
 8537             UNKNOWN,                  // 1E7FF
 8538             MENDE_KIKAKUI,            // 1E800..1E8C4
 8539             UNKNOWN,                  // 1E8C5..1E8C6
 8540             MENDE_KIKAKUI,            // 1E8C7..1E8D6
 8541             UNKNOWN,                  // 1E8D7..1E8FF
 8542             ADLAM,                    // 1E900..1E94B
 8543             UNKNOWN,                  // 1E94C..1E94F
 8544             ADLAM,                    // 1E950..1E959
 8545             UNKNOWN,                  // 1E95A..1E95D
 8546             ADLAM,                    // 1E95E..1E95F
 8547             UNKNOWN,                  // 1E960..1EC70
 8548             COMMON,                   // 1EC71..1ECB4
 8549             UNKNOWN,                  // 1ECB5..1ED00
 8550             COMMON,                   // 1ED01..1ED3D
 8551             UNKNOWN,                  // 1ED3E..1EDFF
 8552             ARABIC,                   // 1EE00..1EE03
 8553             UNKNOWN,                  // 1EE04
 8554             ARABIC,                   // 1EE05..1EE1F
 8555             UNKNOWN,                  // 1EE20
 8556             ARABIC,                   // 1EE21..1EE22
 8557             UNKNOWN,                  // 1EE23
 8558             ARABIC,                   // 1EE24
 8559             UNKNOWN,                  // 1EE25..1EE26
 8560             ARABIC,                   // 1EE27
 8561             UNKNOWN,                  // 1EE28
 8562             ARABIC,                   // 1EE29..1EE32
 8563             UNKNOWN,                  // 1EE33
 8564             ARABIC,                   // 1EE34..1EE37
 8565             UNKNOWN,                  // 1EE38
 8566             ARABIC,                   // 1EE39
 8567             UNKNOWN,                  // 1EE3A
 8568             ARABIC,                   // 1EE3B
 8569             UNKNOWN,                  // 1EE3C..1EE41
 8570             ARABIC,                   // 1EE42
 8571             UNKNOWN,                  // 1EE43..1EE46
 8572             ARABIC,                   // 1EE47
 8573             UNKNOWN,                  // 1EE48
 8574             ARABIC,                   // 1EE49
 8575             UNKNOWN,                  // 1EE4A
 8576             ARABIC,                   // 1EE4B
 8577             UNKNOWN,                  // 1EE4C
 8578             ARABIC,                   // 1EE4D..1EE4F
 8579             UNKNOWN,                  // 1EE50
 8580             ARABIC,                   // 1EE51..1EE52
 8581             UNKNOWN,                  // 1EE53
 8582             ARABIC,                   // 1EE54
 8583             UNKNOWN,                  // 1EE55..1EE56
 8584             ARABIC,                   // 1EE57
 8585             UNKNOWN,                  // 1EE58
 8586             ARABIC,                   // 1EE59
 8587             UNKNOWN,                  // 1EE5A
 8588             ARABIC,                   // 1EE5B
 8589             UNKNOWN,                  // 1EE5C
 8590             ARABIC,                   // 1EE5D
 8591             UNKNOWN,                  // 1EE5E
 8592             ARABIC,                   // 1EE5F
 8593             UNKNOWN,                  // 1EE60
 8594             ARABIC,                   // 1EE61..1EE62
 8595             UNKNOWN,                  // 1EE63
 8596             ARABIC,                   // 1EE64
 8597             UNKNOWN,                  // 1EE65..1EE66
 8598             ARABIC,                   // 1EE67..1EE6A
 8599             UNKNOWN,                  // 1EE6B
 8600             ARABIC,                   // 1EE6C..1EE72
 8601             UNKNOWN,                  // 1EE73
 8602             ARABIC,                   // 1EE74..1EE77
 8603             UNKNOWN,                  // 1EE78
 8604             ARABIC,                   // 1EE79..1EE7C
 8605             UNKNOWN,                  // 1EE7D
 8606             ARABIC,                   // 1EE7E
 8607             UNKNOWN,                  // 1EE7F
 8608             ARABIC,                   // 1EE80..1EE89
 8609             UNKNOWN,                  // 1EE8A
 8610             ARABIC,                   // 1EE8B..1EE9B
 8611             UNKNOWN,                  // 1EE9C..1EEA0
 8612             ARABIC,                   // 1EEA1..1EEA3
 8613             UNKNOWN,                  // 1EEA4
 8614             ARABIC,                   // 1EEA5..1EEA9
 8615             UNKNOWN,                  // 1EEAA
 8616             ARABIC,                   // 1EEAB..1EEBB
 8617             UNKNOWN,                  // 1EEBC..1EEEF
 8618             ARABIC,                   // 1EEF0..1EEF1
 8619             UNKNOWN,                  // 1EEF2..1EFFF
 8620             COMMON,                   // 1F000..1F02B
 8621             UNKNOWN,                  // 1F02C..1F02F
 8622             COMMON,                   // 1F030..1F093
 8623             UNKNOWN,                  // 1F094..1F09F
 8624             COMMON,                   // 1F0A0..1F0AE
 8625             UNKNOWN,                  // 1F0AF..1F0B0
 8626             COMMON,                   // 1F0B1..1F0BF
 8627             UNKNOWN,                  // 1F0C0
 8628             COMMON,                   // 1F0C1..1F0CF
 8629             UNKNOWN,                  // 1F0D0
 8630             COMMON,                   // 1F0D1..1F0F5
 8631             UNKNOWN,                  // 1F0F6..1F0FF
 8632             COMMON,                   // 1F100..1F1AD
 8633             UNKNOWN,                  // 1F1AE..1F1E5
 8634             COMMON,                   // 1F1E6..1F1FF
 8635             HIRAGANA,                 // 1F200
 8636             COMMON,                   // 1F201..1F202
 8637             UNKNOWN,                  // 1F203..1F20F
 8638             COMMON,                   // 1F210..1F23B
 8639             UNKNOWN,                  // 1F23C..1F23F
 8640             COMMON,                   // 1F240..1F248
 8641             UNKNOWN,                  // 1F249..1F24F
 8642             COMMON,                   // 1F250..1F251
 8643             UNKNOWN,                  // 1F252..1F25F
 8644             COMMON,                   // 1F260..1F265
 8645             UNKNOWN,                  // 1F266..1F2FF
 8646             COMMON,                   // 1F300..1F6D7
 8647             UNKNOWN,                  // 1F6D8..1F6DB
 8648             COMMON,                   // 1F6DC..1F6EC
 8649             UNKNOWN,                  // 1F6ED..1F6EF
 8650             COMMON,                   // 1F6F0..1F6FC
 8651             UNKNOWN,                  // 1F6FD..1F6FF
 8652             COMMON,                   // 1F700..1F776
 8653             UNKNOWN,                  // 1F777..1F77A
 8654             COMMON,                   // 1F77B..1F7D9
 8655             UNKNOWN,                  // 1F7DA..1F7DF
 8656             COMMON,                   // 1F7E0..1F7EB
 8657             UNKNOWN,                  // 1F7EC..1F7EF
 8658             COMMON,                   // 1F7F0
 8659             UNKNOWN,                  // 1F7F1..1F7FF
 8660             COMMON,                   // 1F800..1F80B
 8661             UNKNOWN,                  // 1F80C..1F80F
 8662             COMMON,                   // 1F810..1F847
 8663             UNKNOWN,                  // 1F848..1F84F
 8664             COMMON,                   // 1F850..1F859
 8665             UNKNOWN,                  // 1F85A..1F85F
 8666             COMMON,                   // 1F860..1F887
 8667             UNKNOWN,                  // 1F888..1F88F
 8668             COMMON,                   // 1F890..1F8AD
 8669             UNKNOWN,                  // 1F8AE..1F8AF
 8670             COMMON,                   // 1F8B0..1F8B1
 8671             UNKNOWN,                  // 1F8B2..1F8FF
 8672             COMMON,                   // 1F900..1FA53
 8673             UNKNOWN,                  // 1FA54..1FA5F
 8674             COMMON,                   // 1FA60..1FA6D
 8675             UNKNOWN,                  // 1FA6E..1FA6F
 8676             COMMON,                   // 1FA70..1FA7C
 8677             UNKNOWN,                  // 1FA7D..1FA7F
 8678             COMMON,                   // 1FA80..1FA88
 8679             UNKNOWN,                  // 1FA89..1FA8F
 8680             COMMON,                   // 1FA90..1FABD
 8681             UNKNOWN,                  // 1FABE
 8682             COMMON,                   // 1FABF..1FAC5
 8683             UNKNOWN,                  // 1FAC6..1FACD
 8684             COMMON,                   // 1FACE..1FADB
 8685             UNKNOWN,                  // 1FADC..1FADF
 8686             COMMON,                   // 1FAE0..1FAE8
 8687             UNKNOWN,                  // 1FAE9..1FAEF
 8688             COMMON,                   // 1FAF0..1FAF8
 8689             UNKNOWN,                  // 1FAF9..1FAFF
 8690             COMMON,                   // 1FB00..1FB92
 8691             UNKNOWN,                  // 1FB93
 8692             COMMON,                   // 1FB94..1FBCA
 8693             UNKNOWN,                  // 1FBCB..1FBEF
 8694             COMMON,                   // 1FBF0..1FBF9
 8695             UNKNOWN,                  // 1FBFA..1FFFF
 8696             HAN,                      // 20000..2A6DF
 8697             UNKNOWN,                  // 2A6E0..2A6FF
 8698             HAN,                      // 2A700..2B739
 8699             UNKNOWN,                  // 2B73A..2B73F
 8700             HAN,                      // 2B740..2B81D
 8701             UNKNOWN,                  // 2B81E..2B81F
 8702             HAN,                      // 2B820..2CEA1
 8703             UNKNOWN,                  // 2CEA2..2CEAF
 8704             HAN,                      // 2CEB0..2EBE0
 8705             UNKNOWN,                  // 2EBE1..2EBEF
 8706             HAN,                      // 2EBF0..2EE5D
 8707             UNKNOWN,                  // 2EE5E..2F7FF
 8708             HAN,                      // 2F800..2FA1D
 8709             UNKNOWN,                  // 2FA1E..2FFFF
 8710             HAN,                      // 30000..3134A
 8711             UNKNOWN,                  // 3134B..3134F
 8712             HAN,                      // 31350..323AF
 8713             UNKNOWN,                  // 323B0..E0000
 8714             COMMON,                   // E0001
 8715             UNKNOWN,                  // E0002..E001F
 8716             COMMON,                   // E0020..E007F
 8717             UNKNOWN,                  // E0080..E00FF
 8718             INHERITED,                // E0100..E01EF
 8719             UNKNOWN,                  // E01F0..10FFFF
 8720         };
 8721 
 8722         private static final HashMap<String, Character.UnicodeScript> aliases;
 8723         static {
 8724             aliases = HashMap.newHashMap(UNKNOWN.ordinal() + 1);
 8725             aliases.put("ADLM", ADLAM);
 8726             aliases.put("AGHB", CAUCASIAN_ALBANIAN);
 8727             aliases.put("AHOM", AHOM);
 8728             aliases.put("ARAB", ARABIC);
 8729             aliases.put("ARMI", IMPERIAL_ARAMAIC);
 8730             aliases.put("ARMN", ARMENIAN);
 8731             aliases.put("AVST", AVESTAN);
 8732             aliases.put("BALI", BALINESE);
 8733             aliases.put("BAMU", BAMUM);
 8734             aliases.put("BASS", BASSA_VAH);
 8735             aliases.put("BATK", BATAK);
 8736             aliases.put("BENG", BENGALI);
 8737             aliases.put("BHKS", BHAIKSUKI);
 8738             aliases.put("BOPO", BOPOMOFO);
 8739             aliases.put("BRAH", BRAHMI);
 8740             aliases.put("BRAI", BRAILLE);
 8741             aliases.put("BUGI", BUGINESE);
 8742             aliases.put("BUHD", BUHID);
 8743             aliases.put("CAKM", CHAKMA);
 8744             aliases.put("CANS", CANADIAN_ABORIGINAL);
 8745             aliases.put("CARI", CARIAN);
 8746             aliases.put("CHAM", CHAM);
 8747             aliases.put("CHER", CHEROKEE);
 8748             aliases.put("CHRS", CHORASMIAN);
 8749             aliases.put("COPT", COPTIC);
 8750             aliases.put("CPMN", CYPRO_MINOAN);
 8751             aliases.put("CPRT", CYPRIOT);
 8752             aliases.put("CYRL", CYRILLIC);
 8753             aliases.put("DEVA", DEVANAGARI);
 8754             aliases.put("DIAK", DIVES_AKURU);
 8755             aliases.put("DOGR", DOGRA);
 8756             aliases.put("DSRT", DESERET);
 8757             aliases.put("DUPL", DUPLOYAN);
 8758             aliases.put("EGYP", EGYPTIAN_HIEROGLYPHS);
 8759             aliases.put("ELBA", ELBASAN);
 8760             aliases.put("ELYM", ELYMAIC);
 8761             aliases.put("ETHI", ETHIOPIC);
 8762             aliases.put("GEOR", GEORGIAN);
 8763             aliases.put("GLAG", GLAGOLITIC);
 8764             aliases.put("GONG", GUNJALA_GONDI);
 8765             aliases.put("GONM", MASARAM_GONDI);
 8766             aliases.put("GOTH", GOTHIC);
 8767             aliases.put("GRAN", GRANTHA);
 8768             aliases.put("GREK", GREEK);
 8769             aliases.put("GUJR", GUJARATI);
 8770             aliases.put("GURU", GURMUKHI);
 8771             aliases.put("HANG", HANGUL);
 8772             aliases.put("HANI", HAN);
 8773             aliases.put("HANO", HANUNOO);
 8774             aliases.put("HATR", HATRAN);
 8775             aliases.put("HEBR", HEBREW);
 8776             aliases.put("HIRA", HIRAGANA);
 8777             aliases.put("HLUW", ANATOLIAN_HIEROGLYPHS);
 8778             aliases.put("HMNG", PAHAWH_HMONG);
 8779             aliases.put("HMNP", NYIAKENG_PUACHUE_HMONG);
 8780             aliases.put("HUNG", OLD_HUNGARIAN);
 8781             aliases.put("ITAL", OLD_ITALIC);
 8782             aliases.put("JAVA", JAVANESE);
 8783             aliases.put("KALI", KAYAH_LI);
 8784             aliases.put("KANA", KATAKANA);
 8785             aliases.put("KAWI", KAWI);
 8786             aliases.put("KHAR", KHAROSHTHI);
 8787             aliases.put("KHMR", KHMER);
 8788             aliases.put("KHOJ", KHOJKI);
 8789             aliases.put("KITS", KHITAN_SMALL_SCRIPT);
 8790             aliases.put("KNDA", KANNADA);
 8791             aliases.put("KTHI", KAITHI);
 8792             aliases.put("LANA", TAI_THAM);
 8793             aliases.put("LAOO", LAO);
 8794             aliases.put("LATN", LATIN);
 8795             aliases.put("LEPC", LEPCHA);
 8796             aliases.put("LIMB", LIMBU);
 8797             aliases.put("LINA", LINEAR_A);
 8798             aliases.put("LINB", LINEAR_B);
 8799             aliases.put("LISU", LISU);
 8800             aliases.put("LYCI", LYCIAN);
 8801             aliases.put("LYDI", LYDIAN);
 8802             aliases.put("MAHJ", MAHAJANI);
 8803             aliases.put("MAKA", MAKASAR);
 8804             aliases.put("MAND", MANDAIC);
 8805             aliases.put("MANI", MANICHAEAN);
 8806             aliases.put("MARC", MARCHEN);
 8807             aliases.put("MEDF", MEDEFAIDRIN);
 8808             aliases.put("MEND", MENDE_KIKAKUI);
 8809             aliases.put("MERC", MEROITIC_CURSIVE);
 8810             aliases.put("MERO", MEROITIC_HIEROGLYPHS);
 8811             aliases.put("MLYM", MALAYALAM);
 8812             aliases.put("MODI", MODI);
 8813             aliases.put("MONG", MONGOLIAN);
 8814             aliases.put("MROO", MRO);
 8815             aliases.put("MTEI", MEETEI_MAYEK);
 8816             aliases.put("MULT", MULTANI);
 8817             aliases.put("MYMR", MYANMAR);
 8818             aliases.put("NAGM", NAG_MUNDARI);
 8819             aliases.put("NAND", NANDINAGARI);
 8820             aliases.put("NARB", OLD_NORTH_ARABIAN);
 8821             aliases.put("NBAT", NABATAEAN);
 8822             aliases.put("NEWA", NEWA);
 8823             aliases.put("NKOO", NKO);
 8824             aliases.put("NSHU", NUSHU);
 8825             aliases.put("OGAM", OGHAM);
 8826             aliases.put("OLCK", OL_CHIKI);
 8827             aliases.put("ORKH", OLD_TURKIC);
 8828             aliases.put("ORYA", ORIYA);
 8829             aliases.put("OSGE", OSAGE);
 8830             aliases.put("OSMA", OSMANYA);
 8831             aliases.put("OUGR", OLD_UYGHUR);
 8832             aliases.put("PALM", PALMYRENE);
 8833             aliases.put("PAUC", PAU_CIN_HAU);
 8834             aliases.put("PERM", OLD_PERMIC);
 8835             aliases.put("PHAG", PHAGS_PA);
 8836             aliases.put("PHLI", INSCRIPTIONAL_PAHLAVI);
 8837             aliases.put("PHLP", PSALTER_PAHLAVI);
 8838             aliases.put("PHNX", PHOENICIAN);
 8839             aliases.put("PLRD", MIAO);
 8840             aliases.put("PRTI", INSCRIPTIONAL_PARTHIAN);
 8841             aliases.put("RJNG", REJANG);
 8842             aliases.put("ROHG", HANIFI_ROHINGYA);
 8843             aliases.put("RUNR", RUNIC);
 8844             aliases.put("SAMR", SAMARITAN);
 8845             aliases.put("SARB", OLD_SOUTH_ARABIAN);
 8846             aliases.put("SAUR", SAURASHTRA);
 8847             aliases.put("SGNW", SIGNWRITING);
 8848             aliases.put("SHAW", SHAVIAN);
 8849             aliases.put("SHRD", SHARADA);
 8850             aliases.put("SIDD", SIDDHAM);
 8851             aliases.put("SIND", KHUDAWADI);
 8852             aliases.put("SINH", SINHALA);
 8853             aliases.put("SOGD", SOGDIAN);
 8854             aliases.put("SOGO", OLD_SOGDIAN);
 8855             aliases.put("SORA", SORA_SOMPENG);
 8856             aliases.put("SOYO", SOYOMBO);
 8857             aliases.put("SUND", SUNDANESE);
 8858             aliases.put("SYLO", SYLOTI_NAGRI);
 8859             aliases.put("SYRC", SYRIAC);
 8860             aliases.put("TAGB", TAGBANWA);
 8861             aliases.put("TAKR", TAKRI);
 8862             aliases.put("TALE", TAI_LE);
 8863             aliases.put("TALU", NEW_TAI_LUE);
 8864             aliases.put("TAML", TAMIL);
 8865             aliases.put("TANG", TANGUT);
 8866             aliases.put("TAVT", TAI_VIET);
 8867             aliases.put("TELU", TELUGU);
 8868             aliases.put("TFNG", TIFINAGH);
 8869             aliases.put("TGLG", TAGALOG);
 8870             aliases.put("THAA", THAANA);
 8871             aliases.put("THAI", THAI);
 8872             aliases.put("TIBT", TIBETAN);
 8873             aliases.put("TIRH", TIRHUTA);
 8874             aliases.put("TNSA", TANGSA);
 8875             aliases.put("TOTO", TOTO);
 8876             aliases.put("UGAR", UGARITIC);
 8877             aliases.put("VAII", VAI);
 8878             aliases.put("VITH", VITHKUQI);
 8879             aliases.put("WARA", WARANG_CITI);
 8880             aliases.put("WCHO", WANCHO);
 8881             aliases.put("XPEO", OLD_PERSIAN);
 8882             aliases.put("XSUX", CUNEIFORM);
 8883             aliases.put("YEZI", YEZIDI);
 8884             aliases.put("YIII", YI);
 8885             aliases.put("ZANB", ZANABAZAR_SQUARE);
 8886             aliases.put("ZINH", INHERITED);
 8887             aliases.put("ZYYY", COMMON);
 8888             aliases.put("ZZZZ", UNKNOWN);
 8889         }
 8890 
 8891         /**
 8892          * Returns the enum constant representing the Unicode script of which
 8893          * the given character (Unicode code point) is assigned to.
 8894          *
 8895          * @param   codePoint the character (Unicode code point) in question.
 8896          * @return  The {@code UnicodeScript} constant representing the
 8897          *          Unicode script of which this character is assigned to.
 8898          *
 8899          * @throws  IllegalArgumentException if the specified
 8900          * {@code codePoint} is an invalid Unicode code point.
 8901          * @see Character#isValidCodePoint(int)
 8902          *
 8903          */
 8904         public static UnicodeScript of(int codePoint) {
 8905             if (!isValidCodePoint(codePoint))
 8906                 throw new IllegalArgumentException(
 8907                     String.format("Not a valid Unicode code point: 0x%X", codePoint));
 8908             int type = getType(codePoint);
 8909             // leave SURROGATE and PRIVATE_USE for table lookup
 8910             if (type == UNASSIGNED)
 8911                 return UNKNOWN;
 8912             int index = Arrays.binarySearch(scriptStarts, codePoint);
 8913             if (index < 0)
 8914                 index = -index - 2;
 8915             return scripts[index];
 8916         }
 8917 
 8918         /**
 8919          * Returns the UnicodeScript constant with the given Unicode script
 8920          * name or the script name alias. Script names and their aliases are
 8921          * determined by The Unicode Standard. The files {@code Scripts.txt}
 8922          * and {@code PropertyValueAliases.txt} define script names
 8923          * and the script name aliases for a particular version of the
 8924          * standard. The {@link Character} class specifies the version of
 8925          * the standard that it supports.
 8926          * <p>
 8927          * Character case is ignored for all of the valid script names.
 8928          * The en_US locale's case mapping rules are used to provide
 8929          * case-insensitive string comparisons for script name validation.
 8930          *
 8931          * @param scriptName A {@code UnicodeScript} name.
 8932          * @return The {@code UnicodeScript} constant identified
 8933          *         by {@code scriptName}
 8934          * @throws IllegalArgumentException if {@code scriptName} is an
 8935          *         invalid name
 8936          * @throws NullPointerException if {@code scriptName} is null
 8937          */
 8938         public static final UnicodeScript forName(String scriptName) {
 8939             scriptName = scriptName.toUpperCase(Locale.ENGLISH);
 8940                                  //.replace(' ', '_'));
 8941             UnicodeScript sc = aliases.get(scriptName);
 8942             if (sc != null)
 8943                 return sc;
 8944             return valueOf(scriptName);
 8945         }
 8946     }
 8947 
 8948     /**
 8949      * The value of the {@code Character}.
 8950      *
 8951      * @serial
 8952      */
 8953     private final char value;
 8954 
 8955     /** use serialVersionUID from JDK 1.0.2 for interoperability */
 8956     @java.io.Serial
 8957     private static final long serialVersionUID = 3786198910865385080L;
 8958 
 8959     /**
 8960      * Constructs a newly allocated {@code Character} object that
 8961      * represents the specified {@code char} value.
 8962      *
 8963      * @param  value   the value to be represented by the
 8964      *                  {@code Character} object.
 8965      *
 8966      * @deprecated
 8967      * It is rarely appropriate to use this constructor. The static factory
 8968      * {@link #valueOf(char)} is generally a better choice, as it is
 8969      * likely to yield significantly better space and time performance.
 8970      */
 8971     @Deprecated(since="9", forRemoval = true)
 8972     public Character(char value) {
 8973         this.value = value;
 8974     }
 8975 
 8976     private static final class CharacterCache {
 8977         private CharacterCache(){}
 8978 
 8979         @Stable
 8980         static final Character[] cache;
 8981         static Character[] archivedCache;
 8982 
 8983         static {
 8984             int size = 127 + 1;
 8985 
 8986             // Load and use the archived cache if it exists
 8987             CDS.initializeFromArchive(CharacterCache.class);
 8988             if (archivedCache == null || archivedCache.length != size) {
 8989                 Character[] c = new Character[size];
 8990                 for (int i = 0; i < size; i++) {
 8991                     c[i] = new Character((char) i);
 8992                 }
 8993                 archivedCache = c;
 8994             }
 8995             cache = archivedCache;
 8996         }
 8997     }
 8998 
 8999     /**
 9000      * Returns a {@code Character} instance representing the specified
 9001      * {@code char} value.
 9002      * If a new {@code Character} instance is not required, this method
 9003      * should generally be used in preference to the constructor
 9004      * {@link #Character(char)}, as this method is likely to yield
 9005      * significantly better space and time performance by caching
 9006      * frequently requested values.
 9007      *
 9008      * This method will always cache values in the range {@code
 9009      * '\u005Cu0000'} to {@code '\u005Cu007F'}, inclusive, and may
 9010      * cache other values outside of this range.
 9011      *
 9012      * @param  c a char value.
 9013      * @return a {@code Character} instance representing {@code c}.
 9014      * @since  1.5
 9015      */
 9016     @IntrinsicCandidate
 9017     public static Character valueOf(char c) {
 9018         if (c <= 127) { // must cache
 9019             return CharacterCache.cache[(int)c];
 9020         }
 9021         return new Character(c);
 9022     }
 9023 
 9024     /**
 9025      * Returns the value of this {@code Character} object.
 9026      * @return  the primitive {@code char} value represented by
 9027      *          this object.
 9028      */
 9029     @IntrinsicCandidate
 9030     public char charValue() {
 9031         return value;
 9032     }
 9033 
 9034     /**
 9035      * Returns a hash code for this {@code Character}; equal to the result
 9036      * of invoking {@code charValue()}.
 9037      *
 9038      * @return a hash code value for this {@code Character}
 9039      */
 9040     @Override
 9041     public int hashCode() {
 9042         return Character.hashCode(value);
 9043     }
 9044 
 9045     /**
 9046      * Returns a hash code for a {@code char} value; compatible with
 9047      * {@code Character.hashCode()}.
 9048      *
 9049      * @since 1.8
 9050      *
 9051      * @param value The {@code char} for which to return a hash code.
 9052      * @return a hash code value for a {@code char} value.
 9053      */
 9054     public static int hashCode(char value) {
 9055         return (int)value;
 9056     }
 9057 
 9058     /**
 9059      * Compares this object against the specified object.
 9060      * The result is {@code true} if and only if the argument is not
 9061      * {@code null} and is a {@code Character} object that
 9062      * represents the same {@code char} value as this object.
 9063      *
 9064      * @param   obj   the object to compare with.
 9065      * @return  {@code true} if the objects are the same;
 9066      *          {@code false} otherwise.
 9067      */
 9068     public boolean equals(Object obj) {
 9069         if (obj instanceof Character) {
 9070             return value == ((Character)obj).charValue();
 9071         }
 9072         return false;
 9073     }
 9074 
 9075     /**
 9076      * Returns a {@code String} object representing this
 9077      * {@code Character}'s value.  The result is a string of
 9078      * length 1 whose sole component is the primitive
 9079      * {@code char} value represented by this
 9080      * {@code Character} object.
 9081      *
 9082      * @return  a string representation of this object.
 9083      */
 9084     @Override
 9085     public String toString() {
 9086         return String.valueOf(value);
 9087     }
 9088 
 9089     /**
 9090      * Returns a {@code String} object representing the
 9091      * specified {@code char}.  The result is a string of length
 9092      * 1 consisting solely of the specified {@code char}.
 9093      *
 9094      * @apiNote This method cannot handle <a
 9095      * href="#supplementary"> supplementary characters</a>. To support
 9096      * all Unicode characters, including supplementary characters, use
 9097      * the {@link #toString(int)} method.
 9098      *
 9099      * @param c the {@code char} to be converted
 9100      * @return the string representation of the specified {@code char}
 9101      * @since 1.4
 9102      */
 9103     public static String toString(char c) {
 9104         return String.valueOf(c);
 9105     }
 9106 
 9107     /**
 9108      * Returns a {@code String} object representing the
 9109      * specified character (Unicode code point).  The result is a string of
 9110      * length 1 or 2, consisting solely of the specified {@code codePoint}.
 9111      *
 9112      * @param codePoint the {@code codePoint} to be converted
 9113      * @return the string representation of the specified {@code codePoint}
 9114      * @throws IllegalArgumentException if the specified
 9115      *      {@code codePoint} is not a {@linkplain #isValidCodePoint
 9116      *      valid Unicode code point}.
 9117      * @since 11
 9118      */
 9119     public static String toString(int codePoint) {
 9120         return String.valueOfCodePoint(codePoint);
 9121     }
 9122 
 9123     /**
 9124      * Determines whether the specified code point is a valid
 9125      * <a href="http://www.unicode.org/glossary/#code_point">
 9126      * Unicode code point value</a>.
 9127      *
 9128      * @param  codePoint the Unicode code point to be tested
 9129      * @return {@code true} if the specified code point value is between
 9130      *         {@link #MIN_CODE_POINT} and
 9131      *         {@link #MAX_CODE_POINT} inclusive;
 9132      *         {@code false} otherwise.
 9133      * @since  1.5
 9134      */
 9135     public static boolean isValidCodePoint(int codePoint) {
 9136         // Optimized form of:
 9137         //     codePoint >= MIN_CODE_POINT && codePoint <= MAX_CODE_POINT
 9138         int plane = codePoint >>> 16;
 9139         return plane < ((MAX_CODE_POINT + 1) >>> 16);
 9140     }
 9141 
 9142     /**
 9143      * Determines whether the specified character (Unicode code point)
 9144      * is in the <a href="#BMP">Basic Multilingual Plane (BMP)</a>.
 9145      * Such code points can be represented using a single {@code char}.
 9146      *
 9147      * @param  codePoint the character (Unicode code point) to be tested
 9148      * @return {@code true} if the specified code point is between
 9149      *         {@link #MIN_VALUE} and {@link #MAX_VALUE} inclusive;
 9150      *         {@code false} otherwise.
 9151      * @since  1.7
 9152      */
 9153     public static boolean isBmpCodePoint(int codePoint) {
 9154         return codePoint >>> 16 == 0;
 9155         // Optimized form of:
 9156         //     codePoint >= MIN_VALUE && codePoint <= MAX_VALUE
 9157         // We consistently use logical shift (>>>) to facilitate
 9158         // additional runtime optimizations.
 9159     }
 9160 
 9161     /**
 9162      * Determines whether the specified character (Unicode code point)
 9163      * is in the <a href="#supplementary">supplementary character</a> range.
 9164      *
 9165      * @param  codePoint the character (Unicode code point) to be tested
 9166      * @return {@code true} if the specified code point is between
 9167      *         {@link #MIN_SUPPLEMENTARY_CODE_POINT} and
 9168      *         {@link #MAX_CODE_POINT} inclusive;
 9169      *         {@code false} otherwise.
 9170      * @since  1.5
 9171      */
 9172     public static boolean isSupplementaryCodePoint(int codePoint) {
 9173         return codePoint >= MIN_SUPPLEMENTARY_CODE_POINT
 9174             && codePoint <  MAX_CODE_POINT + 1;
 9175     }
 9176 
 9177     /**
 9178      * Determines if the given {@code char} value is a
 9179      * <a href="http://www.unicode.org/glossary/#high_surrogate_code_unit">
 9180      * Unicode high-surrogate code unit</a>
 9181      * (also known as <i>leading-surrogate code unit</i>).
 9182      *
 9183      * <p>Such values do not represent characters by themselves,
 9184      * but are used in the representation of
 9185      * <a href="#supplementary">supplementary characters</a>
 9186      * in the UTF-16 encoding.
 9187      *
 9188      * @param  ch the {@code char} value to be tested.
 9189      * @return {@code true} if the {@code char} value is between
 9190      *         {@link #MIN_HIGH_SURROGATE} and
 9191      *         {@link #MAX_HIGH_SURROGATE} inclusive;
 9192      *         {@code false} otherwise.
 9193      * @see    Character#isLowSurrogate(char)
 9194      * @see    Character.UnicodeBlock#of(int)
 9195      * @since  1.5
 9196      */
 9197     public static boolean isHighSurrogate(char ch) {
 9198         // Help VM constant-fold; MAX_HIGH_SURROGATE + 1 == MIN_LOW_SURROGATE
 9199         return ch >= MIN_HIGH_SURROGATE && ch < (MAX_HIGH_SURROGATE + 1);
 9200     }
 9201 
 9202     /**
 9203      * Determines if the given {@code char} value is a
 9204      * <a href="http://www.unicode.org/glossary/#low_surrogate_code_unit">
 9205      * Unicode low-surrogate code unit</a>
 9206      * (also known as <i>trailing-surrogate code unit</i>).
 9207      *
 9208      * <p>Such values do not represent characters by themselves,
 9209      * but are used in the representation of
 9210      * <a href="#supplementary">supplementary characters</a>
 9211      * in the UTF-16 encoding.
 9212      *
 9213      * @param  ch the {@code char} value to be tested.
 9214      * @return {@code true} if the {@code char} value is between
 9215      *         {@link #MIN_LOW_SURROGATE} and
 9216      *         {@link #MAX_LOW_SURROGATE} inclusive;
 9217      *         {@code false} otherwise.
 9218      * @see    Character#isHighSurrogate(char)
 9219      * @since  1.5
 9220      */
 9221     public static boolean isLowSurrogate(char ch) {
 9222         return ch >= MIN_LOW_SURROGATE && ch < (MAX_LOW_SURROGATE + 1);
 9223     }
 9224 
 9225     /**
 9226      * Determines if the given {@code char} value is a Unicode
 9227      * <i>surrogate code unit</i>.
 9228      *
 9229      * <p>Such values do not represent characters by themselves,
 9230      * but are used in the representation of
 9231      * <a href="#supplementary">supplementary characters</a>
 9232      * in the UTF-16 encoding.
 9233      *
 9234      * <p>A char value is a surrogate code unit if and only if it is either
 9235      * a {@linkplain #isLowSurrogate(char) low-surrogate code unit} or
 9236      * a {@linkplain #isHighSurrogate(char) high-surrogate code unit}.
 9237      *
 9238      * @param  ch the {@code char} value to be tested.
 9239      * @return {@code true} if the {@code char} value is between
 9240      *         {@link #MIN_SURROGATE} and
 9241      *         {@link #MAX_SURROGATE} inclusive;
 9242      *         {@code false} otherwise.
 9243      * @since  1.7
 9244      */
 9245     public static boolean isSurrogate(char ch) {
 9246         return ch >= MIN_SURROGATE && ch < (MAX_SURROGATE + 1);
 9247     }
 9248 
 9249     /**
 9250      * Determines whether the specified pair of {@code char}
 9251      * values is a valid
 9252      * <a href="http://www.unicode.org/glossary/#surrogate_pair">
 9253      * Unicode surrogate pair</a>.
 9254      *
 9255      * <p>This method is equivalent to the expression:
 9256      * <blockquote><pre>{@code
 9257      * isHighSurrogate(high) && isLowSurrogate(low)
 9258      * }</pre></blockquote>
 9259      *
 9260      * @param  high the high-surrogate code value to be tested
 9261      * @param  low the low-surrogate code value to be tested
 9262      * @return {@code true} if the specified high and
 9263      * low-surrogate code values represent a valid surrogate pair;
 9264      * {@code false} otherwise.
 9265      * @since  1.5
 9266      */
 9267     public static boolean isSurrogatePair(char high, char low) {
 9268         return isHighSurrogate(high) && isLowSurrogate(low);
 9269     }
 9270 
 9271     /**
 9272      * Determines the number of {@code char} values needed to
 9273      * represent the specified character (Unicode code point). If the
 9274      * specified character is equal to or greater than 0x10000, then
 9275      * the method returns 2. Otherwise, the method returns 1.
 9276      *
 9277      * <p>This method doesn't validate the specified character to be a
 9278      * valid Unicode code point. The caller must validate the
 9279      * character value using {@link #isValidCodePoint(int) isValidCodePoint}
 9280      * if necessary.
 9281      *
 9282      * @param   codePoint the character (Unicode code point) to be tested.
 9283      * @return  2 if the character is a valid supplementary character; 1 otherwise.
 9284      * @see     Character#isSupplementaryCodePoint(int)
 9285      * @since   1.5
 9286      */
 9287     public static int charCount(int codePoint) {
 9288         return codePoint >= MIN_SUPPLEMENTARY_CODE_POINT ? 2 : 1;
 9289     }
 9290 
 9291     /**
 9292      * Converts the specified surrogate pair to its supplementary code
 9293      * point value. This method does not validate the specified
 9294      * surrogate pair. The caller must validate it using {@link
 9295      * #isSurrogatePair(char, char) isSurrogatePair} if necessary.
 9296      *
 9297      * @param  high the high-surrogate code unit
 9298      * @param  low the low-surrogate code unit
 9299      * @return the supplementary code point composed from the
 9300      *         specified surrogate pair.
 9301      * @since  1.5
 9302      */
 9303     public static int toCodePoint(char high, char low) {
 9304         // Optimized form of:
 9305         // return ((high - MIN_HIGH_SURROGATE) << 10)
 9306         //         + (low - MIN_LOW_SURROGATE)
 9307         //         + MIN_SUPPLEMENTARY_CODE_POINT;
 9308         return ((high << 10) + low) + (MIN_SUPPLEMENTARY_CODE_POINT
 9309                                        - (MIN_HIGH_SURROGATE << 10)
 9310                                        - MIN_LOW_SURROGATE);
 9311     }
 9312 
 9313     /**
 9314      * Returns the code point at the given index of the
 9315      * {@code CharSequence}. If the {@code char} value at
 9316      * the given index in the {@code CharSequence} is in the
 9317      * high-surrogate range, the following index is less than the
 9318      * length of the {@code CharSequence}, and the
 9319      * {@code char} value at the following index is in the
 9320      * low-surrogate range, then the supplementary code point
 9321      * corresponding to this surrogate pair is returned. Otherwise,
 9322      * the {@code char} value at the given index is returned.
 9323      *
 9324      * @param seq a sequence of {@code char} values (Unicode code
 9325      * units)
 9326      * @param index the index to the {@code char} values (Unicode
 9327      * code units) in {@code seq} to be converted
 9328      * @return the Unicode code point at the given index
 9329      * @throws NullPointerException if {@code seq} is null.
 9330      * @throws IndexOutOfBoundsException if the value
 9331      * {@code index} is negative or not less than
 9332      * {@link CharSequence#length() seq.length()}.
 9333      * @since  1.5
 9334      */
 9335     public static int codePointAt(CharSequence seq, int index) {
 9336         char c1 = seq.charAt(index);
 9337         if (isHighSurrogate(c1) && ++index < seq.length()) {
 9338             char c2 = seq.charAt(index);
 9339             if (isLowSurrogate(c2)) {
 9340                 return toCodePoint(c1, c2);
 9341             }
 9342         }
 9343         return c1;
 9344     }
 9345 
 9346     /**
 9347      * Returns the code point at the given index of the
 9348      * {@code char} array. If the {@code char} value at
 9349      * the given index in the {@code char} array is in the
 9350      * high-surrogate range, the following index is less than the
 9351      * length of the {@code char} array, and the
 9352      * {@code char} value at the following index is in the
 9353      * low-surrogate range, then the supplementary code point
 9354      * corresponding to this surrogate pair is returned. Otherwise,
 9355      * the {@code char} value at the given index is returned.
 9356      *
 9357      * @param a the {@code char} array
 9358      * @param index the index to the {@code char} values (Unicode
 9359      * code units) in the {@code char} array to be converted
 9360      * @return the Unicode code point at the given index
 9361      * @throws NullPointerException if {@code a} is null.
 9362      * @throws IndexOutOfBoundsException if the value
 9363      * {@code index} is negative or not less than
 9364      * the length of the {@code char} array.
 9365      * @since  1.5
 9366      */
 9367     public static int codePointAt(char[] a, int index) {
 9368         return codePointAtImpl(a, index, a.length);
 9369     }
 9370 
 9371     /**
 9372      * Returns the code point at the given index of the
 9373      * {@code char} array, where only array elements with
 9374      * {@code index} less than {@code limit} can be used. If
 9375      * the {@code char} value at the given index in the
 9376      * {@code char} array is in the high-surrogate range, the
 9377      * following index is less than the {@code limit}, and the
 9378      * {@code char} value at the following index is in the
 9379      * low-surrogate range, then the supplementary code point
 9380      * corresponding to this surrogate pair is returned. Otherwise,
 9381      * the {@code char} value at the given index is returned.
 9382      *
 9383      * @param a the {@code char} array
 9384      * @param index the index to the {@code char} values (Unicode
 9385      * code units) in the {@code char} array to be converted
 9386      * @param limit the index after the last array element that
 9387      * can be used in the {@code char} array
 9388      * @return the Unicode code point at the given index
 9389      * @throws NullPointerException if {@code a} is null.
 9390      * @throws IndexOutOfBoundsException if the {@code index}
 9391      * argument is negative or not less than the {@code limit}
 9392      * argument, or if the {@code limit} argument is negative or
 9393      * greater than the length of the {@code char} array.
 9394      * @since  1.5
 9395      */
 9396     public static int codePointAt(char[] a, int index, int limit) {
 9397         if (index >= limit || index < 0 || limit > a.length) {
 9398             throw new IndexOutOfBoundsException();
 9399         }
 9400         return codePointAtImpl(a, index, limit);
 9401     }
 9402 
 9403     // throws ArrayIndexOutOfBoundsException if index out of bounds
 9404     static int codePointAtImpl(char[] a, int index, int limit) {
 9405         char c1 = a[index];
 9406         if (isHighSurrogate(c1) && ++index < limit) {
 9407             char c2 = a[index];
 9408             if (isLowSurrogate(c2)) {
 9409                 return toCodePoint(c1, c2);
 9410             }
 9411         }
 9412         return c1;
 9413     }
 9414 
 9415     /**
 9416      * Returns the code point preceding the given index of the
 9417      * {@code CharSequence}. If the {@code char} value at
 9418      * {@code (index - 1)} in the {@code CharSequence} is in
 9419      * the low-surrogate range, {@code (index - 2)} is not
 9420      * negative, and the {@code char} value at {@code (index - 2)}
 9421      * in the {@code CharSequence} is in the
 9422      * high-surrogate range, then the supplementary code point
 9423      * corresponding to this surrogate pair is returned. Otherwise,
 9424      * the {@code char} value at {@code (index - 1)} is
 9425      * returned.
 9426      *
 9427      * @param seq the {@code CharSequence} instance
 9428      * @param index the index following the code point that should be returned
 9429      * @return the Unicode code point value before the given index.
 9430      * @throws NullPointerException if {@code seq} is null.
 9431      * @throws IndexOutOfBoundsException if the {@code index}
 9432      * argument is less than 1 or greater than {@link
 9433      * CharSequence#length() seq.length()}.
 9434      * @since  1.5
 9435      */
 9436     public static int codePointBefore(CharSequence seq, int index) {
 9437         char c2 = seq.charAt(--index);
 9438         if (isLowSurrogate(c2) && index > 0) {
 9439             char c1 = seq.charAt(--index);
 9440             if (isHighSurrogate(c1)) {
 9441                 return toCodePoint(c1, c2);
 9442             }
 9443         }
 9444         return c2;
 9445     }
 9446 
 9447     /**
 9448      * Returns the code point preceding the given index of the
 9449      * {@code char} array. If the {@code char} value at
 9450      * {@code (index - 1)} in the {@code char} array is in
 9451      * the low-surrogate range, {@code (index - 2)} is not
 9452      * negative, and the {@code char} value at {@code (index - 2)}
 9453      * in the {@code char} array is in the
 9454      * high-surrogate range, then the supplementary code point
 9455      * corresponding to this surrogate pair is returned. Otherwise,
 9456      * the {@code char} value at {@code (index - 1)} is
 9457      * returned.
 9458      *
 9459      * @param a the {@code char} array
 9460      * @param index the index following the code point that should be returned
 9461      * @return the Unicode code point value before the given index.
 9462      * @throws NullPointerException if {@code a} is null.
 9463      * @throws IndexOutOfBoundsException if the {@code index}
 9464      * argument is less than 1 or greater than the length of the
 9465      * {@code char} array
 9466      * @since  1.5
 9467      */
 9468     public static int codePointBefore(char[] a, int index) {
 9469         return codePointBeforeImpl(a, index, 0);
 9470     }
 9471 
 9472     /**
 9473      * Returns the code point preceding the given index of the
 9474      * {@code char} array, where only array elements with
 9475      * {@code index} greater than or equal to {@code start}
 9476      * can be used. If the {@code char} value at {@code (index - 1)}
 9477      * in the {@code char} array is in the
 9478      * low-surrogate range, {@code (index - 2)} is not less than
 9479      * {@code start}, and the {@code char} value at
 9480      * {@code (index - 2)} in the {@code char} array is in
 9481      * the high-surrogate range, then the supplementary code point
 9482      * corresponding to this surrogate pair is returned. Otherwise,
 9483      * the {@code char} value at {@code (index - 1)} is
 9484      * returned.
 9485      *
 9486      * @param a the {@code char} array
 9487      * @param index the index following the code point that should be returned
 9488      * @param start the index of the first array element in the
 9489      * {@code char} array
 9490      * @return the Unicode code point value before the given index.
 9491      * @throws NullPointerException if {@code a} is null.
 9492      * @throws IndexOutOfBoundsException if the {@code index}
 9493      * argument is not greater than the {@code start} argument or
 9494      * is greater than the length of the {@code char} array, or
 9495      * if the {@code start} argument is negative or not less than
 9496      * the length of the {@code char} array.
 9497      * @since  1.5
 9498      */
 9499     public static int codePointBefore(char[] a, int index, int start) {
 9500         if (index <= start || start < 0 || index > a.length) {
 9501             throw new IndexOutOfBoundsException();
 9502         }
 9503         return codePointBeforeImpl(a, index, start);
 9504     }
 9505 
 9506     // throws ArrayIndexOutOfBoundsException if index-1 out of bounds
 9507     static int codePointBeforeImpl(char[] a, int index, int start) {
 9508         char c2 = a[--index];
 9509         if (isLowSurrogate(c2) && index > start) {
 9510             char c1 = a[--index];
 9511             if (isHighSurrogate(c1)) {
 9512                 return toCodePoint(c1, c2);
 9513             }
 9514         }
 9515         return c2;
 9516     }
 9517 
 9518     /**
 9519      * Returns the leading surrogate (a
 9520      * <a href="http://www.unicode.org/glossary/#high_surrogate_code_unit">
 9521      * high surrogate code unit</a>) of the
 9522      * <a href="http://www.unicode.org/glossary/#surrogate_pair">
 9523      * surrogate pair</a>
 9524      * representing the specified supplementary character (Unicode
 9525      * code point) in the UTF-16 encoding.  If the specified character
 9526      * is not a
 9527      * <a href="Character.html#supplementary">supplementary character</a>,
 9528      * an unspecified {@code char} is returned.
 9529      *
 9530      * <p>If
 9531      * {@link #isSupplementaryCodePoint isSupplementaryCodePoint(x)}
 9532      * is {@code true}, then
 9533      * {@link #isHighSurrogate isHighSurrogate}{@code (highSurrogate(x))} and
 9534      * {@link #toCodePoint toCodePoint}{@code (highSurrogate(x), }{@link #lowSurrogate lowSurrogate}{@code (x)) == x}
 9535      * are also always {@code true}.
 9536      *
 9537      * @param   codePoint a supplementary character (Unicode code point)
 9538      * @return  the leading surrogate code unit used to represent the
 9539      *          character in the UTF-16 encoding
 9540      * @since   1.7
 9541      */
 9542     public static char highSurrogate(int codePoint) {
 9543         return (char) ((codePoint >>> 10)
 9544             + (MIN_HIGH_SURROGATE - (MIN_SUPPLEMENTARY_CODE_POINT >>> 10)));
 9545     }
 9546 
 9547     /**
 9548      * Returns the trailing surrogate (a
 9549      * <a href="http://www.unicode.org/glossary/#low_surrogate_code_unit">
 9550      * low surrogate code unit</a>) of the
 9551      * <a href="http://www.unicode.org/glossary/#surrogate_pair">
 9552      * surrogate pair</a>
 9553      * representing the specified supplementary character (Unicode
 9554      * code point) in the UTF-16 encoding.  If the specified character
 9555      * is not a
 9556      * <a href="Character.html#supplementary">supplementary character</a>,
 9557      * an unspecified {@code char} is returned.
 9558      *
 9559      * <p>If
 9560      * {@link #isSupplementaryCodePoint isSupplementaryCodePoint(x)}
 9561      * is {@code true}, then
 9562      * {@link #isLowSurrogate isLowSurrogate}{@code (lowSurrogate(x))} and
 9563      * {@link #toCodePoint toCodePoint}{@code (}{@link #highSurrogate highSurrogate}{@code (x), lowSurrogate(x)) == x}
 9564      * are also always {@code true}.
 9565      *
 9566      * @param   codePoint a supplementary character (Unicode code point)
 9567      * @return  the trailing surrogate code unit used to represent the
 9568      *          character in the UTF-16 encoding
 9569      * @since   1.7
 9570      */
 9571     public static char lowSurrogate(int codePoint) {
 9572         return (char) ((codePoint & 0x3ff) + MIN_LOW_SURROGATE);
 9573     }
 9574 
 9575     /**
 9576      * Converts the specified character (Unicode code point) to its
 9577      * UTF-16 representation. If the specified code point is a BMP
 9578      * (Basic Multilingual Plane or Plane 0) value, the same value is
 9579      * stored in {@code dst[dstIndex]}, and 1 is returned. If the
 9580      * specified code point is a supplementary character, its
 9581      * surrogate values are stored in {@code dst[dstIndex]}
 9582      * (high-surrogate) and {@code dst[dstIndex+1]}
 9583      * (low-surrogate), and 2 is returned.
 9584      *
 9585      * @param  codePoint the character (Unicode code point) to be converted.
 9586      * @param  dst an array of {@code char} in which the
 9587      * {@code codePoint}'s UTF-16 value is stored.
 9588      * @param dstIndex the start index into the {@code dst}
 9589      * array where the converted value is stored.
 9590      * @return 1 if the code point is a BMP code point, 2 if the
 9591      * code point is a supplementary code point.
 9592      * @throws IllegalArgumentException if the specified
 9593      * {@code codePoint} is not a valid Unicode code point.
 9594      * @throws NullPointerException if the specified {@code dst} is null.
 9595      * @throws IndexOutOfBoundsException if {@code dstIndex}
 9596      * is negative or not less than {@code dst.length}, or if
 9597      * {@code dst} at {@code dstIndex} doesn't have enough
 9598      * array element(s) to store the resulting {@code char}
 9599      * value(s). (If {@code dstIndex} is equal to
 9600      * {@code dst.length-1} and the specified
 9601      * {@code codePoint} is a supplementary character, the
 9602      * high-surrogate value is not stored in
 9603      * {@code dst[dstIndex]}.)
 9604      * @since  1.5
 9605      */
 9606     public static int toChars(int codePoint, char[] dst, int dstIndex) {
 9607         if (isBmpCodePoint(codePoint)) {
 9608             dst[dstIndex] = (char) codePoint;
 9609             return 1;
 9610         } else if (isValidCodePoint(codePoint)) {
 9611             toSurrogates(codePoint, dst, dstIndex);
 9612             return 2;
 9613         } else {
 9614             throw new IllegalArgumentException(
 9615                 String.format("Not a valid Unicode code point: 0x%X", codePoint));
 9616         }
 9617     }
 9618 
 9619     /**
 9620      * Converts the specified character (Unicode code point) to its
 9621      * UTF-16 representation stored in a {@code char} array. If
 9622      * the specified code point is a BMP (Basic Multilingual Plane or
 9623      * Plane 0) value, the resulting {@code char} array has
 9624      * the same value as {@code codePoint}. If the specified code
 9625      * point is a supplementary code point, the resulting
 9626      * {@code char} array has the corresponding surrogate pair.
 9627      *
 9628      * @param  codePoint a Unicode code point
 9629      * @return a {@code char} array having
 9630      *         {@code codePoint}'s UTF-16 representation.
 9631      * @throws IllegalArgumentException if the specified
 9632      * {@code codePoint} is not a valid Unicode code point.
 9633      * @since  1.5
 9634      */
 9635     public static char[] toChars(int codePoint) {
 9636         if (isBmpCodePoint(codePoint)) {
 9637             return new char[] { (char) codePoint };
 9638         } else if (isValidCodePoint(codePoint)) {
 9639             char[] result = new char[2];
 9640             toSurrogates(codePoint, result, 0);
 9641             return result;
 9642         } else {
 9643             throw new IllegalArgumentException(
 9644                 String.format("Not a valid Unicode code point: 0x%X", codePoint));
 9645         }
 9646     }
 9647 
 9648     static void toSurrogates(int codePoint, char[] dst, int index) {
 9649         // We write elements "backwards" to guarantee all-or-nothing
 9650         dst[index+1] = lowSurrogate(codePoint);
 9651         dst[index] = highSurrogate(codePoint);
 9652     }
 9653 
 9654     /**
 9655      * Returns the number of Unicode code points in the text range of
 9656      * the specified char sequence. The text range begins at the
 9657      * specified {@code beginIndex} and extends to the
 9658      * {@code char} at index {@code endIndex - 1}. Thus the
 9659      * length (in {@code char}s) of the text range is
 9660      * {@code endIndex-beginIndex}. Unpaired surrogates within
 9661      * the text range count as one code point each.
 9662      *
 9663      * @param seq the char sequence
 9664      * @param beginIndex the index to the first {@code char} of
 9665      * the text range.
 9666      * @param endIndex the index after the last {@code char} of
 9667      * the text range.
 9668      * @return the number of Unicode code points in the specified text
 9669      * range
 9670      * @throws NullPointerException if {@code seq} is null.
 9671      * @throws IndexOutOfBoundsException if the
 9672      * {@code beginIndex} is negative, or {@code endIndex}
 9673      * is larger than the length of the given sequence, or
 9674      * {@code beginIndex} is larger than {@code endIndex}.
 9675      * @since  1.5
 9676      */
 9677     public static int codePointCount(CharSequence seq, int beginIndex, int endIndex) {
 9678         Objects.checkFromToIndex(beginIndex, endIndex, seq.length());
 9679         int n = endIndex - beginIndex;
 9680         for (int i = beginIndex; i < endIndex; ) {
 9681             if (isHighSurrogate(seq.charAt(i++)) && i < endIndex &&
 9682                 isLowSurrogate(seq.charAt(i))) {
 9683                 n--;
 9684                 i++;
 9685             }
 9686         }
 9687         return n;
 9688     }
 9689 
 9690     /**
 9691      * Returns the number of Unicode code points in a subarray of the
 9692      * {@code char} array argument. The {@code offset}
 9693      * argument is the index of the first {@code char} of the
 9694      * subarray and the {@code count} argument specifies the
 9695      * length of the subarray in {@code char}s. Unpaired
 9696      * surrogates within the subarray count as one code point each.
 9697      *
 9698      * @param a the {@code char} array
 9699      * @param offset the index of the first {@code char} in the
 9700      * given {@code char} array
 9701      * @param count the length of the subarray in {@code char}s
 9702      * @return the number of Unicode code points in the specified subarray
 9703      * @throws NullPointerException if {@code a} is null.
 9704      * @throws IndexOutOfBoundsException if {@code offset} or
 9705      * {@code count} is negative, or if {@code offset +
 9706      * count} is larger than the length of the given array.
 9707      * @since  1.5
 9708      */
 9709     public static int codePointCount(char[] a, int offset, int count) {
 9710         Objects.checkFromIndexSize(offset, count, a.length);
 9711         return codePointCountImpl(a, offset, count);
 9712     }
 9713 
 9714     static int codePointCountImpl(char[] a, int offset, int count) {
 9715         int endIndex = offset + count;
 9716         int n = count;
 9717         for (int i = offset; i < endIndex; ) {
 9718             if (isHighSurrogate(a[i++]) && i < endIndex &&
 9719                 isLowSurrogate(a[i])) {
 9720                 n--;
 9721                 i++;
 9722             }
 9723         }
 9724         return n;
 9725     }
 9726 
 9727     /**
 9728      * Returns the index within the given char sequence that is offset
 9729      * from the given {@code index} by {@code codePointOffset}
 9730      * code points. Unpaired surrogates within the text range given by
 9731      * {@code index} and {@code codePointOffset} count as
 9732      * one code point each.
 9733      *
 9734      * @param seq the char sequence
 9735      * @param index the index to be offset
 9736      * @param codePointOffset the offset in code points
 9737      * @return the index within the char sequence
 9738      * @throws NullPointerException if {@code seq} is null.
 9739      * @throws IndexOutOfBoundsException if {@code index}
 9740      *   is negative or larger than the length of the char sequence,
 9741      *   or if {@code codePointOffset} is positive and the
 9742      *   subsequence starting with {@code index} has fewer than
 9743      *   {@code codePointOffset} code points, or if
 9744      *   {@code codePointOffset} is negative and the subsequence
 9745      *   before {@code index} has fewer than the absolute value
 9746      *   of {@code codePointOffset} code points.
 9747      * @since 1.5
 9748      */
 9749     public static int offsetByCodePoints(CharSequence seq, int index,
 9750                                          int codePointOffset) {
 9751         int length = seq.length();
 9752         if (index < 0 || index > length) {
 9753             throw new IndexOutOfBoundsException();
 9754         }
 9755 
 9756         int x = index;
 9757         if (codePointOffset >= 0) {
 9758             int i;
 9759             for (i = 0; x < length && i < codePointOffset; i++) {
 9760                 if (isHighSurrogate(seq.charAt(x++)) && x < length &&
 9761                     isLowSurrogate(seq.charAt(x))) {
 9762                     x++;
 9763                 }
 9764             }
 9765             if (i < codePointOffset) {
 9766                 throw new IndexOutOfBoundsException();
 9767             }
 9768         } else {
 9769             int i;
 9770             for (i = codePointOffset; x > 0 && i < 0; i++) {
 9771                 if (isLowSurrogate(seq.charAt(--x)) && x > 0 &&
 9772                     isHighSurrogate(seq.charAt(x-1))) {
 9773                     x--;
 9774                 }
 9775             }
 9776             if (i < 0) {
 9777                 throw new IndexOutOfBoundsException();
 9778             }
 9779         }
 9780         return x;
 9781     }
 9782 
 9783     /**
 9784      * Returns the index within the given {@code char} subarray
 9785      * that is offset from the given {@code index} by
 9786      * {@code codePointOffset} code points. The
 9787      * {@code start} and {@code count} arguments specify a
 9788      * subarray of the {@code char} array. Unpaired surrogates
 9789      * within the text range given by {@code index} and
 9790      * {@code codePointOffset} count as one code point each.
 9791      *
 9792      * @param a the {@code char} array
 9793      * @param start the index of the first {@code char} of the
 9794      * subarray
 9795      * @param count the length of the subarray in {@code char}s
 9796      * @param index the index to be offset
 9797      * @param codePointOffset the offset in code points
 9798      * @return the index within the subarray
 9799      * @throws NullPointerException if {@code a} is null.
 9800      * @throws IndexOutOfBoundsException
 9801      *   if {@code start} or {@code count} is negative,
 9802      *   or if {@code start + count} is larger than the length of
 9803      *   the given array,
 9804      *   or if {@code index} is less than {@code start} or
 9805      *   larger then {@code start + count},
 9806      *   or if {@code codePointOffset} is positive and the text range
 9807      *   starting with {@code index} and ending with {@code start + count - 1}
 9808      *   has fewer than {@code codePointOffset} code
 9809      *   points,
 9810      *   or if {@code codePointOffset} is negative and the text range
 9811      *   starting with {@code start} and ending with {@code index - 1}
 9812      *   has fewer than the absolute value of
 9813      *   {@code codePointOffset} code points.
 9814      * @since 1.5
 9815      */
 9816     public static int offsetByCodePoints(char[] a, int start, int count,
 9817                                          int index, int codePointOffset) {
 9818         if (count > a.length-start || start < 0 || count < 0
 9819             || index < start || index > start+count) {
 9820             throw new IndexOutOfBoundsException();
 9821         }
 9822         return offsetByCodePointsImpl(a, start, count, index, codePointOffset);
 9823     }
 9824 
 9825     static int offsetByCodePointsImpl(char[]a, int start, int count,
 9826                                       int index, int codePointOffset) {
 9827         int x = index;
 9828         if (codePointOffset >= 0) {
 9829             int limit = start + count;
 9830             int i;
 9831             for (i = 0; x < limit && i < codePointOffset; i++) {
 9832                 if (isHighSurrogate(a[x++]) && x < limit &&
 9833                     isLowSurrogate(a[x])) {
 9834                     x++;
 9835                 }
 9836             }
 9837             if (i < codePointOffset) {
 9838                 throw new IndexOutOfBoundsException();
 9839             }
 9840         } else {
 9841             int i;
 9842             for (i = codePointOffset; x > start && i < 0; i++) {
 9843                 if (isLowSurrogate(a[--x]) && x > start &&
 9844                     isHighSurrogate(a[x-1])) {
 9845                     x--;
 9846                 }
 9847             }
 9848             if (i < 0) {
 9849                 throw new IndexOutOfBoundsException();
 9850             }
 9851         }
 9852         return x;
 9853     }
 9854 
 9855     /**
 9856      * Determines if the specified character is a lowercase character.
 9857      * <p>
 9858      * A character is lowercase if its general category type, provided
 9859      * by {@code Character.getType(ch)}, is
 9860      * {@code LOWERCASE_LETTER}, or it has contributory property
 9861      * Other_Lowercase as defined by the Unicode Standard.
 9862      * <p>
 9863      * The following are examples of lowercase characters:
 9864      * <blockquote><pre>
 9865      * a b c d e f g h i j k l m n o p q r s t u v w x y z
 9866      * '&#92;u00DF' '&#92;u00E0' '&#92;u00E1' '&#92;u00E2' '&#92;u00E3' '&#92;u00E4' '&#92;u00E5' '&#92;u00E6'
 9867      * '&#92;u00E7' '&#92;u00E8' '&#92;u00E9' '&#92;u00EA' '&#92;u00EB' '&#92;u00EC' '&#92;u00ED' '&#92;u00EE'
 9868      * '&#92;u00EF' '&#92;u00F0' '&#92;u00F1' '&#92;u00F2' '&#92;u00F3' '&#92;u00F4' '&#92;u00F5' '&#92;u00F6'
 9869      * '&#92;u00F8' '&#92;u00F9' '&#92;u00FA' '&#92;u00FB' '&#92;u00FC' '&#92;u00FD' '&#92;u00FE' '&#92;u00FF'
 9870      * </pre></blockquote>
 9871      * <p> Many other Unicode characters are lowercase too.
 9872      *
 9873      * <p><b>Note:</b> This method cannot handle <a
 9874      * href="#supplementary"> supplementary characters</a>. To support
 9875      * all Unicode characters, including supplementary characters, use
 9876      * the {@link #isLowerCase(int)} method.
 9877      *
 9878      * @param   ch   the character to be tested.
 9879      * @return  {@code true} if the character is lowercase;
 9880      *          {@code false} otherwise.
 9881      * @see     Character#isLowerCase(char)
 9882      * @see     Character#isTitleCase(char)
 9883      * @see     Character#toLowerCase(char)
 9884      * @see     Character#getType(char)
 9885      */
 9886     public static boolean isLowerCase(char ch) {
 9887         return isLowerCase((int)ch);
 9888     }
 9889 
 9890     /**
 9891      * Determines if the specified character (Unicode code point) is a
 9892      * lowercase character.
 9893      * <p>
 9894      * A character is lowercase if its general category type, provided
 9895      * by {@link Character#getType getType(codePoint)}, is
 9896      * {@code LOWERCASE_LETTER}, or it has contributory property
 9897      * Other_Lowercase as defined by the Unicode Standard.
 9898      * <p>
 9899      * The following are examples of lowercase characters:
 9900      * <blockquote><pre>
 9901      * a b c d e f g h i j k l m n o p q r s t u v w x y z
 9902      * '&#92;u00DF' '&#92;u00E0' '&#92;u00E1' '&#92;u00E2' '&#92;u00E3' '&#92;u00E4' '&#92;u00E5' '&#92;u00E6'
 9903      * '&#92;u00E7' '&#92;u00E8' '&#92;u00E9' '&#92;u00EA' '&#92;u00EB' '&#92;u00EC' '&#92;u00ED' '&#92;u00EE'
 9904      * '&#92;u00EF' '&#92;u00F0' '&#92;u00F1' '&#92;u00F2' '&#92;u00F3' '&#92;u00F4' '&#92;u00F5' '&#92;u00F6'
 9905      * '&#92;u00F8' '&#92;u00F9' '&#92;u00FA' '&#92;u00FB' '&#92;u00FC' '&#92;u00FD' '&#92;u00FE' '&#92;u00FF'
 9906      * </pre></blockquote>
 9907      * <p> Many other Unicode characters are lowercase too.
 9908      *
 9909      * @param   codePoint the character (Unicode code point) to be tested.
 9910      * @return  {@code true} if the character is lowercase;
 9911      *          {@code false} otherwise.
 9912      * @see     Character#isLowerCase(int)
 9913      * @see     Character#isTitleCase(int)
 9914      * @see     Character#toLowerCase(int)
 9915      * @see     Character#getType(int)
 9916      * @since   1.5
 9917      */
 9918     public static boolean isLowerCase(int codePoint) {
 9919         return CharacterData.of(codePoint).isLowerCase(codePoint);
 9920     }
 9921 
 9922     /**
 9923      * Determines if the specified character is an uppercase character.
 9924      * <p>
 9925      * A character is uppercase if its general category type, provided by
 9926      * {@code Character.getType(ch)}, is {@code UPPERCASE_LETTER}.
 9927      * or it has contributory property Other_Uppercase as defined by the Unicode Standard.
 9928      * <p>
 9929      * The following are examples of uppercase characters:
 9930      * <blockquote><pre>
 9931      * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
 9932      * '&#92;u00C0' '&#92;u00C1' '&#92;u00C2' '&#92;u00C3' '&#92;u00C4' '&#92;u00C5' '&#92;u00C6' '&#92;u00C7'
 9933      * '&#92;u00C8' '&#92;u00C9' '&#92;u00CA' '&#92;u00CB' '&#92;u00CC' '&#92;u00CD' '&#92;u00CE' '&#92;u00CF'
 9934      * '&#92;u00D0' '&#92;u00D1' '&#92;u00D2' '&#92;u00D3' '&#92;u00D4' '&#92;u00D5' '&#92;u00D6' '&#92;u00D8'
 9935      * '&#92;u00D9' '&#92;u00DA' '&#92;u00DB' '&#92;u00DC' '&#92;u00DD' '&#92;u00DE'
 9936      * </pre></blockquote>
 9937      * <p> Many other Unicode characters are uppercase too.
 9938      *
 9939      * <p><b>Note:</b> This method cannot handle <a
 9940      * href="#supplementary"> supplementary characters</a>. To support
 9941      * all Unicode characters, including supplementary characters, use
 9942      * the {@link #isUpperCase(int)} method.
 9943      *
 9944      * @param   ch   the character to be tested.
 9945      * @return  {@code true} if the character is uppercase;
 9946      *          {@code false} otherwise.
 9947      * @see     Character#isLowerCase(char)
 9948      * @see     Character#isTitleCase(char)
 9949      * @see     Character#toUpperCase(char)
 9950      * @see     Character#getType(char)
 9951      * @since   1.0
 9952      */
 9953     public static boolean isUpperCase(char ch) {
 9954         return isUpperCase((int)ch);
 9955     }
 9956 
 9957     /**
 9958      * Determines if the specified character (Unicode code point) is an uppercase character.
 9959      * <p>
 9960      * A character is uppercase if its general category type, provided by
 9961      * {@link Character#getType(int) getType(codePoint)}, is {@code UPPERCASE_LETTER},
 9962      * or it has contributory property Other_Uppercase as defined by the Unicode Standard.
 9963      * <p>
 9964      * The following are examples of uppercase characters:
 9965      * <blockquote><pre>
 9966      * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
 9967      * '&#92;u00C0' '&#92;u00C1' '&#92;u00C2' '&#92;u00C3' '&#92;u00C4' '&#92;u00C5' '&#92;u00C6' '&#92;u00C7'
 9968      * '&#92;u00C8' '&#92;u00C9' '&#92;u00CA' '&#92;u00CB' '&#92;u00CC' '&#92;u00CD' '&#92;u00CE' '&#92;u00CF'
 9969      * '&#92;u00D0' '&#92;u00D1' '&#92;u00D2' '&#92;u00D3' '&#92;u00D4' '&#92;u00D5' '&#92;u00D6' '&#92;u00D8'
 9970      * '&#92;u00D9' '&#92;u00DA' '&#92;u00DB' '&#92;u00DC' '&#92;u00DD' '&#92;u00DE'
 9971      * </pre></blockquote>
 9972      * <p> Many other Unicode characters are uppercase too.
 9973      *
 9974      * @param   codePoint the character (Unicode code point) to be tested.
 9975      * @return  {@code true} if the character is uppercase;
 9976      *          {@code false} otherwise.
 9977      * @see     Character#isLowerCase(int)
 9978      * @see     Character#isTitleCase(int)
 9979      * @see     Character#toUpperCase(int)
 9980      * @see     Character#getType(int)
 9981      * @since   1.5
 9982      */
 9983     public static boolean isUpperCase(int codePoint) {
 9984         return CharacterData.of(codePoint).isUpperCase(codePoint);
 9985     }
 9986 
 9987     /**
 9988      * Determines if the specified character is a titlecase character.
 9989      * <p>
 9990      * A character is a titlecase character if its general
 9991      * category type, provided by {@code Character.getType(ch)},
 9992      * is {@code TITLECASE_LETTER}.
 9993      * <p>
 9994      * Some characters look like pairs of Latin letters. For example, there
 9995      * is an uppercase letter that looks like "LJ" and has a corresponding
 9996      * lowercase letter that looks like "lj". A third form, which looks like "Lj",
 9997      * is the appropriate form to use when rendering a word in lowercase
 9998      * with initial capitals, as for a book title.
 9999      * <p>
10000      * These are some of the Unicode characters for which this method returns
10001      * {@code true}:
10002      * <ul>
10003      * <li>{@code LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}
10004      * <li>{@code LATIN CAPITAL LETTER L WITH SMALL LETTER J}
10005      * <li>{@code LATIN CAPITAL LETTER N WITH SMALL LETTER J}
10006      * <li>{@code LATIN CAPITAL LETTER D WITH SMALL LETTER Z}
10007      * </ul>
10008      * <p> Many other Unicode characters are titlecase too.
10009      *
10010      * <p><b>Note:</b> This method cannot handle <a
10011      * href="#supplementary"> supplementary characters</a>. To support
10012      * all Unicode characters, including supplementary characters, use
10013      * the {@link #isTitleCase(int)} method.
10014      *
10015      * @param   ch   the character to be tested.
10016      * @return  {@code true} if the character is titlecase;
10017      *          {@code false} otherwise.
10018      * @see     Character#isLowerCase(char)
10019      * @see     Character#isUpperCase(char)
10020      * @see     Character#toTitleCase(char)
10021      * @see     Character#getType(char)
10022      * @since   1.0.2
10023      */
10024     public static boolean isTitleCase(char ch) {
10025         return isTitleCase((int)ch);
10026     }
10027 
10028     /**
10029      * Determines if the specified character (Unicode code point) is a titlecase character.
10030      * <p>
10031      * A character is a titlecase character if its general
10032      * category type, provided by {@link Character#getType(int) getType(codePoint)},
10033      * is {@code TITLECASE_LETTER}.
10034      * <p>
10035      * Some characters look like pairs of Latin letters. For example, there
10036      * is an uppercase letter that looks like "LJ" and has a corresponding
10037      * lowercase letter that looks like "lj". A third form, which looks like "Lj",
10038      * is the appropriate form to use when rendering a word in lowercase
10039      * with initial capitals, as for a book title.
10040      * <p>
10041      * These are some of the Unicode characters for which this method returns
10042      * {@code true}:
10043      * <ul>
10044      * <li>{@code LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}
10045      * <li>{@code LATIN CAPITAL LETTER L WITH SMALL LETTER J}
10046      * <li>{@code LATIN CAPITAL LETTER N WITH SMALL LETTER J}
10047      * <li>{@code LATIN CAPITAL LETTER D WITH SMALL LETTER Z}
10048      * </ul>
10049      * <p> Many other Unicode characters are titlecase too.
10050      *
10051      * @param   codePoint the character (Unicode code point) to be tested.
10052      * @return  {@code true} if the character is titlecase;
10053      *          {@code false} otherwise.
10054      * @see     Character#isLowerCase(int)
10055      * @see     Character#isUpperCase(int)
10056      * @see     Character#toTitleCase(int)
10057      * @see     Character#getType(int)
10058      * @since   1.5
10059      */
10060     public static boolean isTitleCase(int codePoint) {
10061         return getType(codePoint) == Character.TITLECASE_LETTER;
10062     }
10063 
10064     /**
10065      * Determines if the specified character is a digit.
10066      * <p>
10067      * A character is a digit if its general category type, provided
10068      * by {@code Character.getType(ch)}, is
10069      * {@code DECIMAL_DIGIT_NUMBER}.
10070      * <p>
10071      * Some Unicode character ranges that contain digits:
10072      * <ul>
10073      * <li>{@code '\u005Cu0030'} through {@code '\u005Cu0039'},
10074      *     ISO-LATIN-1 digits ({@code '0'} through {@code '9'})
10075      * <li>{@code '\u005Cu0660'} through {@code '\u005Cu0669'},
10076      *     Arabic-Indic digits
10077      * <li>{@code '\u005Cu06F0'} through {@code '\u005Cu06F9'},
10078      *     Extended Arabic-Indic digits
10079      * <li>{@code '\u005Cu0966'} through {@code '\u005Cu096F'},
10080      *     Devanagari digits
10081      * <li>{@code '\u005CuFF10'} through {@code '\u005CuFF19'},
10082      *     Fullwidth digits
10083      * </ul>
10084      *
10085      * Many other character ranges contain digits as well.
10086      *
10087      * <p><b>Note:</b> This method cannot handle <a
10088      * href="#supplementary"> supplementary characters</a>. To support
10089      * all Unicode characters, including supplementary characters, use
10090      * the {@link #isDigit(int)} method.
10091      *
10092      * @param   ch   the character to be tested.
10093      * @return  {@code true} if the character is a digit;
10094      *          {@code false} otherwise.
10095      * @see     Character#digit(char, int)
10096      * @see     Character#forDigit(int, int)
10097      * @see     Character#getType(char)
10098      */
10099     public static boolean isDigit(char ch) {
10100         return isDigit((int)ch);
10101     }
10102 
10103     /**
10104      * Determines if the specified character (Unicode code point) is a digit.
10105      * <p>
10106      * A character is a digit if its general category type, provided
10107      * by {@link Character#getType(int) getType(codePoint)}, is
10108      * {@code DECIMAL_DIGIT_NUMBER}.
10109      * <p>
10110      * Some Unicode character ranges that contain digits:
10111      * <ul>
10112      * <li>{@code '\u005Cu0030'} through {@code '\u005Cu0039'},
10113      *     ISO-LATIN-1 digits ({@code '0'} through {@code '9'})
10114      * <li>{@code '\u005Cu0660'} through {@code '\u005Cu0669'},
10115      *     Arabic-Indic digits
10116      * <li>{@code '\u005Cu06F0'} through {@code '\u005Cu06F9'},
10117      *     Extended Arabic-Indic digits
10118      * <li>{@code '\u005Cu0966'} through {@code '\u005Cu096F'},
10119      *     Devanagari digits
10120      * <li>{@code '\u005CuFF10'} through {@code '\u005CuFF19'},
10121      *     Fullwidth digits
10122      * </ul>
10123      *
10124      * Many other character ranges contain digits as well.
10125      *
10126      * @param   codePoint the character (Unicode code point) to be tested.
10127      * @return  {@code true} if the character is a digit;
10128      *          {@code false} otherwise.
10129      * @see     Character#forDigit(int, int)
10130      * @see     Character#getType(int)
10131      * @since   1.5
10132      */
10133     public static boolean isDigit(int codePoint) {
10134         return CharacterData.of(codePoint).isDigit(codePoint);
10135     }
10136 
10137     /**
10138      * Determines if a character is defined in Unicode.
10139      * <p>
10140      * A character is defined if at least one of the following is true:
10141      * <ul>
10142      * <li>It has an entry in the UnicodeData file.
10143      * <li>It has a value in a range defined by the UnicodeData file.
10144      * </ul>
10145      *
10146      * <p><b>Note:</b> This method cannot handle <a
10147      * href="#supplementary"> supplementary characters</a>. To support
10148      * all Unicode characters, including supplementary characters, use
10149      * the {@link #isDefined(int)} method.
10150      *
10151      * @param   ch   the character to be tested
10152      * @return  {@code true} if the character has a defined meaning
10153      *          in Unicode; {@code false} otherwise.
10154      * @see     Character#isDigit(char)
10155      * @see     Character#isLetter(char)
10156      * @see     Character#isLetterOrDigit(char)
10157      * @see     Character#isLowerCase(char)
10158      * @see     Character#isTitleCase(char)
10159      * @see     Character#isUpperCase(char)
10160      * @since   1.0.2
10161      */
10162     public static boolean isDefined(char ch) {
10163         return isDefined((int)ch);
10164     }
10165 
10166     /**
10167      * Determines if a character (Unicode code point) is defined in Unicode.
10168      * <p>
10169      * A character is defined if at least one of the following is true:
10170      * <ul>
10171      * <li>It has an entry in the UnicodeData file.
10172      * <li>It has a value in a range defined by the UnicodeData file.
10173      * </ul>
10174      *
10175      * @param   codePoint the character (Unicode code point) to be tested.
10176      * @return  {@code true} if the character has a defined meaning
10177      *          in Unicode; {@code false} otherwise.
10178      * @see     Character#isDigit(int)
10179      * @see     Character#isLetter(int)
10180      * @see     Character#isLetterOrDigit(int)
10181      * @see     Character#isLowerCase(int)
10182      * @see     Character#isTitleCase(int)
10183      * @see     Character#isUpperCase(int)
10184      * @since   1.5
10185      */
10186     public static boolean isDefined(int codePoint) {
10187         return getType(codePoint) != Character.UNASSIGNED;
10188     }
10189 
10190     /**
10191      * Determines if the specified character is a letter.
10192      * <p>
10193      * A character is considered to be a letter if its general
10194      * category type, provided by {@code Character.getType(ch)},
10195      * is any of the following:
10196      * <ul>
10197      * <li> {@code UPPERCASE_LETTER}
10198      * <li> {@code LOWERCASE_LETTER}
10199      * <li> {@code TITLECASE_LETTER}
10200      * <li> {@code MODIFIER_LETTER}
10201      * <li> {@code OTHER_LETTER}
10202      * </ul>
10203      *
10204      * Not all letters have case. Many characters are
10205      * letters but are neither uppercase nor lowercase nor titlecase.
10206      *
10207      * <p><b>Note:</b> This method cannot handle <a
10208      * href="#supplementary"> supplementary characters</a>. To support
10209      * all Unicode characters, including supplementary characters, use
10210      * the {@link #isLetter(int)} method.
10211      *
10212      * @param   ch   the character to be tested.
10213      * @return  {@code true} if the character is a letter;
10214      *          {@code false} otherwise.
10215      * @see     Character#isDigit(char)
10216      * @see     Character#isJavaIdentifierStart(char)
10217      * @see     Character#isJavaLetter(char)
10218      * @see     Character#isJavaLetterOrDigit(char)
10219      * @see     Character#isLetterOrDigit(char)
10220      * @see     Character#isLowerCase(char)
10221      * @see     Character#isTitleCase(char)
10222      * @see     Character#isUnicodeIdentifierStart(char)
10223      * @see     Character#isUpperCase(char)
10224      */
10225     public static boolean isLetter(char ch) {
10226         return isLetter((int)ch);
10227     }
10228 
10229     /**
10230      * Determines if the specified character (Unicode code point) is a letter.
10231      * <p>
10232      * A character is considered to be a letter if its general
10233      * category type, provided by {@link Character#getType(int) getType(codePoint)},
10234      * is any of the following:
10235      * <ul>
10236      * <li> {@code UPPERCASE_LETTER}
10237      * <li> {@code LOWERCASE_LETTER}
10238      * <li> {@code TITLECASE_LETTER}
10239      * <li> {@code MODIFIER_LETTER}
10240      * <li> {@code OTHER_LETTER}
10241      * </ul>
10242      *
10243      * Not all letters have case. Many characters are
10244      * letters but are neither uppercase nor lowercase nor titlecase.
10245      *
10246      * @param   codePoint the character (Unicode code point) to be tested.
10247      * @return  {@code true} if the character is a letter;
10248      *          {@code false} otherwise.
10249      * @see     Character#isDigit(int)
10250      * @see     Character#isJavaIdentifierStart(int)
10251      * @see     Character#isLetterOrDigit(int)
10252      * @see     Character#isLowerCase(int)
10253      * @see     Character#isTitleCase(int)
10254      * @see     Character#isUnicodeIdentifierStart(int)
10255      * @see     Character#isUpperCase(int)
10256      * @since   1.5
10257      */
10258     public static boolean isLetter(int codePoint) {
10259         return ((((1 << Character.UPPERCASE_LETTER) |
10260             (1 << Character.LOWERCASE_LETTER) |
10261             (1 << Character.TITLECASE_LETTER) |
10262             (1 << Character.MODIFIER_LETTER) |
10263             (1 << Character.OTHER_LETTER)) >> getType(codePoint)) & 1)
10264             != 0;
10265     }
10266 
10267     /**
10268      * Determines if the specified character is a letter or digit.
10269      * <p>
10270      * A character is considered to be a letter or digit if either
10271      * {@code Character.isLetter(char ch)} or
10272      * {@code Character.isDigit(char ch)} returns
10273      * {@code true} for the character.
10274      *
10275      * <p><b>Note:</b> This method cannot handle <a
10276      * href="#supplementary"> supplementary characters</a>. To support
10277      * all Unicode characters, including supplementary characters, use
10278      * the {@link #isLetterOrDigit(int)} method.
10279      *
10280      * @param   ch   the character to be tested.
10281      * @return  {@code true} if the character is a letter or digit;
10282      *          {@code false} otherwise.
10283      * @see     Character#isDigit(char)
10284      * @see     Character#isJavaIdentifierPart(char)
10285      * @see     Character#isJavaLetter(char)
10286      * @see     Character#isJavaLetterOrDigit(char)
10287      * @see     Character#isLetter(char)
10288      * @see     Character#isUnicodeIdentifierPart(char)
10289      * @since   1.0.2
10290      */
10291     public static boolean isLetterOrDigit(char ch) {
10292         return isLetterOrDigit((int)ch);
10293     }
10294 
10295     /**
10296      * Determines if the specified character (Unicode code point) is a letter or digit.
10297      * <p>
10298      * A character is considered to be a letter or digit if either
10299      * {@link #isLetter(int) isLetter(codePoint)} or
10300      * {@link #isDigit(int) isDigit(codePoint)} returns
10301      * {@code true} for the character.
10302      *
10303      * @param   codePoint the character (Unicode code point) to be tested.
10304      * @return  {@code true} if the character is a letter or digit;
10305      *          {@code false} otherwise.
10306      * @see     Character#isDigit(int)
10307      * @see     Character#isJavaIdentifierPart(int)
10308      * @see     Character#isLetter(int)
10309      * @see     Character#isUnicodeIdentifierPart(int)
10310      * @since   1.5
10311      */
10312     public static boolean isLetterOrDigit(int codePoint) {
10313         return ((((1 << Character.UPPERCASE_LETTER) |
10314             (1 << Character.LOWERCASE_LETTER) |
10315             (1 << Character.TITLECASE_LETTER) |
10316             (1 << Character.MODIFIER_LETTER) |
10317             (1 << Character.OTHER_LETTER) |
10318             (1 << Character.DECIMAL_DIGIT_NUMBER)) >> getType(codePoint)) & 1)
10319             != 0;
10320     }
10321 
10322     /**
10323      * Determines if the specified character is permissible as the first
10324      * character in a Java identifier.
10325      * <p>
10326      * A character may start a Java identifier if and only if
10327      * one of the following conditions is true:
10328      * <ul>
10329      * <li> {@link #isLetter(char) isLetter(ch)} returns {@code true}
10330      * <li> {@link #getType(char) getType(ch)} returns {@code LETTER_NUMBER}
10331      * <li> {@code ch} is a currency symbol (such as {@code '$'})
10332      * <li> {@code ch} is a connecting punctuation character (such as {@code '_'}).
10333      * </ul>
10334      *
10335      * @param   ch the character to be tested.
10336      * @return  {@code true} if the character may start a Java
10337      *          identifier; {@code false} otherwise.
10338      * @see     Character#isJavaLetterOrDigit(char)
10339      * @see     Character#isJavaIdentifierStart(char)
10340      * @see     Character#isJavaIdentifierPart(char)
10341      * @see     Character#isLetter(char)
10342      * @see     Character#isLetterOrDigit(char)
10343      * @see     Character#isUnicodeIdentifierStart(char)
10344      * @since   1.0.2
10345      * @deprecated Replaced by isJavaIdentifierStart(char).
10346      */
10347     @Deprecated(since="1.1")
10348     public static boolean isJavaLetter(char ch) {
10349         return isJavaIdentifierStart(ch);
10350     }
10351 
10352     /**
10353      * Determines if the specified character may be part of a Java
10354      * identifier as other than the first character.
10355      * <p>
10356      * A character may be part of a Java identifier if and only if one
10357      * of the following conditions is true:
10358      * <ul>
10359      * <li>  it is a letter
10360      * <li>  it is a currency symbol (such as {@code '$'})
10361      * <li>  it is a connecting punctuation character (such as {@code '_'})
10362      * <li>  it is a digit
10363      * <li>  it is a numeric letter (such as a Roman numeral character)
10364      * <li>  it is a combining mark
10365      * <li>  it is a non-spacing mark
10366      * <li> {@code isIdentifierIgnorable} returns
10367      * {@code true} for the character.
10368      * </ul>
10369      *
10370      * @param   ch the character to be tested.
10371      * @return  {@code true} if the character may be part of a
10372      *          Java identifier; {@code false} otherwise.
10373      * @see     Character#isJavaLetter(char)
10374      * @see     Character#isJavaIdentifierStart(char)
10375      * @see     Character#isJavaIdentifierPart(char)
10376      * @see     Character#isLetter(char)
10377      * @see     Character#isLetterOrDigit(char)
10378      * @see     Character#isUnicodeIdentifierPart(char)
10379      * @see     Character#isIdentifierIgnorable(char)
10380      * @since   1.0.2
10381      * @deprecated Replaced by isJavaIdentifierPart(char).
10382      */
10383     @Deprecated(since="1.1")
10384     public static boolean isJavaLetterOrDigit(char ch) {
10385         return isJavaIdentifierPart(ch);
10386     }
10387 
10388     /**
10389      * Determines if the specified character (Unicode code point) is alphabetic.
10390      * <p>
10391      * A character is considered to be alphabetic if its general category type,
10392      * provided by {@link Character#getType(int) getType(codePoint)}, is any of
10393      * the following:
10394      * <ul>
10395      * <li> {@code UPPERCASE_LETTER}
10396      * <li> {@code LOWERCASE_LETTER}
10397      * <li> {@code TITLECASE_LETTER}
10398      * <li> {@code MODIFIER_LETTER}
10399      * <li> {@code OTHER_LETTER}
10400      * <li> {@code LETTER_NUMBER}
10401      * </ul>
10402      * or it has contributory property Other_Alphabetic as defined by the
10403      * Unicode Standard.
10404      *
10405      * @param   codePoint the character (Unicode code point) to be tested.
10406      * @return  {@code true} if the character is a Unicode alphabet
10407      *          character, {@code false} otherwise.
10408      * @since   1.7
10409      */
10410     public static boolean isAlphabetic(int codePoint) {
10411         return (((((1 << Character.UPPERCASE_LETTER) |
10412             (1 << Character.LOWERCASE_LETTER) |
10413             (1 << Character.TITLECASE_LETTER) |
10414             (1 << Character.MODIFIER_LETTER) |
10415             (1 << Character.OTHER_LETTER) |
10416             (1 << Character.LETTER_NUMBER)) >> getType(codePoint)) & 1) != 0) ||
10417             CharacterData.of(codePoint).isOtherAlphabetic(codePoint);
10418     }
10419 
10420     /**
10421      * Determines if the specified character (Unicode code point) is a CJKV
10422      * (Chinese, Japanese, Korean and Vietnamese) ideograph, as defined by
10423      * the Unicode Standard.
10424      *
10425      * @param   codePoint the character (Unicode code point) to be tested.
10426      * @return  {@code true} if the character is a Unicode ideograph
10427      *          character, {@code false} otherwise.
10428      * @since   1.7
10429      */
10430     public static boolean isIdeographic(int codePoint) {
10431         return CharacterData.of(codePoint).isIdeographic(codePoint);
10432     }
10433 
10434     /**
10435      * Determines if the specified character is
10436      * permissible as the first character in a Java identifier.
10437      * <p>
10438      * A character may start a Java identifier if and only if
10439      * one of the following conditions is true:
10440      * <ul>
10441      * <li> {@link #isLetter(char) isLetter(ch)} returns {@code true}
10442      * <li> {@link #getType(char) getType(ch)} returns {@code LETTER_NUMBER}
10443      * <li> {@code ch} is a currency symbol (such as {@code '$'})
10444      * <li> {@code ch} is a connecting punctuation character (such as {@code '_'}).
10445      * </ul>
10446      *
10447      * <p><b>Note:</b> This method cannot handle <a
10448      * href="#supplementary"> supplementary characters</a>. To support
10449      * all Unicode characters, including supplementary characters, use
10450      * the {@link #isJavaIdentifierStart(int)} method.
10451      *
10452      * @param   ch the character to be tested.
10453      * @return  {@code true} if the character may start a Java identifier;
10454      *          {@code false} otherwise.
10455      * @see     Character#isJavaIdentifierPart(char)
10456      * @see     Character#isLetter(char)
10457      * @see     Character#isUnicodeIdentifierStart(char)
10458      * @see     java.compiler/javax.lang.model.SourceVersion#isIdentifier(CharSequence)
10459      * @since   1.1
10460      */
10461     @SuppressWarnings("doclint:reference") // cross-module links
10462     public static boolean isJavaIdentifierStart(char ch) {
10463         return isJavaIdentifierStart((int)ch);
10464     }
10465 
10466     /**
10467      * Determines if the character (Unicode code point) is
10468      * permissible as the first character in a Java identifier.
10469      * <p>
10470      * A character may start a Java identifier if and only if
10471      * one of the following conditions is true:
10472      * <ul>
10473      * <li> {@link #isLetter(int) isLetter(codePoint)}
10474      *      returns {@code true}
10475      * <li> {@link #getType(int) getType(codePoint)}
10476      *      returns {@code LETTER_NUMBER}
10477      * <li> the referenced character is a currency symbol (such as {@code '$'})
10478      * <li> the referenced character is a connecting punctuation character
10479      *      (such as {@code '_'}).
10480      * </ul>
10481      *
10482      * @param   codePoint the character (Unicode code point) to be tested.
10483      * @return  {@code true} if the character may start a Java identifier;
10484      *          {@code false} otherwise.
10485      * @see     Character#isJavaIdentifierPart(int)
10486      * @see     Character#isLetter(int)
10487      * @see     Character#isUnicodeIdentifierStart(int)
10488      * @see     java.compiler/javax.lang.model.SourceVersion#isIdentifier(CharSequence)
10489      * @since   1.5
10490      */
10491     @SuppressWarnings("doclint:reference") // cross-module links
10492     public static boolean isJavaIdentifierStart(int codePoint) {
10493         return CharacterData.of(codePoint).isJavaIdentifierStart(codePoint);
10494     }
10495 
10496     /**
10497      * Determines if the specified character may be part of a Java
10498      * identifier as other than the first character.
10499      * <p>
10500      * A character may be part of a Java identifier if any of the following
10501      * conditions are true:
10502      * <ul>
10503      * <li>  it is a letter
10504      * <li>  it is a currency symbol (such as {@code '$'})
10505      * <li>  it is a connecting punctuation character (such as {@code '_'})
10506      * <li>  it is a digit
10507      * <li>  it is a numeric letter (such as a Roman numeral character)
10508      * <li>  it is a combining mark
10509      * <li>  it is a non-spacing mark
10510      * <li> {@code isIdentifierIgnorable} returns
10511      * {@code true} for the character
10512      * </ul>
10513      *
10514      * <p><b>Note:</b> This method cannot handle <a
10515      * href="#supplementary"> supplementary characters</a>. To support
10516      * all Unicode characters, including supplementary characters, use
10517      * the {@link #isJavaIdentifierPart(int)} method.
10518      *
10519      * @param   ch      the character to be tested.
10520      * @return {@code true} if the character may be part of a
10521      *          Java identifier; {@code false} otherwise.
10522      * @see     Character#isIdentifierIgnorable(char)
10523      * @see     Character#isJavaIdentifierStart(char)
10524      * @see     Character#isLetterOrDigit(char)
10525      * @see     Character#isUnicodeIdentifierPart(char)
10526      * @see     java.compiler/javax.lang.model.SourceVersion#isIdentifier(CharSequence)
10527      * @since   1.1
10528      */
10529     @SuppressWarnings("doclint:reference") // cross-module links
10530     public static boolean isJavaIdentifierPart(char ch) {
10531         return isJavaIdentifierPart((int)ch);
10532     }
10533 
10534     /**
10535      * Determines if the character (Unicode code point) may be part of a Java
10536      * identifier as other than the first character.
10537      * <p>
10538      * A character may be part of a Java identifier if any of the following
10539      * conditions are true:
10540      * <ul>
10541      * <li>  it is a letter
10542      * <li>  it is a currency symbol (such as {@code '$'})
10543      * <li>  it is a connecting punctuation character (such as {@code '_'})
10544      * <li>  it is a digit
10545      * <li>  it is a numeric letter (such as a Roman numeral character)
10546      * <li>  it is a combining mark
10547      * <li>  it is a non-spacing mark
10548      * <li> {@link #isIdentifierIgnorable(int)
10549      * isIdentifierIgnorable(codePoint)} returns {@code true} for
10550      * the code point
10551      * </ul>
10552      *
10553      * @param   codePoint the character (Unicode code point) to be tested.
10554      * @return {@code true} if the character may be part of a
10555      *          Java identifier; {@code false} otherwise.
10556      * @see     Character#isIdentifierIgnorable(int)
10557      * @see     Character#isJavaIdentifierStart(int)
10558      * @see     Character#isLetterOrDigit(int)
10559      * @see     Character#isUnicodeIdentifierPart(int)
10560      * @see     java.compiler/javax.lang.model.SourceVersion#isIdentifier(CharSequence)
10561      * @since   1.5
10562      */
10563     @SuppressWarnings("doclint:reference") // cross-module links
10564     public static boolean isJavaIdentifierPart(int codePoint) {
10565         return CharacterData.of(codePoint).isJavaIdentifierPart(codePoint);
10566     }
10567 
10568     /**
10569      * Determines if the specified character is permissible as the
10570      * first character in a Unicode identifier.
10571      * <p>
10572      * A character may start a Unicode identifier if and only if
10573      * one of the following conditions is true:
10574      * <ul>
10575      * <li> {@link #isLetter(char) isLetter(ch)} returns {@code true}
10576      * <li> {@link #getType(char) getType(ch)} returns
10577      *      {@code LETTER_NUMBER}.
10578      * <li> it is an <a href="http://www.unicode.org/reports/tr44/#Other_ID_Start">
10579      *      {@code Other_ID_Start}</a> character.
10580      * </ul>
10581      * <p>
10582      * This method conforms to <a href="https://unicode.org/reports/tr31/#R1">
10583      * UAX31-R1: Default Identifiers</a> requirement of the Unicode Standard,
10584      * with the following profile of UAX31:
10585      * <pre>
10586      * Start := ID_Start + 'VERTICAL TILDE' (U+2E2F)
10587      * </pre>
10588      * {@code 'VERTICAL TILDE'} is added to {@code Start} for backward
10589      * compatibility.
10590      *
10591      * <p><b>Note:</b> This method cannot handle <a
10592      * href="#supplementary"> supplementary characters</a>. To support
10593      * all Unicode characters, including supplementary characters, use
10594      * the {@link #isUnicodeIdentifierStart(int)} method.
10595      *
10596      * @param   ch      the character to be tested.
10597      * @return  {@code true} if the character may start a Unicode
10598      *          identifier; {@code false} otherwise.
10599      *
10600      * @spec https://www.unicode.org/reports/tr44 Unicode Character Database
10601      * @spec https://www.unicode.org/reports/tr31 Unicode Identifier and Pattern Syntax
10602      * @see     Character#isJavaIdentifierStart(char)
10603      * @see     Character#isLetter(char)
10604      * @see     Character#isUnicodeIdentifierPart(char)
10605      * @since   1.1
10606      */
10607     public static boolean isUnicodeIdentifierStart(char ch) {
10608         return isUnicodeIdentifierStart((int)ch);
10609     }
10610 
10611     /**
10612      * Determines if the specified character (Unicode code point) is permissible as the
10613      * first character in a Unicode identifier.
10614      * <p>
10615      * A character may start a Unicode identifier if and only if
10616      * one of the following conditions is true:
10617      * <ul>
10618      * <li> {@link #isLetter(int) isLetter(codePoint)}
10619      *      returns {@code true}
10620      * <li> {@link #getType(int) getType(codePoint)}
10621      *      returns {@code LETTER_NUMBER}.
10622      * <li> it is an <a href="http://www.unicode.org/reports/tr44/#Other_ID_Start">
10623      *      {@code Other_ID_Start}</a> character.
10624      * </ul>
10625      * <p>
10626      * This method conforms to <a href="https://unicode.org/reports/tr31/#R1">
10627      * UAX31-R1: Default Identifiers</a> requirement of the Unicode Standard,
10628      * with the following profile of UAX31:
10629      * <pre>
10630      * Start := ID_Start + 'VERTICAL TILDE' (U+2E2F)
10631      * </pre>
10632      * {@code 'VERTICAL TILDE'} is added to {@code Start} for backward
10633      * compatibility.
10634      *
10635      * @param   codePoint the character (Unicode code point) to be tested.
10636      * @return  {@code true} if the character may start a Unicode
10637      *          identifier; {@code false} otherwise.
10638      *
10639      * @spec https://www.unicode.org/reports/tr44 Unicode Character Database
10640      * @spec https://www.unicode.org/reports/tr31 Unicode Identifier and Pattern Syntax
10641      * @see     Character#isJavaIdentifierStart(int)
10642      * @see     Character#isLetter(int)
10643      * @see     Character#isUnicodeIdentifierPart(int)
10644      * @since   1.5
10645      */
10646     public static boolean isUnicodeIdentifierStart(int codePoint) {
10647         return CharacterData.of(codePoint).isUnicodeIdentifierStart(codePoint);
10648     }
10649 
10650     /**
10651      * Determines if the specified character may be part of a Unicode
10652      * identifier as other than the first character.
10653      * <p>
10654      * A character may be part of a Unicode identifier if and only if
10655      * one of the following statements is true:
10656      * <ul>
10657      * <li>  it is a letter
10658      * <li>  it is a connecting punctuation character (such as {@code '_'})
10659      * <li>  it is a digit
10660      * <li>  it is a numeric letter (such as a Roman numeral character)
10661      * <li>  it is a combining mark
10662      * <li>  it is a non-spacing mark
10663      * <li> {@code isIdentifierIgnorable} returns
10664      * {@code true} for this character.
10665      * <li> it is an <a href="http://www.unicode.org/reports/tr44/#Other_ID_Start">
10666      *      {@code Other_ID_Start}</a> character.
10667      * <li> it is an <a href="http://www.unicode.org/reports/tr44/#Other_ID_Continue">
10668      *      {@code Other_ID_Continue}</a> character.
10669      * </ul>
10670      * <p>
10671      * This method conforms to <a href="https://unicode.org/reports/tr31/#R1">
10672      * UAX31-R1: Default Identifiers</a> requirement of the Unicode Standard,
10673      * with the following profile of UAX31:
10674      * <pre>
10675      * Continue := Start + ID_Continue + ignorable
10676      * Medial := empty
10677      * ignorable := isIdentifierIgnorable(char) returns true for the character
10678      * </pre>
10679      * {@code ignorable} is added to {@code Continue} for backward
10680      * compatibility.
10681      *
10682      * <p><b>Note:</b> This method cannot handle <a
10683      * href="#supplementary"> supplementary characters</a>. To support
10684      * all Unicode characters, including supplementary characters, use
10685      * the {@link #isUnicodeIdentifierPart(int)} method.
10686      *
10687      * @param   ch      the character to be tested.
10688      * @return  {@code true} if the character may be part of a
10689      *          Unicode identifier; {@code false} otherwise.
10690      *
10691      * @spec https://www.unicode.org/reports/tr44 Unicode Character Database
10692      * @spec https://www.unicode.org/reports/tr31 Unicode Identifier and Pattern Syntax
10693      * @see     Character#isIdentifierIgnorable(char)
10694      * @see     Character#isJavaIdentifierPart(char)
10695      * @see     Character#isLetterOrDigit(char)
10696      * @see     Character#isUnicodeIdentifierStart(char)
10697      * @since   1.1
10698      */
10699     public static boolean isUnicodeIdentifierPart(char ch) {
10700         return isUnicodeIdentifierPart((int)ch);
10701     }
10702 
10703     /**
10704      * Determines if the specified character (Unicode code point) may be part of a Unicode
10705      * identifier as other than the first character.
10706      * <p>
10707      * A character may be part of a Unicode identifier if and only if
10708      * one of the following statements is true:
10709      * <ul>
10710      * <li>  it is a letter
10711      * <li>  it is a connecting punctuation character (such as {@code '_'})
10712      * <li>  it is a digit
10713      * <li>  it is a numeric letter (such as a Roman numeral character)
10714      * <li>  it is a combining mark
10715      * <li>  it is a non-spacing mark
10716      * <li> {@code isIdentifierIgnorable} returns
10717      * {@code true} for this character.
10718      * <li> it is an <a href="http://www.unicode.org/reports/tr44/#Other_ID_Start">
10719      *      {@code Other_ID_Start}</a> character.
10720      * <li> it is an <a href="http://www.unicode.org/reports/tr44/#Other_ID_Continue">
10721      *      {@code Other_ID_Continue}</a> character.
10722      * </ul>
10723      * <p>
10724      * This method conforms to <a href="https://unicode.org/reports/tr31/#R1">
10725      * UAX31-R1: Default Identifiers</a> requirement of the Unicode Standard,
10726      * with the following profile of UAX31:
10727      * <pre>
10728      * Continue := Start + ID_Continue + ignorable
10729      * Medial := empty
10730      * ignorable := isIdentifierIgnorable(int) returns true for the character
10731      * </pre>
10732      * {@code ignorable} is added to {@code Continue} for backward
10733      * compatibility.
10734      *
10735      * @param   codePoint the character (Unicode code point) to be tested.
10736      * @return  {@code true} if the character may be part of a
10737      *          Unicode identifier; {@code false} otherwise.
10738      *
10739      * @spec https://www.unicode.org/reports/tr44 Unicode Character Database
10740      * @spec https://www.unicode.org/reports/tr31 Unicode Identifier and Pattern Syntax
10741      * @see     Character#isIdentifierIgnorable(int)
10742      * @see     Character#isJavaIdentifierPart(int)
10743      * @see     Character#isLetterOrDigit(int)
10744      * @see     Character#isUnicodeIdentifierStart(int)
10745      * @since   1.5
10746      */
10747     public static boolean isUnicodeIdentifierPart(int codePoint) {
10748         return CharacterData.of(codePoint).isUnicodeIdentifierPart(codePoint);
10749     }
10750 
10751     /**
10752      * Determines if the specified character should be regarded as
10753      * an ignorable character in a Java identifier or a Unicode identifier.
10754      * <p>
10755      * The following Unicode characters are ignorable in a Java identifier
10756      * or a Unicode identifier:
10757      * <ul>
10758      * <li>ISO control characters that are not whitespace
10759      * <ul>
10760      * <li>{@code '\u005Cu0000'} through {@code '\u005Cu0008'}
10761      * <li>{@code '\u005Cu000E'} through {@code '\u005Cu001B'}
10762      * <li>{@code '\u005Cu007F'} through {@code '\u005Cu009F'}
10763      * </ul>
10764      *
10765      * <li>all characters that have the {@code FORMAT} general
10766      * category value
10767      * </ul>
10768      *
10769      * <p><b>Note:</b> This method cannot handle <a
10770      * href="#supplementary"> supplementary characters</a>. To support
10771      * all Unicode characters, including supplementary characters, use
10772      * the {@link #isIdentifierIgnorable(int)} method.
10773      *
10774      * @param   ch      the character to be tested.
10775      * @return  {@code true} if the character is an ignorable control
10776      *          character that may be part of a Java or Unicode identifier;
10777      *           {@code false} otherwise.
10778      * @see     Character#isJavaIdentifierPart(char)
10779      * @see     Character#isUnicodeIdentifierPart(char)
10780      * @since   1.1
10781      */
10782     public static boolean isIdentifierIgnorable(char ch) {
10783         return isIdentifierIgnorable((int)ch);
10784     }
10785 
10786     /**
10787      * Determines if the specified character (Unicode code point) should be regarded as
10788      * an ignorable character in a Java identifier or a Unicode identifier.
10789      * <p>
10790      * The following Unicode characters are ignorable in a Java identifier
10791      * or a Unicode identifier:
10792      * <ul>
10793      * <li>ISO control characters that are not whitespace
10794      * <ul>
10795      * <li>{@code '\u005Cu0000'} through {@code '\u005Cu0008'}
10796      * <li>{@code '\u005Cu000E'} through {@code '\u005Cu001B'}
10797      * <li>{@code '\u005Cu007F'} through {@code '\u005Cu009F'}
10798      * </ul>
10799      *
10800      * <li>all characters that have the {@code FORMAT} general
10801      * category value
10802      * </ul>
10803      *
10804      * @param   codePoint the character (Unicode code point) to be tested.
10805      * @return  {@code true} if the character is an ignorable control
10806      *          character that may be part of a Java or Unicode identifier;
10807      *          {@code false} otherwise.
10808      * @see     Character#isJavaIdentifierPart(int)
10809      * @see     Character#isUnicodeIdentifierPart(int)
10810      * @since   1.5
10811      */
10812     public static boolean isIdentifierIgnorable(int codePoint) {
10813         return CharacterData.of(codePoint).isIdentifierIgnorable(codePoint);
10814     }
10815 
10816     /**
10817      * Determines if the specified character (Unicode code point) is an Emoji.
10818      * <p>
10819      * A character is considered to be an Emoji if and only if it has the {@code Emoji}
10820      * property, defined in
10821      * <a href="https://unicode.org/reports/tr51/#Emoji_Properties_and_Data_Files">
10822      * Unicode Emoji (Technical Standard #51)</a>.
10823      *
10824      * @param   codePoint the character (Unicode code point) to be tested.
10825      * @return  {@code true} if the character is an Emoji;
10826      *          {@code false} otherwise.
10827      * @since   21
10828      */
10829     public static boolean isEmoji(int codePoint) {
10830         return CharacterData.of(codePoint).isEmoji(codePoint);
10831     }
10832 
10833     /**
10834      * Determines if the specified character (Unicode code point) has the
10835      * Emoji Presentation property by default.
10836      * <p>
10837      * A character is considered to have the Emoji Presentation property if and
10838      * only if it has the {@code Emoji_Presentation} property, defined in
10839      * <a href="https://unicode.org/reports/tr51/#Emoji_Properties_and_Data_Files">
10840      * Unicode Emoji (Technical Standard #51)</a>.
10841      *
10842      * @param   codePoint the character (Unicode code point) to be tested.
10843      * @return  {@code true} if the character has the Emoji Presentation
10844      *          property; {@code false} otherwise.
10845      * @since   21
10846      */
10847     public static boolean isEmojiPresentation(int codePoint) {
10848         return CharacterData.of(codePoint).isEmojiPresentation(codePoint);
10849     }
10850 
10851     /**
10852      * Determines if the specified character (Unicode code point) is an
10853      * Emoji Modifier.
10854      * <p>
10855      * A character is considered to be an Emoji Modifier if and only if it has
10856      * the {@code Emoji_Modifier} property, defined in
10857      * <a href="https://unicode.org/reports/tr51/#Emoji_Properties_and_Data_Files">
10858      * Unicode Emoji (Technical Standard #51)</a>.
10859      *
10860      * @param   codePoint the character (Unicode code point) to be tested.
10861      * @return  {@code true} if the character is an Emoji Modifier;
10862      *          {@code false} otherwise.
10863      * @since   21
10864      */
10865     public static boolean isEmojiModifier(int codePoint) {
10866         return CharacterData.of(codePoint).isEmojiModifier(codePoint);
10867     }
10868 
10869     /**
10870      * Determines if the specified character (Unicode code point) is an
10871      * Emoji Modifier Base.
10872      * <p>
10873      * A character is considered to be an Emoji Modifier Base if and only if it has
10874      * the {@code Emoji_Modifier_Base} property, defined in
10875      * <a href="https://unicode.org/reports/tr51/#Emoji_Properties_and_Data_Files">
10876      * Unicode Emoji (Technical Standard #51)</a>.
10877      *
10878      * @param   codePoint the character (Unicode code point) to be tested.
10879      * @return  {@code true} if the character is an Emoji Modifier Base;
10880      *          {@code false} otherwise.
10881      * @since   21
10882      */
10883     public static boolean isEmojiModifierBase(int codePoint) {
10884         return CharacterData.of(codePoint).isEmojiModifierBase(codePoint);
10885     }
10886 
10887     /**
10888      * Determines if the specified character (Unicode code point) is an
10889      * Emoji Component.
10890      * <p>
10891      * A character is considered to be an Emoji Component if and only if it has
10892      * the {@code Emoji_Component} property, defined in
10893      * <a href="https://unicode.org/reports/tr51/#Emoji_Properties_and_Data_Files">
10894      * Unicode Emoji (Technical Standard #51)</a>.
10895      *
10896      * @param   codePoint the character (Unicode code point) to be tested.
10897      * @return  {@code true} if the character is an Emoji Component;
10898      *          {@code false} otherwise.
10899      * @since   21
10900      */
10901     public static boolean isEmojiComponent(int codePoint) {
10902         return CharacterData.of(codePoint).isEmojiComponent(codePoint);
10903     }
10904 
10905     /**
10906      * Determines if the specified character (Unicode code point) is
10907      * an Extended Pictographic.
10908      * <p>
10909      * A character is considered to be an Extended Pictographic if and only if it has
10910      * the {@code Extended_Pictographic} property, defined in
10911      * <a href="https://unicode.org/reports/tr51/#Emoji_Properties_and_Data_Files">
10912      * Unicode Emoji (Technical Standard #51)</a>.
10913      *
10914      * @param   codePoint the character (Unicode code point) to be tested.
10915      * @return  {@code true} if the character is an Extended Pictographic;
10916      *          {@code false} otherwise.
10917      * @since   21
10918      */
10919     public static boolean isExtendedPictographic(int codePoint) {
10920         return CharacterData.of(codePoint).isExtendedPictographic(codePoint);
10921     }
10922 
10923     /**
10924      * Converts the character argument to lowercase using case
10925      * mapping information from the UnicodeData file.
10926      * <p>
10927      * Note that
10928      * {@code Character.isLowerCase(Character.toLowerCase(ch))}
10929      * does not always return {@code true} for some ranges of
10930      * characters, particularly those that are symbols or ideographs.
10931      *
10932      * <p>In general, {@link String#toLowerCase()} should be used to map
10933      * characters to lowercase. {@code String} case mapping methods
10934      * have several benefits over {@code Character} case mapping methods.
10935      * {@code String} case mapping methods can perform locale-sensitive
10936      * mappings, context-sensitive mappings, and 1:M character mappings, whereas
10937      * the {@code Character} case mapping methods cannot.
10938      *
10939      * <p><b>Note:</b> This method cannot handle <a
10940      * href="#supplementary"> supplementary characters</a>. To support
10941      * all Unicode characters, including supplementary characters, use
10942      * the {@link #toLowerCase(int)} method.
10943      *
10944      * @param   ch   the character to be converted.
10945      * @return  the lowercase equivalent of the character, if any;
10946      *          otherwise, the character itself.
10947      * @see     Character#isLowerCase(char)
10948      * @see     String#toLowerCase()
10949      */
10950     public static char toLowerCase(char ch) {
10951         return (char)toLowerCase((int)ch);
10952     }
10953 
10954     /**
10955      * Converts the character (Unicode code point) argument to
10956      * lowercase using case mapping information from the UnicodeData
10957      * file.
10958      *
10959      * <p> Note that
10960      * {@code Character.isLowerCase(Character.toLowerCase(codePoint))}
10961      * does not always return {@code true} for some ranges of
10962      * characters, particularly those that are symbols or ideographs.
10963      *
10964      * <p>In general, {@link String#toLowerCase()} should be used to map
10965      * characters to lowercase. {@code String} case mapping methods
10966      * have several benefits over {@code Character} case mapping methods.
10967      * {@code String} case mapping methods can perform locale-sensitive
10968      * mappings, context-sensitive mappings, and 1:M character mappings, whereas
10969      * the {@code Character} case mapping methods cannot.
10970      *
10971      * @param   codePoint   the character (Unicode code point) to be converted.
10972      * @return  the lowercase equivalent of the character (Unicode code
10973      *          point), if any; otherwise, the character itself.
10974      * @see     Character#isLowerCase(int)
10975      * @see     String#toLowerCase()
10976      *
10977      * @since   1.5
10978      */
10979     public static int toLowerCase(int codePoint) {
10980         return CharacterData.of(codePoint).toLowerCase(codePoint);
10981     }
10982 
10983     /**
10984      * Converts the character argument to uppercase using case mapping
10985      * information from the UnicodeData file.
10986      * <p>
10987      * Note that
10988      * {@code Character.isUpperCase(Character.toUpperCase(ch))}
10989      * does not always return {@code true} for some ranges of
10990      * characters, particularly those that are symbols or ideographs.
10991      *
10992      * <p>In general, {@link String#toUpperCase()} should be used to map
10993      * characters to uppercase. {@code String} case mapping methods
10994      * have several benefits over {@code Character} case mapping methods.
10995      * {@code String} case mapping methods can perform locale-sensitive
10996      * mappings, context-sensitive mappings, and 1:M character mappings, whereas
10997      * the {@code Character} case mapping methods cannot.
10998      *
10999      * <p><b>Note:</b> This method cannot handle <a
11000      * href="#supplementary"> supplementary characters</a>. To support
11001      * all Unicode characters, including supplementary characters, use
11002      * the {@link #toUpperCase(int)} method.
11003      *
11004      * @param   ch   the character to be converted.
11005      * @return  the uppercase equivalent of the character, if any;
11006      *          otherwise, the character itself.
11007      * @see     Character#isUpperCase(char)
11008      * @see     String#toUpperCase()
11009      */
11010     public static char toUpperCase(char ch) {
11011         return (char)toUpperCase((int)ch);
11012     }
11013 
11014     /**
11015      * Converts the character (Unicode code point) argument to
11016      * uppercase using case mapping information from the UnicodeData
11017      * file.
11018      *
11019      * <p>Note that
11020      * {@code Character.isUpperCase(Character.toUpperCase(codePoint))}
11021      * does not always return {@code true} for some ranges of
11022      * characters, particularly those that are symbols or ideographs.
11023      *
11024      * <p>In general, {@link String#toUpperCase()} should be used to map
11025      * characters to uppercase. {@code String} case mapping methods
11026      * have several benefits over {@code Character} case mapping methods.
11027      * {@code String} case mapping methods can perform locale-sensitive
11028      * mappings, context-sensitive mappings, and 1:M character mappings, whereas
11029      * the {@code Character} case mapping methods cannot.
11030      *
11031      * @param   codePoint   the character (Unicode code point) to be converted.
11032      * @return  the uppercase equivalent of the character, if any;
11033      *          otherwise, the character itself.
11034      * @see     Character#isUpperCase(int)
11035      * @see     String#toUpperCase()
11036      *
11037      * @since   1.5
11038      */
11039     public static int toUpperCase(int codePoint) {
11040         return CharacterData.of(codePoint).toUpperCase(codePoint);
11041     }
11042 
11043     /**
11044      * Converts the character argument to titlecase using case mapping
11045      * information from the UnicodeData file. If a character has no
11046      * explicit titlecase mapping and is not itself a titlecase char
11047      * according to UnicodeData, then the uppercase mapping is
11048      * returned as an equivalent titlecase mapping. If the
11049      * {@code char} argument is already a titlecase
11050      * {@code char}, the same {@code char} value will be
11051      * returned.
11052      * <p>
11053      * Note that
11054      * {@code Character.isTitleCase(Character.toTitleCase(ch))}
11055      * does not always return {@code true} for some ranges of
11056      * characters.
11057      *
11058      * <p><b>Note:</b> This method cannot handle <a
11059      * href="#supplementary"> supplementary characters</a>. To support
11060      * all Unicode characters, including supplementary characters, use
11061      * the {@link #toTitleCase(int)} method.
11062      *
11063      * @param   ch   the character to be converted.
11064      * @return  the titlecase equivalent of the character, if any;
11065      *          otherwise, the character itself.
11066      * @see     Character#isTitleCase(char)
11067      * @see     Character#toLowerCase(char)
11068      * @see     Character#toUpperCase(char)
11069      * @since   1.0.2
11070      */
11071     public static char toTitleCase(char ch) {
11072         return (char)toTitleCase((int)ch);
11073     }
11074 
11075     /**
11076      * Converts the character (Unicode code point) argument to titlecase using case mapping
11077      * information from the UnicodeData file. If a character has no
11078      * explicit titlecase mapping and is not itself a titlecase char
11079      * according to UnicodeData, then the uppercase mapping is
11080      * returned as an equivalent titlecase mapping. If the
11081      * character argument is already a titlecase
11082      * character, the same character value will be
11083      * returned.
11084      *
11085      * <p>Note that
11086      * {@code Character.isTitleCase(Character.toTitleCase(codePoint))}
11087      * does not always return {@code true} for some ranges of
11088      * characters.
11089      *
11090      * @param   codePoint   the character (Unicode code point) to be converted.
11091      * @return  the titlecase equivalent of the character, if any;
11092      *          otherwise, the character itself.
11093      * @see     Character#isTitleCase(int)
11094      * @see     Character#toLowerCase(int)
11095      * @see     Character#toUpperCase(int)
11096      * @since   1.5
11097      */
11098     public static int toTitleCase(int codePoint) {
11099         return CharacterData.of(codePoint).toTitleCase(codePoint);
11100     }
11101 
11102     /**
11103      * Returns the numeric value of the character {@code ch} in the
11104      * specified radix.
11105      * <p>
11106      * If the radix is not in the range {@code MIN_RADIX} &le;
11107      * {@code radix} &le; {@code MAX_RADIX} or if the
11108      * value of {@code ch} is not a valid digit in the specified
11109      * radix, {@code -1} is returned. A character is a valid digit
11110      * if at least one of the following is true:
11111      * <ul>
11112      * <li>The method {@code isDigit} is {@code true} of the character
11113      *     and the Unicode decimal digit value of the character (or its
11114      *     single-character decomposition) is less than the specified radix.
11115      *     In this case the decimal digit value is returned.
11116      * <li>The character is one of the uppercase Latin letters
11117      *     {@code 'A'} through {@code 'Z'} and its code is less than
11118      *     {@code radix + 'A' - 10}.
11119      *     In this case, {@code ch - 'A' + 10}
11120      *     is returned.
11121      * <li>The character is one of the lowercase Latin letters
11122      *     {@code 'a'} through {@code 'z'} and its code is less than
11123      *     {@code radix + 'a' - 10}.
11124      *     In this case, {@code ch - 'a' + 10}
11125      *     is returned.
11126      * <li>The character is one of the fullwidth uppercase Latin letters A
11127      *     ({@code '\u005CuFF21'}) through Z ({@code '\u005CuFF3A'})
11128      *     and its code is less than
11129      *     {@code radix + '\u005CuFF21' - 10}.
11130      *     In this case, {@code ch - '\u005CuFF21' + 10}
11131      *     is returned.
11132      * <li>The character is one of the fullwidth lowercase Latin letters a
11133      *     ({@code '\u005CuFF41'}) through z ({@code '\u005CuFF5A'})
11134      *     and its code is less than
11135      *     {@code radix + '\u005CuFF41' - 10}.
11136      *     In this case, {@code ch - '\u005CuFF41' + 10}
11137      *     is returned.
11138      * </ul>
11139      *
11140      * <p><b>Note:</b> This method cannot handle <a
11141      * href="#supplementary"> supplementary characters</a>. To support
11142      * all Unicode characters, including supplementary characters, use
11143      * the {@link #digit(int, int)} method.
11144      *
11145      * @param   ch      the character to be converted.
11146      * @param   radix   the radix.
11147      * @return  the numeric value represented by the character in the
11148      *          specified radix.
11149      * @see     Character#forDigit(int, int)
11150      * @see     Character#isDigit(char)
11151      */
11152     public static int digit(char ch, int radix) {
11153         return digit((int)ch, radix);
11154     }
11155 
11156     /**
11157      * Returns the numeric value of the specified character (Unicode
11158      * code point) in the specified radix.
11159      *
11160      * <p>If the radix is not in the range {@code MIN_RADIX} &le;
11161      * {@code radix} &le; {@code MAX_RADIX} or if the
11162      * character is not a valid digit in the specified
11163      * radix, {@code -1} is returned. A character is a valid digit
11164      * if at least one of the following is true:
11165      * <ul>
11166      * <li>The method {@link #isDigit(int) isDigit(codePoint)} is {@code true} of the character
11167      *     and the Unicode decimal digit value of the character (or its
11168      *     single-character decomposition) is less than the specified radix.
11169      *     In this case the decimal digit value is returned.
11170      * <li>The character is one of the uppercase Latin letters
11171      *     {@code 'A'} through {@code 'Z'} and its code is less than
11172      *     {@code radix + 'A' - 10}.
11173      *     In this case, {@code codePoint - 'A' + 10}
11174      *     is returned.
11175      * <li>The character is one of the lowercase Latin letters
11176      *     {@code 'a'} through {@code 'z'} and its code is less than
11177      *     {@code radix + 'a' - 10}.
11178      *     In this case, {@code codePoint - 'a' + 10}
11179      *     is returned.
11180      * <li>The character is one of the fullwidth uppercase Latin letters A
11181      *     ({@code '\u005CuFF21'}) through Z ({@code '\u005CuFF3A'})
11182      *     and its code is less than
11183      *     {@code radix + '\u005CuFF21' - 10}.
11184      *     In this case,
11185      *     {@code codePoint - '\u005CuFF21' + 10}
11186      *     is returned.
11187      * <li>The character is one of the fullwidth lowercase Latin letters a
11188      *     ({@code '\u005CuFF41'}) through z ({@code '\u005CuFF5A'})
11189      *     and its code is less than
11190      *     {@code radix + '\u005CuFF41'- 10}.
11191      *     In this case,
11192      *     {@code codePoint - '\u005CuFF41' + 10}
11193      *     is returned.
11194      * </ul>
11195      *
11196      * @param   codePoint the character (Unicode code point) to be converted.
11197      * @param   radix   the radix.
11198      * @return  the numeric value represented by the character in the
11199      *          specified radix.
11200      * @see     Character#forDigit(int, int)
11201      * @see     Character#isDigit(int)
11202      * @since   1.5
11203      */
11204     public static int digit(int codePoint, int radix) {
11205         return CharacterData.of(codePoint).digit(codePoint, radix);
11206     }
11207 
11208     /**
11209      * Returns the {@code int} value that the specified Unicode
11210      * character represents. For example, the character
11211      * {@code '\u005Cu216C'} (the roman numeral fifty) will return
11212      * an int with a value of 50.
11213      * <p>
11214      * The letters A-Z in their uppercase ({@code '\u005Cu0041'} through
11215      * {@code '\u005Cu005A'}), lowercase
11216      * ({@code '\u005Cu0061'} through {@code '\u005Cu007A'}), and
11217      * full width variant ({@code '\u005CuFF21'} through
11218      * {@code '\u005CuFF3A'} and {@code '\u005CuFF41'} through
11219      * {@code '\u005CuFF5A'}) forms have numeric values from 10
11220      * through 35. This is independent of the Unicode specification,
11221      * which does not assign numeric values to these {@code char}
11222      * values.
11223      * <p>
11224      * If the character does not have a numeric value, then -1 is returned.
11225      * If the character has a numeric value that cannot be represented as a
11226      * nonnegative integer (for example, a fractional value), then -2
11227      * is returned.
11228      *
11229      * <p><b>Note:</b> This method cannot handle <a
11230      * href="#supplementary"> supplementary characters</a>. To support
11231      * all Unicode characters, including supplementary characters, use
11232      * the {@link #getNumericValue(int)} method.
11233      *
11234      * @param   ch      the character to be converted.
11235      * @return  the numeric value of the character, as a nonnegative {@code int}
11236      *          value; -2 if the character has a numeric value but the value
11237      *          can not be represented as a nonnegative {@code int} value;
11238      *          -1 if the character has no numeric value.
11239      * @see     Character#forDigit(int, int)
11240      * @see     Character#isDigit(char)
11241      * @since   1.1
11242      */
11243     public static int getNumericValue(char ch) {
11244         return getNumericValue((int)ch);
11245     }
11246 
11247     /**
11248      * Returns the {@code int} value that the specified
11249      * character (Unicode code point) represents. For example, the character
11250      * {@code '\u005Cu216C'} (the Roman numeral fifty) will return
11251      * an {@code int} with a value of 50.
11252      * <p>
11253      * The letters A-Z in their uppercase ({@code '\u005Cu0041'} through
11254      * {@code '\u005Cu005A'}), lowercase
11255      * ({@code '\u005Cu0061'} through {@code '\u005Cu007A'}), and
11256      * full width variant ({@code '\u005CuFF21'} through
11257      * {@code '\u005CuFF3A'} and {@code '\u005CuFF41'} through
11258      * {@code '\u005CuFF5A'}) forms have numeric values from 10
11259      * through 35. This is independent of the Unicode specification,
11260      * which does not assign numeric values to these {@code char}
11261      * values.
11262      * <p>
11263      * If the character does not have a numeric value, then -1 is returned.
11264      * If the character has a numeric value that cannot be represented as a
11265      * nonnegative integer (for example, a fractional value), then -2
11266      * is returned.
11267      *
11268      * @param   codePoint the character (Unicode code point) to be converted.
11269      * @return  the numeric value of the character, as a nonnegative {@code int}
11270      *          value; -2 if the character has a numeric value but the value
11271      *          can not be represented as a nonnegative {@code int} value;
11272      *          -1 if the character has no numeric value.
11273      * @see     Character#forDigit(int, int)
11274      * @see     Character#isDigit(int)
11275      * @since   1.5
11276      */
11277     public static int getNumericValue(int codePoint) {
11278         return CharacterData.of(codePoint).getNumericValue(codePoint);
11279     }
11280 
11281     /**
11282      * Determines if the specified character is ISO-LATIN-1 white space.
11283      * This method returns {@code true} for the following five
11284      * characters only:
11285      * <table class="striped">
11286      * <caption style="display:none">truechars</caption>
11287      * <thead>
11288      * <tr><th scope="col">Character
11289      *     <th scope="col">Code
11290      *     <th scope="col">Name
11291      * </thead>
11292      * <tbody>
11293      * <tr><th scope="row">{@code '\t'}</th>            <td>{@code U+0009}</td>
11294      *     <td>{@code HORIZONTAL TABULATION}</td></tr>
11295      * <tr><th scope="row">{@code '\n'}</th>            <td>{@code U+000A}</td>
11296      *     <td>{@code NEW LINE}</td></tr>
11297      * <tr><th scope="row">{@code '\f'}</th>            <td>{@code U+000C}</td>
11298      *     <td>{@code FORM FEED}</td></tr>
11299      * <tr><th scope="row">{@code '\r'}</th>            <td>{@code U+000D}</td>
11300      *     <td>{@code CARRIAGE RETURN}</td></tr>
11301      * <tr><th scope="row">{@code ' '}</th>  <td>{@code U+0020}</td>
11302      *     <td>{@code SPACE}</td></tr>
11303      * </tbody>
11304      * </table>
11305      *
11306      * @param      ch   the character to be tested.
11307      * @return     {@code true} if the character is ISO-LATIN-1 white
11308      *             space; {@code false} otherwise.
11309      * @see        Character#isSpaceChar(char)
11310      * @see        Character#isWhitespace(char)
11311      * @deprecated Replaced by isWhitespace(char).
11312      */
11313     @Deprecated(since="1.1")
11314     public static boolean isSpace(char ch) {
11315         return (ch <= 0x0020) &&
11316             (((((1L << 0x0009) |
11317             (1L << 0x000A) |
11318             (1L << 0x000C) |
11319             (1L << 0x000D) |
11320             (1L << 0x0020)) >> ch) & 1L) != 0);
11321     }
11322 
11323 
11324     /**
11325      * Determines if the specified character is a Unicode space character.
11326      * A character is considered to be a space character if and only if
11327      * it is specified to be a space character by the Unicode Standard. This
11328      * method returns true if the character's general category type is any of
11329      * the following:
11330      * <ul>
11331      * <li> {@code SPACE_SEPARATOR}
11332      * <li> {@code LINE_SEPARATOR}
11333      * <li> {@code PARAGRAPH_SEPARATOR}
11334      * </ul>
11335      *
11336      * <p><b>Note:</b> This method cannot handle <a
11337      * href="#supplementary"> supplementary characters</a>. To support
11338      * all Unicode characters, including supplementary characters, use
11339      * the {@link #isSpaceChar(int)} method.
11340      *
11341      * @param   ch      the character to be tested.
11342      * @return  {@code true} if the character is a space character;
11343      *          {@code false} otherwise.
11344      * @see     Character#isWhitespace(char)
11345      * @since   1.1
11346      */
11347     public static boolean isSpaceChar(char ch) {
11348         return isSpaceChar((int)ch);
11349     }
11350 
11351     /**
11352      * Determines if the specified character (Unicode code point) is a
11353      * Unicode space character.  A character is considered to be a
11354      * space character if and only if it is specified to be a space
11355      * character by the Unicode Standard. This method returns true if
11356      * the character's general category type is any of the following:
11357      *
11358      * <ul>
11359      * <li> {@link #SPACE_SEPARATOR}
11360      * <li> {@link #LINE_SEPARATOR}
11361      * <li> {@link #PARAGRAPH_SEPARATOR}
11362      * </ul>
11363      *
11364      * @param   codePoint the character (Unicode code point) to be tested.
11365      * @return  {@code true} if the character is a space character;
11366      *          {@code false} otherwise.
11367      * @see     Character#isWhitespace(int)
11368      * @since   1.5
11369      */
11370     public static boolean isSpaceChar(int codePoint) {
11371         return ((((1 << Character.SPACE_SEPARATOR) |
11372                   (1 << Character.LINE_SEPARATOR) |
11373                   (1 << Character.PARAGRAPH_SEPARATOR)) >> getType(codePoint)) & 1)
11374             != 0;
11375     }
11376 
11377     /**
11378      * Determines if the specified character is white space according to Java.
11379      * A character is a Java whitespace character if and only if it satisfies
11380      * one of the following criteria:
11381      * <ul>
11382      * <li> It is a Unicode space character ({@code SPACE_SEPARATOR},
11383      *      {@code LINE_SEPARATOR}, or {@code PARAGRAPH_SEPARATOR})
11384      *      but is not also a non-breaking space ({@code '\u005Cu00A0'},
11385      *      {@code '\u005Cu2007'}, {@code '\u005Cu202F'}).
11386      * <li> It is {@code '\u005Ct'}, U+0009 HORIZONTAL TABULATION.
11387      * <li> It is {@code '\u005Cn'}, U+000A LINE FEED.
11388      * <li> It is {@code '\u005Cu000B'}, U+000B VERTICAL TABULATION.
11389      * <li> It is {@code '\u005Cf'}, U+000C FORM FEED.
11390      * <li> It is {@code '\u005Cr'}, U+000D CARRIAGE RETURN.
11391      * <li> It is {@code '\u005Cu001C'}, U+001C FILE SEPARATOR.
11392      * <li> It is {@code '\u005Cu001D'}, U+001D GROUP SEPARATOR.
11393      * <li> It is {@code '\u005Cu001E'}, U+001E RECORD SEPARATOR.
11394      * <li> It is {@code '\u005Cu001F'}, U+001F UNIT SEPARATOR.
11395      * </ul>
11396      *
11397      * <p><b>Note:</b> This method cannot handle <a
11398      * href="#supplementary"> supplementary characters</a>. To support
11399      * all Unicode characters, including supplementary characters, use
11400      * the {@link #isWhitespace(int)} method.
11401      *
11402      * @param   ch the character to be tested.
11403      * @return  {@code true} if the character is a Java whitespace
11404      *          character; {@code false} otherwise.
11405      * @see     Character#isSpaceChar(char)
11406      * @since   1.1
11407      */
11408     public static boolean isWhitespace(char ch) {
11409         return isWhitespace((int)ch);
11410     }
11411 
11412     /**
11413      * Determines if the specified character (Unicode code point) is
11414      * white space according to Java.  A character is a Java
11415      * whitespace character if and only if it satisfies one of the
11416      * following criteria:
11417      * <ul>
11418      * <li> It is a Unicode space character ({@link #SPACE_SEPARATOR},
11419      *      {@link #LINE_SEPARATOR}, or {@link #PARAGRAPH_SEPARATOR})
11420      *      but is not also a non-breaking space ({@code '\u005Cu00A0'},
11421      *      {@code '\u005Cu2007'}, {@code '\u005Cu202F'}).
11422      * <li> It is {@code '\u005Ct'}, U+0009 HORIZONTAL TABULATION.
11423      * <li> It is {@code '\u005Cn'}, U+000A LINE FEED.
11424      * <li> It is {@code '\u005Cu000B'}, U+000B VERTICAL TABULATION.
11425      * <li> It is {@code '\u005Cf'}, U+000C FORM FEED.
11426      * <li> It is {@code '\u005Cr'}, U+000D CARRIAGE RETURN.
11427      * <li> It is {@code '\u005Cu001C'}, U+001C FILE SEPARATOR.
11428      * <li> It is {@code '\u005Cu001D'}, U+001D GROUP SEPARATOR.
11429      * <li> It is {@code '\u005Cu001E'}, U+001E RECORD SEPARATOR.
11430      * <li> It is {@code '\u005Cu001F'}, U+001F UNIT SEPARATOR.
11431      * </ul>
11432      *
11433      * @param   codePoint the character (Unicode code point) to be tested.
11434      * @return  {@code true} if the character is a Java whitespace
11435      *          character; {@code false} otherwise.
11436      * @see     Character#isSpaceChar(int)
11437      * @since   1.5
11438      */
11439     public static boolean isWhitespace(int codePoint) {
11440         return CharacterData.of(codePoint).isWhitespace(codePoint);
11441     }
11442 
11443     /**
11444      * Determines if the specified character is an ISO control
11445      * character.  A character is considered to be an ISO control
11446      * character if its code is in the range {@code '\u005Cu0000'}
11447      * through {@code '\u005Cu001F'} or in the range
11448      * {@code '\u005Cu007F'} through {@code '\u005Cu009F'}.
11449      *
11450      * <p><b>Note:</b> This method cannot handle <a
11451      * href="#supplementary"> supplementary characters</a>. To support
11452      * all Unicode characters, including supplementary characters, use
11453      * the {@link #isISOControl(int)} method.
11454      *
11455      * @param   ch      the character to be tested.
11456      * @return  {@code true} if the character is an ISO control character;
11457      *          {@code false} otherwise.
11458      *
11459      * @see     Character#isSpaceChar(char)
11460      * @see     Character#isWhitespace(char)
11461      * @since   1.1
11462      */
11463     public static boolean isISOControl(char ch) {
11464         return isISOControl((int)ch);
11465     }
11466 
11467     /**
11468      * Determines if the referenced character (Unicode code point) is an ISO control
11469      * character.  A character is considered to be an ISO control
11470      * character if its code is in the range {@code '\u005Cu0000'}
11471      * through {@code '\u005Cu001F'} or in the range
11472      * {@code '\u005Cu007F'} through {@code '\u005Cu009F'}.
11473      *
11474      * @param   codePoint the character (Unicode code point) to be tested.
11475      * @return  {@code true} if the character is an ISO control character;
11476      *          {@code false} otherwise.
11477      * @see     Character#isSpaceChar(int)
11478      * @see     Character#isWhitespace(int)
11479      * @since   1.5
11480      */
11481     public static boolean isISOControl(int codePoint) {
11482         // Optimized form of:
11483         //     (codePoint >= 0x00 && codePoint <= 0x1F) ||
11484         //     (codePoint >= 0x7F && codePoint <= 0x9F);
11485         return codePoint <= 0x9F &&
11486             (codePoint >= 0x7F || (codePoint >>> 5 == 0));
11487     }
11488 
11489     /**
11490      * Returns a value indicating a character's general category.
11491      *
11492      * <p><b>Note:</b> This method cannot handle <a
11493      * href="#supplementary"> supplementary characters</a>. To support
11494      * all Unicode characters, including supplementary characters, use
11495      * the {@link #getType(int)} method.
11496      *
11497      * @param   ch      the character to be tested.
11498      * @return  a value of type {@code int} representing the
11499      *          character's general category.
11500      * @see     Character#COMBINING_SPACING_MARK
11501      * @see     Character#CONNECTOR_PUNCTUATION
11502      * @see     Character#CONTROL
11503      * @see     Character#CURRENCY_SYMBOL
11504      * @see     Character#DASH_PUNCTUATION
11505      * @see     Character#DECIMAL_DIGIT_NUMBER
11506      * @see     Character#ENCLOSING_MARK
11507      * @see     Character#END_PUNCTUATION
11508      * @see     Character#FINAL_QUOTE_PUNCTUATION
11509      * @see     Character#FORMAT
11510      * @see     Character#INITIAL_QUOTE_PUNCTUATION
11511      * @see     Character#LETTER_NUMBER
11512      * @see     Character#LINE_SEPARATOR
11513      * @see     Character#LOWERCASE_LETTER
11514      * @see     Character#MATH_SYMBOL
11515      * @see     Character#MODIFIER_LETTER
11516      * @see     Character#MODIFIER_SYMBOL
11517      * @see     Character#NON_SPACING_MARK
11518      * @see     Character#OTHER_LETTER
11519      * @see     Character#OTHER_NUMBER
11520      * @see     Character#OTHER_PUNCTUATION
11521      * @see     Character#OTHER_SYMBOL
11522      * @see     Character#PARAGRAPH_SEPARATOR
11523      * @see     Character#PRIVATE_USE
11524      * @see     Character#SPACE_SEPARATOR
11525      * @see     Character#START_PUNCTUATION
11526      * @see     Character#SURROGATE
11527      * @see     Character#TITLECASE_LETTER
11528      * @see     Character#UNASSIGNED
11529      * @see     Character#UPPERCASE_LETTER
11530      * @since   1.1
11531      */
11532     public static int getType(char ch) {
11533         return getType((int)ch);
11534     }
11535 
11536     /**
11537      * Returns a value indicating a character's general category.
11538      *
11539      * @param   codePoint the character (Unicode code point) to be tested.
11540      * @return  a value of type {@code int} representing the
11541      *          character's general category.
11542      * @see     Character#COMBINING_SPACING_MARK COMBINING_SPACING_MARK
11543      * @see     Character#CONNECTOR_PUNCTUATION CONNECTOR_PUNCTUATION
11544      * @see     Character#CONTROL CONTROL
11545      * @see     Character#CURRENCY_SYMBOL CURRENCY_SYMBOL
11546      * @see     Character#DASH_PUNCTUATION DASH_PUNCTUATION
11547      * @see     Character#DECIMAL_DIGIT_NUMBER DECIMAL_DIGIT_NUMBER
11548      * @see     Character#ENCLOSING_MARK ENCLOSING_MARK
11549      * @see     Character#END_PUNCTUATION END_PUNCTUATION
11550      * @see     Character#FINAL_QUOTE_PUNCTUATION FINAL_QUOTE_PUNCTUATION
11551      * @see     Character#FORMAT FORMAT
11552      * @see     Character#INITIAL_QUOTE_PUNCTUATION INITIAL_QUOTE_PUNCTUATION
11553      * @see     Character#LETTER_NUMBER LETTER_NUMBER
11554      * @see     Character#LINE_SEPARATOR LINE_SEPARATOR
11555      * @see     Character#LOWERCASE_LETTER LOWERCASE_LETTER
11556      * @see     Character#MATH_SYMBOL MATH_SYMBOL
11557      * @see     Character#MODIFIER_LETTER MODIFIER_LETTER
11558      * @see     Character#MODIFIER_SYMBOL MODIFIER_SYMBOL
11559      * @see     Character#NON_SPACING_MARK NON_SPACING_MARK
11560      * @see     Character#OTHER_LETTER OTHER_LETTER
11561      * @see     Character#OTHER_NUMBER OTHER_NUMBER
11562      * @see     Character#OTHER_PUNCTUATION OTHER_PUNCTUATION
11563      * @see     Character#OTHER_SYMBOL OTHER_SYMBOL
11564      * @see     Character#PARAGRAPH_SEPARATOR PARAGRAPH_SEPARATOR
11565      * @see     Character#PRIVATE_USE PRIVATE_USE
11566      * @see     Character#SPACE_SEPARATOR SPACE_SEPARATOR
11567      * @see     Character#START_PUNCTUATION START_PUNCTUATION
11568      * @see     Character#SURROGATE SURROGATE
11569      * @see     Character#TITLECASE_LETTER TITLECASE_LETTER
11570      * @see     Character#UNASSIGNED UNASSIGNED
11571      * @see     Character#UPPERCASE_LETTER UPPERCASE_LETTER
11572      * @since   1.5
11573      */
11574     public static int getType(int codePoint) {
11575         return CharacterData.of(codePoint).getType(codePoint);
11576     }
11577 
11578     /**
11579      * Determines the character representation for a specific digit in
11580      * the specified radix. If the value of {@code radix} is not a
11581      * valid radix, or the value of {@code digit} is not a valid
11582      * digit in the specified radix, the null character
11583      * ({@code '\u005Cu0000'}) is returned.
11584      * <p>
11585      * The {@code radix} argument is valid if it is greater than or
11586      * equal to {@code MIN_RADIX} and less than or equal to
11587      * {@code MAX_RADIX}. The {@code digit} argument is valid if
11588      * {@code 0 <= digit < radix}.
11589      * <p>
11590      * If the digit is less than 10, then
11591      * {@code '0' + digit} is returned. Otherwise, the value
11592      * {@code 'a' + digit - 10} is returned.
11593      *
11594      * @param   digit   the number to convert to a character.
11595      * @param   radix   the radix.
11596      * @return  the {@code char} representation of the specified digit
11597      *          in the specified radix.
11598      * @see     Character#MIN_RADIX
11599      * @see     Character#MAX_RADIX
11600      * @see     Character#digit(char, int)
11601      */
11602     public static char forDigit(int digit, int radix) {
11603         if ((digit >= radix) || (digit < 0)) {
11604             return '\0';
11605         }
11606         if ((radix < Character.MIN_RADIX) || (radix > Character.MAX_RADIX)) {
11607             return '\0';
11608         }
11609         if (digit < 10) {
11610             return (char)('0' + digit);
11611         }
11612         return (char)('a' - 10 + digit);
11613     }
11614 
11615     /**
11616      * Returns the Unicode directionality property for the given
11617      * character.  Character directionality is used to calculate the
11618      * visual ordering of text. The directionality value of undefined
11619      * {@code char} values is {@code DIRECTIONALITY_UNDEFINED}.
11620      *
11621      * <p><b>Note:</b> This method cannot handle <a
11622      * href="#supplementary"> supplementary characters</a>. To support
11623      * all Unicode characters, including supplementary characters, use
11624      * the {@link #getDirectionality(int)} method.
11625      *
11626      * @param  ch {@code char} for which the directionality property
11627      *            is requested.
11628      * @return the directionality property of the {@code char} value.
11629      *
11630      * @see Character#DIRECTIONALITY_UNDEFINED
11631      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT
11632      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT
11633      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC
11634      * @see Character#DIRECTIONALITY_EUROPEAN_NUMBER
11635      * @see Character#DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR
11636      * @see Character#DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR
11637      * @see Character#DIRECTIONALITY_ARABIC_NUMBER
11638      * @see Character#DIRECTIONALITY_COMMON_NUMBER_SEPARATOR
11639      * @see Character#DIRECTIONALITY_NONSPACING_MARK
11640      * @see Character#DIRECTIONALITY_BOUNDARY_NEUTRAL
11641      * @see Character#DIRECTIONALITY_PARAGRAPH_SEPARATOR
11642      * @see Character#DIRECTIONALITY_SEGMENT_SEPARATOR
11643      * @see Character#DIRECTIONALITY_WHITESPACE
11644      * @see Character#DIRECTIONALITY_OTHER_NEUTRALS
11645      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING
11646      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE
11647      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING
11648      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE
11649      * @see Character#DIRECTIONALITY_POP_DIRECTIONAL_FORMAT
11650      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT_ISOLATE
11651      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_ISOLATE
11652      * @see Character#DIRECTIONALITY_FIRST_STRONG_ISOLATE
11653      * @see Character#DIRECTIONALITY_POP_DIRECTIONAL_ISOLATE
11654      * @since 1.4
11655      */
11656     public static byte getDirectionality(char ch) {
11657         return getDirectionality((int)ch);
11658     }
11659 
11660     /**
11661      * Returns the Unicode directionality property for the given
11662      * character (Unicode code point).  Character directionality is
11663      * used to calculate the visual ordering of text. The
11664      * directionality value of undefined character is {@link
11665      * #DIRECTIONALITY_UNDEFINED}.
11666      *
11667      * @param   codePoint the character (Unicode code point) for which
11668      *          the directionality property is requested.
11669      * @return the directionality property of the character.
11670      *
11671      * @see Character#DIRECTIONALITY_UNDEFINED DIRECTIONALITY_UNDEFINED
11672      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT DIRECTIONALITY_LEFT_TO_RIGHT
11673      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT DIRECTIONALITY_RIGHT_TO_LEFT
11674      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC
11675      * @see Character#DIRECTIONALITY_EUROPEAN_NUMBER DIRECTIONALITY_EUROPEAN_NUMBER
11676      * @see Character#DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR
11677      * @see Character#DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR
11678      * @see Character#DIRECTIONALITY_ARABIC_NUMBER DIRECTIONALITY_ARABIC_NUMBER
11679      * @see Character#DIRECTIONALITY_COMMON_NUMBER_SEPARATOR DIRECTIONALITY_COMMON_NUMBER_SEPARATOR
11680      * @see Character#DIRECTIONALITY_NONSPACING_MARK DIRECTIONALITY_NONSPACING_MARK
11681      * @see Character#DIRECTIONALITY_BOUNDARY_NEUTRAL DIRECTIONALITY_BOUNDARY_NEUTRAL
11682      * @see Character#DIRECTIONALITY_PARAGRAPH_SEPARATOR DIRECTIONALITY_PARAGRAPH_SEPARATOR
11683      * @see Character#DIRECTIONALITY_SEGMENT_SEPARATOR DIRECTIONALITY_SEGMENT_SEPARATOR
11684      * @see Character#DIRECTIONALITY_WHITESPACE DIRECTIONALITY_WHITESPACE
11685      * @see Character#DIRECTIONALITY_OTHER_NEUTRALS DIRECTIONALITY_OTHER_NEUTRALS
11686      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING
11687      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE
11688      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING
11689      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE
11690      * @see Character#DIRECTIONALITY_POP_DIRECTIONAL_FORMAT DIRECTIONALITY_POP_DIRECTIONAL_FORMAT
11691      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT_ISOLATE DIRECTIONALITY_LEFT_TO_RIGHT_ISOLATE
11692      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_ISOLATE DIRECTIONALITY_RIGHT_TO_LEFT_ISOLATE
11693      * @see Character#DIRECTIONALITY_FIRST_STRONG_ISOLATE DIRECTIONALITY_FIRST_STRONG_ISOLATE
11694      * @see Character#DIRECTIONALITY_POP_DIRECTIONAL_ISOLATE DIRECTIONALITY_POP_DIRECTIONAL_ISOLATE
11695      * @since    1.5
11696      */
11697     public static byte getDirectionality(int codePoint) {
11698         return CharacterData.of(codePoint).getDirectionality(codePoint);
11699     }
11700 
11701     /**
11702      * Determines whether the character is mirrored according to the
11703      * Unicode specification.  Mirrored characters should have their
11704      * glyphs horizontally mirrored when displayed in text that is
11705      * right-to-left.  For example, {@code '\u005Cu0028'} LEFT
11706      * PARENTHESIS is semantically defined to be an <i>opening
11707      * parenthesis</i>.  This will appear as a "(" in text that is
11708      * left-to-right but as a ")" in text that is right-to-left.
11709      *
11710      * <p><b>Note:</b> This method cannot handle <a
11711      * href="#supplementary"> supplementary characters</a>. To support
11712      * all Unicode characters, including supplementary characters, use
11713      * the {@link #isMirrored(int)} method.
11714      *
11715      * @param  ch {@code char} for which the mirrored property is requested
11716      * @return {@code true} if the char is mirrored, {@code false}
11717      *         if the {@code char} is not mirrored or is not defined.
11718      * @since 1.4
11719      */
11720     public static boolean isMirrored(char ch) {
11721         return isMirrored((int)ch);
11722     }
11723 
11724     /**
11725      * Determines whether the specified character (Unicode code point)
11726      * is mirrored according to the Unicode specification.  Mirrored
11727      * characters should have their glyphs horizontally mirrored when
11728      * displayed in text that is right-to-left.  For example,
11729      * {@code '\u005Cu0028'} LEFT PARENTHESIS is semantically
11730      * defined to be an <i>opening parenthesis</i>.  This will appear
11731      * as a "(" in text that is left-to-right but as a ")" in text
11732      * that is right-to-left.
11733      *
11734      * @param   codePoint the character (Unicode code point) to be tested.
11735      * @return  {@code true} if the character is mirrored, {@code false}
11736      *          if the character is not mirrored or is not defined.
11737      * @since   1.5
11738      */
11739     public static boolean isMirrored(int codePoint) {
11740         return CharacterData.of(codePoint).isMirrored(codePoint);
11741     }
11742 
11743     /**
11744      * Compares two {@code Character} objects numerically.
11745      *
11746      * @param   anotherCharacter   the {@code Character} to be compared.
11747      * @return  the value {@code 0} if the argument {@code Character}
11748      *          is equal to this {@code Character}; a value less than
11749      *          {@code 0} if this {@code Character} is numerically less
11750      *          than the {@code Character} argument; and a value greater than
11751      *          {@code 0} if this {@code Character} is numerically greater
11752      *          than the {@code Character} argument (unsigned comparison).
11753      *          Note that this is strictly a numerical comparison; it is not
11754      *          locale-dependent.
11755      * @since   1.2
11756      */
11757     public int compareTo(Character anotherCharacter) {
11758         return compare(this.value, anotherCharacter.value);
11759     }
11760 
11761     /**
11762      * Compares two {@code char} values numerically.
11763      * The value returned is identical to what would be returned by:
11764      * <pre>
11765      *    Character.valueOf(x).compareTo(Character.valueOf(y))
11766      * </pre>
11767      *
11768      * @param  x the first {@code char} to compare
11769      * @param  y the second {@code char} to compare
11770      * @return the value {@code 0} if {@code x == y};
11771      *         a value less than {@code 0} if {@code x < y}; and
11772      *         a value greater than {@code 0} if {@code x > y}
11773      * @since 1.7
11774      */
11775     public static int compare(char x, char y) {
11776         return x - y;
11777     }
11778 
11779     /**
11780      * Converts the character (Unicode code point) argument to uppercase using
11781      * information from the UnicodeData file.
11782      *
11783      * @param   codePoint   the character (Unicode code point) to be converted.
11784      * @return  either the uppercase equivalent of the character, if
11785      *          any, or an error flag ({@code Character.ERROR})
11786      *          that indicates that a 1:M {@code char} mapping exists.
11787      * @see     Character#isLowerCase(char)
11788      * @see     Character#isUpperCase(char)
11789      * @see     Character#toLowerCase(char)
11790      * @see     Character#toTitleCase(char)
11791      * @since 1.4
11792      */
11793     static int toUpperCaseEx(int codePoint) {
11794         assert isValidCodePoint(codePoint);
11795         return CharacterData.of(codePoint).toUpperCaseEx(codePoint);
11796     }
11797 
11798     /**
11799      * Converts the character (Unicode code point) argument to uppercase using case
11800      * mapping information from the SpecialCasing file in the Unicode
11801      * specification. If a character has no explicit uppercase
11802      * mapping, then the {@code char} itself is returned in the
11803      * {@code char[]}.
11804      *
11805      * @param   codePoint   the character (Unicode code point) to be converted.
11806      * @return a {@code char[]} with the uppercased character.
11807      * @since 1.4
11808      */
11809     static char[] toUpperCaseCharArray(int codePoint) {
11810         // As of Unicode 6.0, 1:M uppercasings only happen in the BMP.
11811         assert isBmpCodePoint(codePoint);
11812         return CharacterData.of(codePoint).toUpperCaseCharArray(codePoint);
11813     }
11814 
11815     /**
11816      * The number of bits used to represent a {@code char} value in unsigned
11817      * binary form, constant {@code 16}.
11818      *
11819      * @since 1.5
11820      */
11821     public static final int SIZE = 16;
11822 
11823     /**
11824      * The number of bytes used to represent a {@code char} value in unsigned
11825      * binary form.
11826      *
11827      * @since 1.8
11828      */
11829     public static final int BYTES = SIZE / Byte.SIZE;
11830 
11831     /**
11832      * Returns the value obtained by reversing the order of the bytes in the
11833      * specified {@code char} value.
11834      *
11835      * @param ch The {@code char} of which to reverse the byte order.
11836      * @return the value obtained by reversing (or, equivalently, swapping)
11837      *     the bytes in the specified {@code char} value.
11838      * @since 1.5
11839      */
11840     @IntrinsicCandidate
11841     public static char reverseBytes(char ch) {
11842         return (char) (((ch & 0xFF00) >> 8) | (ch << 8));
11843     }
11844 
11845     /**
11846      * Returns the name of the specified character
11847      * {@code codePoint}, or null if the code point is
11848      * {@link #UNASSIGNED unassigned}.
11849      * <p>
11850      * If the specified character is not assigned a name by
11851      * the <i>UnicodeData</i> file (part of the Unicode Character
11852      * Database maintained by the Unicode Consortium), the returned
11853      * name is the same as the result of the expression:
11854      *
11855      * <blockquote>{@code
11856      *     Character.UnicodeBlock.of(codePoint).toString().replace('_', ' ')
11857      *     + " "
11858      *     + Integer.toHexString(codePoint).toUpperCase(Locale.ROOT);
11859      *
11860      * }</blockquote>
11861      *
11862      * For the {@code codePoint}s in the <i>UnicodeData</i> file, the name
11863      * returned by this method follows the naming scheme in the
11864      * "Unicode Name Property" section of the Unicode Standard. For other
11865      * code points, such as Hangul/Ideographs, The name generation rule above
11866      * differs from the one defined in the Unicode Standard.
11867      *
11868      * @param  codePoint the character (Unicode code point)
11869      *
11870      * @return the name of the specified character, or null if
11871      *         the code point is unassigned.
11872      *
11873      * @throws IllegalArgumentException if the specified
11874      *            {@code codePoint} is not a valid Unicode
11875      *            code point.
11876      *
11877      * @since 1.7
11878      */
11879     public static String getName(int codePoint) {
11880         if (!isValidCodePoint(codePoint)) {
11881             throw new IllegalArgumentException(
11882                 String.format("Not a valid Unicode code point: 0x%X", codePoint));
11883         }
11884         String name = CharacterName.getInstance().getName(codePoint);
11885         if (name != null)
11886             return name;
11887         if (getType(codePoint) == UNASSIGNED)
11888             return null;
11889         UnicodeBlock block = UnicodeBlock.of(codePoint);
11890         if (block != null)
11891             return block.toString().replace('_', ' ') + " "
11892                    + Integer.toHexString(codePoint).toUpperCase(Locale.ROOT);
11893         // should never come here
11894         return Integer.toHexString(codePoint).toUpperCase(Locale.ROOT);
11895     }
11896 
11897     /**
11898      * Returns the code point value of the Unicode character specified by
11899      * the given character name.
11900      * <p>
11901      * If a character is not assigned a name by the <i>UnicodeData</i>
11902      * file (part of the Unicode Character Database maintained by the Unicode
11903      * Consortium), its name is defined as the result of the expression:
11904      *
11905      * <blockquote>{@code
11906      *     Character.UnicodeBlock.of(codePoint).toString().replace('_', ' ')
11907      *     + " "
11908      *     + Integer.toHexString(codePoint).toUpperCase(Locale.ROOT);
11909      *
11910      * }</blockquote>
11911      * <p>
11912      * The {@code name} matching is case insensitive, with any leading and
11913      * trailing whitespace character removed.
11914      *
11915      * For the code points in the <i>UnicodeData</i> file, this method
11916      * recognizes the name which conforms to the name defined in the
11917      * "Unicode Name Property" section in the Unicode Standard. For other
11918      * code points, this method recognizes the name generated with
11919      * {@link #getName(int)} method.
11920      *
11921      * @param  name the character name
11922      *
11923      * @return the code point value of the character specified by its name.
11924      *
11925      * @throws IllegalArgumentException if the specified {@code name}
11926      *         is not a valid character name.
11927      * @throws NullPointerException if {@code name} is {@code null}
11928      *
11929      * @since 9
11930      */
11931     public static int codePointOf(String name) {
11932         name = name.trim().toUpperCase(Locale.ROOT);
11933         int cp = CharacterName.getInstance().getCodePoint(name);
11934         if (cp != -1)
11935             return cp;
11936         try {
11937             int off = name.lastIndexOf(' ');
11938             if (off != -1) {
11939                 cp = Integer.parseInt(name, off + 1, name.length(), 16);
11940                 if (isValidCodePoint(cp) && name.equals(getName(cp)))
11941                     return cp;
11942             }
11943         } catch (Exception x) {}
11944         throw new IllegalArgumentException("Unrecognized character name :" + name);
11945     }
11946 }