1 /*
   2  * Copyright (c) 2002, 2019, 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 java.util.Arrays;
  29 import java.util.Map;
  30 import java.util.HashMap;
  31 import java.util.Locale;
  32 
  33 import jdk.internal.HotSpotIntrinsicCandidate;
  34 import jdk.internal.misc.VM;
  35 
  36 /**
  37  * The {@code Character} class wraps a value of the primitive
  38  * type {@code char} in an object. An object of class
  39  * {@code Character} contains a single field whose type is
  40  * {@code char}.
  41  * <p>
  42  * In addition, this class provides a large number of static methods for
  43  * determining a character's category (lowercase letter, digit, etc.)
  44  * and for converting characters from uppercase to lowercase and vice
  45  * versa.
  46  *
  47  * <h3><a id="conformance">Unicode Conformance</a></h3>
  48  * <p>
  49  * The fields and methods of class {@code Character} are defined in terms
  50  * of character information from the Unicode Standard, specifically the
  51  * <i>UnicodeData</i> file that is part of the Unicode Character Database.
  52  * This file specifies properties including name and category for every
  53  * assigned Unicode code point or character range. The file is available
  54  * from the Unicode Consortium at
  55  * <a href="http://www.unicode.org">http://www.unicode.org</a>.
  56  * <p> 
  57  * The Java SE 12 Platform uses character information from version 11.0
  58  * of the Unicode Standard, plus the Japanese Era code point,
  59  * {@code U+32FF}, from the first version of the Unicode Standard
  60  * after 11.0 that assigns the code point.
  61  *
  62  * <h3><a id="unicode">Unicode Character Representations</a></h3>
  63  *
  64  * <p>The {@code char} data type (and therefore the value that a
  65  * {@code Character} object encapsulates) are based on the
  66  * original Unicode specification, which defined characters as
  67  * fixed-width 16-bit entities. The Unicode Standard has since been
  68  * changed to allow for characters whose representation requires more
  69  * than 16 bits.  The range of legal <em>code point</em>s is now
  70  * U+0000 to U+10FFFF, known as <em>Unicode scalar value</em>.
  71  * (Refer to the <a
  72  * href="http://www.unicode.org/reports/tr27/#notation"><i>
  73  * definition</i></a> of the U+<i>n</i> notation in the Unicode
  74  * Standard.)
  75  *
  76  * <p><a id="BMP">The set of characters from U+0000 to U+FFFF</a> is
  77  * sometimes referred to as the <em>Basic Multilingual Plane (BMP)</em>.
  78  * <a id="supplementary">Characters</a> whose code points are greater
  79  * than U+FFFF are called <em>supplementary character</em>s.  The Java
  80  * platform uses the UTF-16 representation in {@code char} arrays and
  81  * in the {@code String} and {@code StringBuffer} classes. In
  82  * this representation, supplementary characters are represented as a pair
  83  * of {@code char} values, the first from the <em>high-surrogates</em>
  84  * range, (\uD800-\uDBFF), the second from the
  85  * <em>low-surrogates</em> range (\uDC00-\uDFFF).
  86  *
  87  * <p>A {@code char} value, therefore, represents Basic
  88  * Multilingual Plane (BMP) code points, including the surrogate
  89  * code points, or code units of the UTF-16 encoding. An
  90  * {@code int} value represents all Unicode code points,
  91  * including supplementary code points. The lower (least significant)
  92  * 21 bits of {@code int} are used to represent Unicode code
  93  * points and the upper (most significant) 11 bits must be zero.
  94  * Unless otherwise specified, the behavior with respect to
  95  * supplementary characters and surrogate {@code char} values is
  96  * as follows:
  97  *
  98  * <ul>
  99  * <li>The methods that only accept a {@code char} value cannot support
 100  * supplementary characters. They treat {@code char} values from the
 101  * surrogate ranges as undefined characters. For example,
 102  * {@code Character.isLetter('\u005CuD840')} returns {@code false}, even though
 103  * this specific value if followed by any low-surrogate value in a string
 104  * would represent a letter.
 105  *
 106  * <li>The methods that accept an {@code int} value support all
 107  * Unicode characters, including supplementary characters. For
 108  * example, {@code Character.isLetter(0x2F81A)} returns
 109  * {@code true} because the code point value represents a letter
 110  * (a CJK ideograph).
 111  * </ul>
 112  *
 113  * <p>In the Java SE API documentation, <em>Unicode code point</em> is
 114  * used for character values in the range between U+0000 and U+10FFFF,
 115  * and <em>Unicode code unit</em> is used for 16-bit
 116  * {@code char} values that are code units of the <em>UTF-16</em>
 117  * encoding. For more information on Unicode terminology, refer to the
 118  * <a href="http://www.unicode.org/glossary/">Unicode Glossary</a>.
 119  *
 120  * @author  Lee Boynton
 121  * @author  Guy Steele
 122  * @author  Akira Tanaka
 123  * @author  Martin Buchholz
 124  * @author  Ulf Zibis
 125  * @since   1.0
 126  */
 127 public final
 128 class Character implements java.io.Serializable, Comparable<Character> {
 129     /**
 130      * The minimum radix available for conversion to and from strings.
 131      * The constant value of this field is the smallest value permitted
 132      * for the radix argument in radix-conversion methods such as the
 133      * {@code digit} method, the {@code forDigit} method, and the
 134      * {@code toString} method of class {@code Integer}.
 135      *
 136      * @see     Character#digit(char, int)
 137      * @see     Character#forDigit(int, int)
 138      * @see     Integer#toString(int, int)
 139      * @see     Integer#valueOf(String)
 140      */
 141     public static final int MIN_RADIX = 2;
 142 
 143     /**
 144      * The maximum radix available for conversion to and from strings.
 145      * The constant value of this field is the largest value permitted
 146      * for the radix argument in radix-conversion methods such as the
 147      * {@code digit} method, the {@code forDigit} method, and the
 148      * {@code toString} method of class {@code Integer}.
 149      *
 150      * @see     Character#digit(char, int)
 151      * @see     Character#forDigit(int, int)
 152      * @see     Integer#toString(int, int)
 153      * @see     Integer#valueOf(String)
 154      */
 155     public static final int MAX_RADIX = 36;
 156 
 157     /**
 158      * The constant value of this field is the smallest value of type
 159      * {@code char}, {@code '\u005Cu0000'}.
 160      *
 161      * @since   1.0.2
 162      */
 163     public static final char MIN_VALUE = '\u0000';
 164 
 165     /**
 166      * The constant value of this field is the largest value of type
 167      * {@code char}, {@code '\u005CuFFFF'}.
 168      *
 169      * @since   1.0.2
 170      */
 171     public static final char MAX_VALUE = '\uFFFF';
 172 
 173     /**
 174      * The {@code Class} instance representing the primitive type
 175      * {@code char}.
 176      *
 177      * @since   1.1
 178      */
 179     @SuppressWarnings("unchecked")
 180     public static final Class<Character> TYPE = (Class<Character>) Class.getPrimitiveClass("char");
 181 
 182     /*
 183      * Normative general types
 184      */
 185 
 186     /*
 187      * General character types
 188      */
 189 
 190     /**
 191      * General category "Cn" in the Unicode specification.
 192      * @since   1.1
 193      */
 194     public static final byte UNASSIGNED = 0;
 195 
 196     /**
 197      * General category "Lu" in the Unicode specification.
 198      * @since   1.1
 199      */
 200     public static final byte UPPERCASE_LETTER = 1;
 201 
 202     /**
 203      * General category "Ll" in the Unicode specification.
 204      * @since   1.1
 205      */
 206     public static final byte LOWERCASE_LETTER = 2;
 207 
 208     /**
 209      * General category "Lt" in the Unicode specification.
 210      * @since   1.1
 211      */
 212     public static final byte TITLECASE_LETTER = 3;
 213 
 214     /**
 215      * General category "Lm" in the Unicode specification.
 216      * @since   1.1
 217      */
 218     public static final byte MODIFIER_LETTER = 4;
 219 
 220     /**
 221      * General category "Lo" in the Unicode specification.
 222      * @since   1.1
 223      */
 224     public static final byte OTHER_LETTER = 5;
 225 
 226     /**
 227      * General category "Mn" in the Unicode specification.
 228      * @since   1.1
 229      */
 230     public static final byte NON_SPACING_MARK = 6;
 231 
 232     /**
 233      * General category "Me" in the Unicode specification.
 234      * @since   1.1
 235      */
 236     public static final byte ENCLOSING_MARK = 7;
 237 
 238     /**
 239      * General category "Mc" in the Unicode specification.
 240      * @since   1.1
 241      */
 242     public static final byte COMBINING_SPACING_MARK = 8;
 243 
 244     /**
 245      * General category "Nd" in the Unicode specification.
 246      * @since   1.1
 247      */
 248     public static final byte DECIMAL_DIGIT_NUMBER        = 9;
 249 
 250     /**
 251      * General category "Nl" in the Unicode specification.
 252      * @since   1.1
 253      */
 254     public static final byte LETTER_NUMBER = 10;
 255 
 256     /**
 257      * General category "No" in the Unicode specification.
 258      * @since   1.1
 259      */
 260     public static final byte OTHER_NUMBER = 11;
 261 
 262     /**
 263      * General category "Zs" in the Unicode specification.
 264      * @since   1.1
 265      */
 266     public static final byte SPACE_SEPARATOR = 12;
 267 
 268     /**
 269      * General category "Zl" in the Unicode specification.
 270      * @since   1.1
 271      */
 272     public static final byte LINE_SEPARATOR = 13;
 273 
 274     /**
 275      * General category "Zp" in the Unicode specification.
 276      * @since   1.1
 277      */
 278     public static final byte PARAGRAPH_SEPARATOR = 14;
 279 
 280     /**
 281      * General category "Cc" in the Unicode specification.
 282      * @since   1.1
 283      */
 284     public static final byte CONTROL = 15;
 285 
 286     /**
 287      * General category "Cf" in the Unicode specification.
 288      * @since   1.1
 289      */
 290     public static final byte FORMAT = 16;
 291 
 292     /**
 293      * General category "Co" in the Unicode specification.
 294      * @since   1.1
 295      */
 296     public static final byte PRIVATE_USE = 18;
 297 
 298     /**
 299      * General category "Cs" in the Unicode specification.
 300      * @since   1.1
 301      */
 302     public static final byte SURROGATE = 19;
 303 
 304     /**
 305      * General category "Pd" in the Unicode specification.
 306      * @since   1.1
 307      */
 308     public static final byte DASH_PUNCTUATION = 20;
 309 
 310     /**
 311      * General category "Ps" in the Unicode specification.
 312      * @since   1.1
 313      */
 314     public static final byte START_PUNCTUATION = 21;
 315 
 316     /**
 317      * General category "Pe" in the Unicode specification.
 318      * @since   1.1
 319      */
 320     public static final byte END_PUNCTUATION = 22;
 321 
 322     /**
 323      * General category "Pc" in the Unicode specification.
 324      * @since   1.1
 325      */
 326     public static final byte CONNECTOR_PUNCTUATION = 23;
 327 
 328     /**
 329      * General category "Po" in the Unicode specification.
 330      * @since   1.1
 331      */
 332     public static final byte OTHER_PUNCTUATION = 24;
 333 
 334     /**
 335      * General category "Sm" in the Unicode specification.
 336      * @since   1.1
 337      */
 338     public static final byte MATH_SYMBOL = 25;
 339 
 340     /**
 341      * General category "Sc" in the Unicode specification.
 342      * @since   1.1
 343      */
 344     public static final byte CURRENCY_SYMBOL = 26;
 345 
 346     /**
 347      * General category "Sk" in the Unicode specification.
 348      * @since   1.1
 349      */
 350     public static final byte MODIFIER_SYMBOL = 27;
 351 
 352     /**
 353      * General category "So" in the Unicode specification.
 354      * @since   1.1
 355      */
 356     public static final byte OTHER_SYMBOL = 28;
 357 
 358     /**
 359      * General category "Pi" in the Unicode specification.
 360      * @since   1.4
 361      */
 362     public static final byte INITIAL_QUOTE_PUNCTUATION = 29;
 363 
 364     /**
 365      * General category "Pf" in the Unicode specification.
 366      * @since   1.4
 367      */
 368     public static final byte FINAL_QUOTE_PUNCTUATION = 30;
 369 
 370     /**
 371      * Error flag. Use int (code point) to avoid confusion with U+FFFF.
 372      */
 373     static final int ERROR = 0xFFFFFFFF;
 374 
 375 
 376     /**
 377      * Undefined bidirectional character type. Undefined {@code char}
 378      * values have undefined directionality in the Unicode specification.
 379      * @since 1.4
 380      */
 381     public static final byte DIRECTIONALITY_UNDEFINED = -1;
 382 
 383     /**
 384      * Strong bidirectional character type "L" in the Unicode specification.
 385      * @since 1.4
 386      */
 387     public static final byte DIRECTIONALITY_LEFT_TO_RIGHT = 0;
 388 
 389     /**
 390      * Strong bidirectional character type "R" in the Unicode specification.
 391      * @since 1.4
 392      */
 393     public static final byte DIRECTIONALITY_RIGHT_TO_LEFT = 1;
 394 
 395     /**
 396     * Strong bidirectional character type "AL" in the Unicode specification.
 397      * @since 1.4
 398      */
 399     public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC = 2;
 400 
 401     /**
 402      * Weak bidirectional character type "EN" in the Unicode specification.
 403      * @since 1.4
 404      */
 405     public static final byte DIRECTIONALITY_EUROPEAN_NUMBER = 3;
 406 
 407     /**
 408      * Weak bidirectional character type "ES" in the Unicode specification.
 409      * @since 1.4
 410      */
 411     public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR = 4;
 412 
 413     /**
 414      * Weak bidirectional character type "ET" in the Unicode specification.
 415      * @since 1.4
 416      */
 417     public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR = 5;
 418 
 419     /**
 420      * Weak bidirectional character type "AN" in the Unicode specification.
 421      * @since 1.4
 422      */
 423     public static final byte DIRECTIONALITY_ARABIC_NUMBER = 6;
 424 
 425     /**
 426      * Weak bidirectional character type "CS" in the Unicode specification.
 427      * @since 1.4
 428      */
 429     public static final byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR = 7;
 430 
 431     /**
 432      * Weak bidirectional character type "NSM" in the Unicode specification.
 433      * @since 1.4
 434      */
 435     public static final byte DIRECTIONALITY_NONSPACING_MARK = 8;
 436 
 437     /**
 438      * Weak bidirectional character type "BN" in the Unicode specification.
 439      * @since 1.4
 440      */
 441     public static final byte DIRECTIONALITY_BOUNDARY_NEUTRAL = 9;
 442 
 443     /**
 444      * Neutral bidirectional character type "B" in the Unicode specification.
 445      * @since 1.4
 446      */
 447     public static final byte DIRECTIONALITY_PARAGRAPH_SEPARATOR = 10;
 448 
 449     /**
 450      * Neutral bidirectional character type "S" in the Unicode specification.
 451      * @since 1.4
 452      */
 453     public static final byte DIRECTIONALITY_SEGMENT_SEPARATOR = 11;
 454 
 455     /**
 456      * Neutral bidirectional character type "WS" in the Unicode specification.
 457      * @since 1.4
 458      */
 459     public static final byte DIRECTIONALITY_WHITESPACE = 12;
 460 
 461     /**
 462      * Neutral bidirectional character type "ON" in the Unicode specification.
 463      * @since 1.4
 464      */
 465     public static final byte DIRECTIONALITY_OTHER_NEUTRALS = 13;
 466 
 467     /**
 468      * Strong bidirectional character type "LRE" in the Unicode specification.
 469      * @since 1.4
 470      */
 471     public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING = 14;
 472 
 473     /**
 474      * Strong bidirectional character type "LRO" in the Unicode specification.
 475      * @since 1.4
 476      */
 477     public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE = 15;
 478 
 479     /**
 480      * Strong bidirectional character type "RLE" in the Unicode specification.
 481      * @since 1.4
 482      */
 483     public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING = 16;
 484 
 485     /**
 486      * Strong bidirectional character type "RLO" in the Unicode specification.
 487      * @since 1.4
 488      */
 489     public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE = 17;
 490 
 491     /**
 492      * Weak bidirectional character type "PDF" in the Unicode specification.
 493      * @since 1.4
 494      */
 495     public static final byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT = 18;
 496 
 497     /**
 498      * Weak bidirectional character type "LRI" in the Unicode specification.
 499      * @since 9
 500      */
 501     public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_ISOLATE = 19;
 502 
 503     /**
 504      * Weak bidirectional character type "RLI" in the Unicode specification.
 505      * @since 9
 506      */
 507     public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ISOLATE = 20;
 508 
 509     /**
 510      * Weak bidirectional character type "FSI" in the Unicode specification.
 511      * @since 9
 512      */
 513     public static final byte DIRECTIONALITY_FIRST_STRONG_ISOLATE = 21;
 514 
 515     /**
 516      * Weak bidirectional character type "PDI" in the Unicode specification.
 517      * @since 9
 518      */
 519     public static final byte DIRECTIONALITY_POP_DIRECTIONAL_ISOLATE = 22;
 520 
 521     /**
 522      * The minimum value of a
 523      * <a href="http://www.unicode.org/glossary/#high_surrogate_code_unit">
 524      * Unicode high-surrogate code unit</a>
 525      * in the UTF-16 encoding, constant {@code '\u005CuD800'}.
 526      * A high-surrogate is also known as a <i>leading-surrogate</i>.
 527      *
 528      * @since 1.5
 529      */
 530     public static final char MIN_HIGH_SURROGATE = '\uD800';
 531 
 532     /**
 533      * The maximum value of a
 534      * <a href="http://www.unicode.org/glossary/#high_surrogate_code_unit">
 535      * Unicode high-surrogate code unit</a>
 536      * in the UTF-16 encoding, constant {@code '\u005CuDBFF'}.
 537      * A high-surrogate is also known as a <i>leading-surrogate</i>.
 538      *
 539      * @since 1.5
 540      */
 541     public static final char MAX_HIGH_SURROGATE = '\uDBFF';
 542 
 543     /**
 544      * The minimum value of a
 545      * <a href="http://www.unicode.org/glossary/#low_surrogate_code_unit">
 546      * Unicode low-surrogate code unit</a>
 547      * in the UTF-16 encoding, constant {@code '\u005CuDC00'}.
 548      * A low-surrogate is also known as a <i>trailing-surrogate</i>.
 549      *
 550      * @since 1.5
 551      */
 552     public static final char MIN_LOW_SURROGATE  = '\uDC00';
 553 
 554     /**
 555      * The maximum value of a
 556      * <a href="http://www.unicode.org/glossary/#low_surrogate_code_unit">
 557      * Unicode low-surrogate code unit</a>
 558      * in the UTF-16 encoding, constant {@code '\u005CuDFFF'}.
 559      * A low-surrogate is also known as a <i>trailing-surrogate</i>.
 560      *
 561      * @since 1.5
 562      */
 563     public static final char MAX_LOW_SURROGATE  = '\uDFFF';
 564 
 565     /**
 566      * The minimum value of a Unicode surrogate code unit in the
 567      * UTF-16 encoding, constant {@code '\u005CuD800'}.
 568      *
 569      * @since 1.5
 570      */
 571     public static final char MIN_SURROGATE = MIN_HIGH_SURROGATE;
 572 
 573     /**
 574      * The maximum value of a Unicode surrogate code unit in the
 575      * UTF-16 encoding, constant {@code '\u005CuDFFF'}.
 576      *
 577      * @since 1.5
 578      */
 579     public static final char MAX_SURROGATE = MAX_LOW_SURROGATE;
 580 
 581     /**
 582      * The minimum value of a
 583      * <a href="http://www.unicode.org/glossary/#supplementary_code_point">
 584      * Unicode supplementary code point</a>, constant {@code U+10000}.
 585      *
 586      * @since 1.5
 587      */
 588     public static final int MIN_SUPPLEMENTARY_CODE_POINT = 0x010000;
 589 
 590     /**
 591      * The minimum value of a
 592      * <a href="http://www.unicode.org/glossary/#code_point">
 593      * Unicode code point</a>, constant {@code U+0000}.
 594      *
 595      * @since 1.5
 596      */
 597     public static final int MIN_CODE_POINT = 0x000000;
 598 
 599     /**
 600      * The maximum value of a
 601      * <a href="http://www.unicode.org/glossary/#code_point">
 602      * Unicode code point</a>, constant {@code U+10FFFF}.
 603      *
 604      * @since 1.5
 605      */
 606     public static final int MAX_CODE_POINT = 0X10FFFF;
 607 
 608 
 609     /**
 610      * Instances of this class represent particular subsets of the Unicode
 611      * character set.  The only family of subsets defined in the
 612      * {@code Character} class is {@link Character.UnicodeBlock}.
 613      * Other portions of the Java API may define other subsets for their
 614      * own purposes.
 615      *
 616      * @since 1.2
 617      */
 618     public static class Subset  {
 619 
 620         private String name;
 621 
 622         /**
 623          * Constructs a new {@code Subset} instance.
 624          *
 625          * @param  name  The name of this subset
 626          * @throws NullPointerException if name is {@code null}
 627          */
 628         protected Subset(String name) {
 629             if (name == null) {
 630                 throw new NullPointerException("name");
 631             }
 632             this.name = name;
 633         }
 634 
 635         /**
 636          * Compares two {@code Subset} objects for equality.
 637          * This method returns {@code true} if and only if
 638          * {@code this} and the argument refer to the same
 639          * object; since this method is {@code final}, this
 640          * guarantee holds for all subclasses.
 641          */
 642         public final boolean equals(Object obj) {
 643             return (this == obj);
 644         }
 645 
 646         /**
 647          * Returns the standard hash code as defined by the
 648          * {@link Object#hashCode} method.  This method
 649          * is {@code final} in order to ensure that the
 650          * {@code equals} and {@code hashCode} methods will
 651          * be consistent in all subclasses.
 652          */
 653         public final int hashCode() {
 654             return super.hashCode();
 655         }
 656 
 657         /**
 658          * Returns the name of this subset.
 659          */
 660         public final String toString() {
 661             return name;
 662         }
 663     }
 664 
 665     // See http://www.unicode.org/Public/UNIDATA/Blocks.txt
 666     // for the latest specification of Unicode Blocks.
 667 
 668     /**
 669      * A family of character subsets representing the character blocks in the
 670      * Unicode specification. Character blocks generally define characters
 671      * used for a specific script or purpose. A character is contained by
 672      * at most one Unicode block.
 673      *
 674      * @since 1.2
 675      */
 676     public static final class UnicodeBlock extends Subset {
 677         /**
 678          * 667  - the expected number of entities
 679          * 0.75 - the default load factor of HashMap
 680          */
 681         private static final int NUM_ENTITIES = 667;
 682         private static Map<String, UnicodeBlock> map =
 683                 new HashMap<>((int)(NUM_ENTITIES / 0.75f + 1.0f));
 684 
 685         /**
 686          * Creates a UnicodeBlock with the given identifier name.
 687          * This name must be the same as the block identifier.
 688          */
 689         private UnicodeBlock(String idName) {
 690             super(idName);
 691             map.put(idName, this);
 692         }
 693 
 694         /**
 695          * Creates a UnicodeBlock with the given identifier name and
 696          * alias name.
 697          */
 698         private UnicodeBlock(String idName, String alias) {
 699             this(idName);
 700             map.put(alias, this);
 701         }
 702 
 703         /**
 704          * Creates a UnicodeBlock with the given identifier name and
 705          * alias names.
 706          */
 707         private UnicodeBlock(String idName, String... aliases) {
 708             this(idName);
 709             for (String alias : aliases)
 710                 map.put(alias, this);
 711         }
 712 
 713         /**
 714          * Constant for the "Basic Latin" Unicode character block.
 715          * @since 1.2
 716          */
 717         public static final UnicodeBlock  BASIC_LATIN =
 718             new UnicodeBlock("BASIC_LATIN",
 719                              "BASIC LATIN",
 720                              "BASICLATIN");
 721 
 722         /**
 723          * Constant for the "Latin-1 Supplement" Unicode character block.
 724          * @since 1.2
 725          */
 726         public static final UnicodeBlock LATIN_1_SUPPLEMENT =
 727             new UnicodeBlock("LATIN_1_SUPPLEMENT",
 728                              "LATIN-1 SUPPLEMENT",
 729                              "LATIN-1SUPPLEMENT");
 730 
 731         /**
 732          * Constant for the "Latin Extended-A" Unicode character block.
 733          * @since 1.2
 734          */
 735         public static final UnicodeBlock LATIN_EXTENDED_A =
 736             new UnicodeBlock("LATIN_EXTENDED_A",
 737                              "LATIN EXTENDED-A",
 738                              "LATINEXTENDED-A");
 739 
 740         /**
 741          * Constant for the "Latin Extended-B" Unicode character block.
 742          * @since 1.2
 743          */
 744         public static final UnicodeBlock LATIN_EXTENDED_B =
 745             new UnicodeBlock("LATIN_EXTENDED_B",
 746                              "LATIN EXTENDED-B",
 747                              "LATINEXTENDED-B");
 748 
 749         /**
 750          * Constant for the "IPA Extensions" Unicode character block.
 751          * @since 1.2
 752          */
 753         public static final UnicodeBlock IPA_EXTENSIONS =
 754             new UnicodeBlock("IPA_EXTENSIONS",
 755                              "IPA EXTENSIONS",
 756                              "IPAEXTENSIONS");
 757 
 758         /**
 759          * Constant for the "Spacing Modifier Letters" Unicode character block.
 760          * @since 1.2
 761          */
 762         public static final UnicodeBlock SPACING_MODIFIER_LETTERS =
 763             new UnicodeBlock("SPACING_MODIFIER_LETTERS",
 764                              "SPACING MODIFIER LETTERS",
 765                              "SPACINGMODIFIERLETTERS");
 766 
 767         /**
 768          * Constant for the "Combining Diacritical Marks" Unicode character block.
 769          * @since 1.2
 770          */
 771         public static final UnicodeBlock COMBINING_DIACRITICAL_MARKS =
 772             new UnicodeBlock("COMBINING_DIACRITICAL_MARKS",
 773                              "COMBINING DIACRITICAL MARKS",
 774                              "COMBININGDIACRITICALMARKS");
 775 
 776         /**
 777          * Constant for the "Greek and Coptic" Unicode character block.
 778          * <p>
 779          * This block was previously known as the "Greek" block.
 780          *
 781          * @since 1.2
 782          */
 783         public static final UnicodeBlock GREEK =
 784             new UnicodeBlock("GREEK",
 785                              "GREEK AND COPTIC",
 786                              "GREEKANDCOPTIC");
 787 
 788         /**
 789          * Constant for the "Cyrillic" Unicode character block.
 790          * @since 1.2
 791          */
 792         public static final UnicodeBlock CYRILLIC =
 793             new UnicodeBlock("CYRILLIC");
 794 
 795         /**
 796          * Constant for the "Armenian" Unicode character block.
 797          * @since 1.2
 798          */
 799         public static final UnicodeBlock ARMENIAN =
 800             new UnicodeBlock("ARMENIAN");
 801 
 802         /**
 803          * Constant for the "Hebrew" Unicode character block.
 804          * @since 1.2
 805          */
 806         public static final UnicodeBlock HEBREW =
 807             new UnicodeBlock("HEBREW");
 808 
 809         /**
 810          * Constant for the "Arabic" Unicode character block.
 811          * @since 1.2
 812          */
 813         public static final UnicodeBlock ARABIC =
 814             new UnicodeBlock("ARABIC");
 815 
 816         /**
 817          * Constant for the "Devanagari" Unicode character block.
 818          * @since 1.2
 819          */
 820         public static final UnicodeBlock DEVANAGARI =
 821             new UnicodeBlock("DEVANAGARI");
 822 
 823         /**
 824          * Constant for the "Bengali" Unicode character block.
 825          * @since 1.2
 826          */
 827         public static final UnicodeBlock BENGALI =
 828             new UnicodeBlock("BENGALI");
 829 
 830         /**
 831          * Constant for the "Gurmukhi" Unicode character block.
 832          * @since 1.2
 833          */
 834         public static final UnicodeBlock GURMUKHI =
 835             new UnicodeBlock("GURMUKHI");
 836 
 837         /**
 838          * Constant for the "Gujarati" Unicode character block.
 839          * @since 1.2
 840          */
 841         public static final UnicodeBlock GUJARATI =
 842             new UnicodeBlock("GUJARATI");
 843 
 844         /**
 845          * Constant for the "Oriya" Unicode character block.
 846          * @since 1.2
 847          */
 848         public static final UnicodeBlock ORIYA =
 849             new UnicodeBlock("ORIYA");
 850 
 851         /**
 852          * Constant for the "Tamil" Unicode character block.
 853          * @since 1.2
 854          */
 855         public static final UnicodeBlock TAMIL =
 856             new UnicodeBlock("TAMIL");
 857 
 858         /**
 859          * Constant for the "Telugu" Unicode character block.
 860          * @since 1.2
 861          */
 862         public static final UnicodeBlock TELUGU =
 863             new UnicodeBlock("TELUGU");
 864 
 865         /**
 866          * Constant for the "Kannada" Unicode character block.
 867          * @since 1.2
 868          */
 869         public static final UnicodeBlock KANNADA =
 870             new UnicodeBlock("KANNADA");
 871 
 872         /**
 873          * Constant for the "Malayalam" Unicode character block.
 874          * @since 1.2
 875          */
 876         public static final UnicodeBlock MALAYALAM =
 877             new UnicodeBlock("MALAYALAM");
 878 
 879         /**
 880          * Constant for the "Thai" Unicode character block.
 881          * @since 1.2
 882          */
 883         public static final UnicodeBlock THAI =
 884             new UnicodeBlock("THAI");
 885 
 886         /**
 887          * Constant for the "Lao" Unicode character block.
 888          * @since 1.2
 889          */
 890         public static final UnicodeBlock LAO =
 891             new UnicodeBlock("LAO");
 892 
 893         /**
 894          * Constant for the "Tibetan" Unicode character block.
 895          * @since 1.2
 896          */
 897         public static final UnicodeBlock TIBETAN =
 898             new UnicodeBlock("TIBETAN");
 899 
 900         /**
 901          * Constant for the "Georgian" Unicode character block.
 902          * @since 1.2
 903          */
 904         public static final UnicodeBlock GEORGIAN =
 905             new UnicodeBlock("GEORGIAN");
 906 
 907         /**
 908          * Constant for the "Hangul Jamo" Unicode character block.
 909          * @since 1.2
 910          */
 911         public static final UnicodeBlock HANGUL_JAMO =
 912             new UnicodeBlock("HANGUL_JAMO",
 913                              "HANGUL JAMO",
 914                              "HANGULJAMO");
 915 
 916         /**
 917          * Constant for the "Latin Extended Additional" Unicode character block.
 918          * @since 1.2
 919          */
 920         public static final UnicodeBlock LATIN_EXTENDED_ADDITIONAL =
 921             new UnicodeBlock("LATIN_EXTENDED_ADDITIONAL",
 922                              "LATIN EXTENDED ADDITIONAL",
 923                              "LATINEXTENDEDADDITIONAL");
 924 
 925         /**
 926          * Constant for the "Greek Extended" Unicode character block.
 927          * @since 1.2
 928          */
 929         public static final UnicodeBlock GREEK_EXTENDED =
 930             new UnicodeBlock("GREEK_EXTENDED",
 931                              "GREEK EXTENDED",
 932                              "GREEKEXTENDED");
 933 
 934         /**
 935          * Constant for the "General Punctuation" Unicode character block.
 936          * @since 1.2
 937          */
 938         public static final UnicodeBlock GENERAL_PUNCTUATION =
 939             new UnicodeBlock("GENERAL_PUNCTUATION",
 940                              "GENERAL PUNCTUATION",
 941                              "GENERALPUNCTUATION");
 942 
 943         /**
 944          * Constant for the "Superscripts and Subscripts" Unicode character
 945          * block.
 946          * @since 1.2
 947          */
 948         public static final UnicodeBlock SUPERSCRIPTS_AND_SUBSCRIPTS =
 949             new UnicodeBlock("SUPERSCRIPTS_AND_SUBSCRIPTS",
 950                              "SUPERSCRIPTS AND SUBSCRIPTS",
 951                              "SUPERSCRIPTSANDSUBSCRIPTS");
 952 
 953         /**
 954          * Constant for the "Currency Symbols" Unicode character block.
 955          * @since 1.2
 956          */
 957         public static final UnicodeBlock CURRENCY_SYMBOLS =
 958             new UnicodeBlock("CURRENCY_SYMBOLS",
 959                              "CURRENCY SYMBOLS",
 960                              "CURRENCYSYMBOLS");
 961 
 962         /**
 963          * Constant for the "Combining Diacritical Marks for Symbols" Unicode
 964          * character block.
 965          * <p>
 966          * This block was previously known as "Combining Marks for Symbols".
 967          * @since 1.2
 968          */
 969         public static final UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS =
 970             new UnicodeBlock("COMBINING_MARKS_FOR_SYMBOLS",
 971                              "COMBINING DIACRITICAL MARKS FOR SYMBOLS",
 972                              "COMBININGDIACRITICALMARKSFORSYMBOLS",
 973                              "COMBINING MARKS FOR SYMBOLS",
 974                              "COMBININGMARKSFORSYMBOLS");
 975 
 976         /**
 977          * Constant for the "Letterlike Symbols" Unicode character block.
 978          * @since 1.2
 979          */
 980         public static final UnicodeBlock LETTERLIKE_SYMBOLS =
 981             new UnicodeBlock("LETTERLIKE_SYMBOLS",
 982                              "LETTERLIKE SYMBOLS",
 983                              "LETTERLIKESYMBOLS");
 984 
 985         /**
 986          * Constant for the "Number Forms" Unicode character block.
 987          * @since 1.2
 988          */
 989         public static final UnicodeBlock NUMBER_FORMS =
 990             new UnicodeBlock("NUMBER_FORMS",
 991                              "NUMBER FORMS",
 992                              "NUMBERFORMS");
 993 
 994         /**
 995          * Constant for the "Arrows" Unicode character block.
 996          * @since 1.2
 997          */
 998         public static final UnicodeBlock ARROWS =
 999             new UnicodeBlock("ARROWS");
1000 
1001         /**
1002          * Constant for the "Mathematical Operators" Unicode character block.
1003          * @since 1.2
1004          */
1005         public static final UnicodeBlock MATHEMATICAL_OPERATORS =
1006             new UnicodeBlock("MATHEMATICAL_OPERATORS",
1007                              "MATHEMATICAL OPERATORS",
1008                              "MATHEMATICALOPERATORS");
1009 
1010         /**
1011          * Constant for the "Miscellaneous Technical" Unicode character block.
1012          * @since 1.2
1013          */
1014         public static final UnicodeBlock MISCELLANEOUS_TECHNICAL =
1015             new UnicodeBlock("MISCELLANEOUS_TECHNICAL",
1016                              "MISCELLANEOUS TECHNICAL",
1017                              "MISCELLANEOUSTECHNICAL");
1018 
1019         /**
1020          * Constant for the "Control Pictures" Unicode character block.
1021          * @since 1.2
1022          */
1023         public static final UnicodeBlock CONTROL_PICTURES =
1024             new UnicodeBlock("CONTROL_PICTURES",
1025                              "CONTROL PICTURES",
1026                              "CONTROLPICTURES");
1027 
1028         /**
1029          * Constant for the "Optical Character Recognition" Unicode character block.
1030          * @since 1.2
1031          */
1032         public static final UnicodeBlock OPTICAL_CHARACTER_RECOGNITION =
1033             new UnicodeBlock("OPTICAL_CHARACTER_RECOGNITION",
1034                              "OPTICAL CHARACTER RECOGNITION",
1035                              "OPTICALCHARACTERRECOGNITION");
1036 
1037         /**
1038          * Constant for the "Enclosed Alphanumerics" Unicode character block.
1039          * @since 1.2
1040          */
1041         public static final UnicodeBlock ENCLOSED_ALPHANUMERICS =
1042             new UnicodeBlock("ENCLOSED_ALPHANUMERICS",
1043                              "ENCLOSED ALPHANUMERICS",
1044                              "ENCLOSEDALPHANUMERICS");
1045 
1046         /**
1047          * Constant for the "Box Drawing" Unicode character block.
1048          * @since 1.2
1049          */
1050         public static final UnicodeBlock BOX_DRAWING =
1051             new UnicodeBlock("BOX_DRAWING",
1052                              "BOX DRAWING",
1053                              "BOXDRAWING");
1054 
1055         /**
1056          * Constant for the "Block Elements" Unicode character block.
1057          * @since 1.2
1058          */
1059         public static final UnicodeBlock BLOCK_ELEMENTS =
1060             new UnicodeBlock("BLOCK_ELEMENTS",
1061                              "BLOCK ELEMENTS",
1062                              "BLOCKELEMENTS");
1063 
1064         /**
1065          * Constant for the "Geometric Shapes" Unicode character block.
1066          * @since 1.2
1067          */
1068         public static final UnicodeBlock GEOMETRIC_SHAPES =
1069             new UnicodeBlock("GEOMETRIC_SHAPES",
1070                              "GEOMETRIC SHAPES",
1071                              "GEOMETRICSHAPES");
1072 
1073         /**
1074          * Constant for the "Miscellaneous Symbols" Unicode character block.
1075          * @since 1.2
1076          */
1077         public static final UnicodeBlock MISCELLANEOUS_SYMBOLS =
1078             new UnicodeBlock("MISCELLANEOUS_SYMBOLS",
1079                              "MISCELLANEOUS SYMBOLS",
1080                              "MISCELLANEOUSSYMBOLS");
1081 
1082         /**
1083          * Constant for the "Dingbats" Unicode character block.
1084          * @since 1.2
1085          */
1086         public static final UnicodeBlock DINGBATS =
1087             new UnicodeBlock("DINGBATS");
1088 
1089         /**
1090          * Constant for the "CJK Symbols and Punctuation" Unicode character block.
1091          * @since 1.2
1092          */
1093         public static final UnicodeBlock CJK_SYMBOLS_AND_PUNCTUATION =
1094             new UnicodeBlock("CJK_SYMBOLS_AND_PUNCTUATION",
1095                              "CJK SYMBOLS AND PUNCTUATION",
1096                              "CJKSYMBOLSANDPUNCTUATION");
1097 
1098         /**
1099          * Constant for the "Hiragana" Unicode character block.
1100          * @since 1.2
1101          */
1102         public static final UnicodeBlock HIRAGANA =
1103             new UnicodeBlock("HIRAGANA");
1104 
1105         /**
1106          * Constant for the "Katakana" Unicode character block.
1107          * @since 1.2
1108          */
1109         public static final UnicodeBlock KATAKANA =
1110             new UnicodeBlock("KATAKANA");
1111 
1112         /**
1113          * Constant for the "Bopomofo" Unicode character block.
1114          * @since 1.2
1115          */
1116         public static final UnicodeBlock BOPOMOFO =
1117             new UnicodeBlock("BOPOMOFO");
1118 
1119         /**
1120          * Constant for the "Hangul Compatibility Jamo" Unicode character block.
1121          * @since 1.2
1122          */
1123         public static final UnicodeBlock HANGUL_COMPATIBILITY_JAMO =
1124             new UnicodeBlock("HANGUL_COMPATIBILITY_JAMO",
1125                              "HANGUL COMPATIBILITY JAMO",
1126                              "HANGULCOMPATIBILITYJAMO");
1127 
1128         /**
1129          * Constant for the "Kanbun" Unicode character block.
1130          * @since 1.2
1131          */
1132         public static final UnicodeBlock KANBUN =
1133             new UnicodeBlock("KANBUN");
1134 
1135         /**
1136          * Constant for the "Enclosed CJK Letters and Months" Unicode character block.
1137          * @since 1.2
1138          */
1139         public static final UnicodeBlock ENCLOSED_CJK_LETTERS_AND_MONTHS =
1140             new UnicodeBlock("ENCLOSED_CJK_LETTERS_AND_MONTHS",
1141                              "ENCLOSED CJK LETTERS AND MONTHS",
1142                              "ENCLOSEDCJKLETTERSANDMONTHS");
1143 
1144         /**
1145          * Constant for the "CJK Compatibility" Unicode character block.
1146          * @since 1.2
1147          */
1148         public static final UnicodeBlock CJK_COMPATIBILITY =
1149             new UnicodeBlock("CJK_COMPATIBILITY",
1150                              "CJK COMPATIBILITY",
1151                              "CJKCOMPATIBILITY");
1152 
1153         /**
1154          * Constant for the "CJK Unified Ideographs" Unicode character block.
1155          * @since 1.2
1156          */
1157         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS =
1158             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS",
1159                              "CJK UNIFIED IDEOGRAPHS",
1160                              "CJKUNIFIEDIDEOGRAPHS");
1161 
1162         /**
1163          * Constant for the "Hangul Syllables" Unicode character block.
1164          * @since 1.2
1165          */
1166         public static final UnicodeBlock HANGUL_SYLLABLES =
1167             new UnicodeBlock("HANGUL_SYLLABLES",
1168                              "HANGUL SYLLABLES",
1169                              "HANGULSYLLABLES");
1170 
1171         /**
1172          * Constant for the "Private Use Area" Unicode character block.
1173          * @since 1.2
1174          */
1175         public static final UnicodeBlock PRIVATE_USE_AREA =
1176             new UnicodeBlock("PRIVATE_USE_AREA",
1177                              "PRIVATE USE AREA",
1178                              "PRIVATEUSEAREA");
1179 
1180         /**
1181          * Constant for the "CJK Compatibility Ideographs" Unicode character
1182          * block.
1183          * @since 1.2
1184          */
1185         public static final UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS =
1186             new UnicodeBlock("CJK_COMPATIBILITY_IDEOGRAPHS",
1187                              "CJK COMPATIBILITY IDEOGRAPHS",
1188                              "CJKCOMPATIBILITYIDEOGRAPHS");
1189 
1190         /**
1191          * Constant for the "Alphabetic Presentation Forms" Unicode character block.
1192          * @since 1.2
1193          */
1194         public static final UnicodeBlock ALPHABETIC_PRESENTATION_FORMS =
1195             new UnicodeBlock("ALPHABETIC_PRESENTATION_FORMS",
1196                              "ALPHABETIC PRESENTATION FORMS",
1197                              "ALPHABETICPRESENTATIONFORMS");
1198 
1199         /**
1200          * Constant for the "Arabic Presentation Forms-A" Unicode character
1201          * block.
1202          * @since 1.2
1203          */
1204         public static final UnicodeBlock ARABIC_PRESENTATION_FORMS_A =
1205             new UnicodeBlock("ARABIC_PRESENTATION_FORMS_A",
1206                              "ARABIC PRESENTATION FORMS-A",
1207                              "ARABICPRESENTATIONFORMS-A");
1208 
1209         /**
1210          * Constant for the "Combining Half Marks" Unicode character block.
1211          * @since 1.2
1212          */
1213         public static final UnicodeBlock COMBINING_HALF_MARKS =
1214             new UnicodeBlock("COMBINING_HALF_MARKS",
1215                              "COMBINING HALF MARKS",
1216                              "COMBININGHALFMARKS");
1217 
1218         /**
1219          * Constant for the "CJK Compatibility Forms" Unicode character block.
1220          * @since 1.2
1221          */
1222         public static final UnicodeBlock CJK_COMPATIBILITY_FORMS =
1223             new UnicodeBlock("CJK_COMPATIBILITY_FORMS",
1224                              "CJK COMPATIBILITY FORMS",
1225                              "CJKCOMPATIBILITYFORMS");
1226 
1227         /**
1228          * Constant for the "Small Form Variants" Unicode character block.
1229          * @since 1.2
1230          */
1231         public static final UnicodeBlock SMALL_FORM_VARIANTS =
1232             new UnicodeBlock("SMALL_FORM_VARIANTS",
1233                              "SMALL FORM VARIANTS",
1234                              "SMALLFORMVARIANTS");
1235 
1236         /**
1237          * Constant for the "Arabic Presentation Forms-B" Unicode character block.
1238          * @since 1.2
1239          */
1240         public static final UnicodeBlock ARABIC_PRESENTATION_FORMS_B =
1241             new UnicodeBlock("ARABIC_PRESENTATION_FORMS_B",
1242                              "ARABIC PRESENTATION FORMS-B",
1243                              "ARABICPRESENTATIONFORMS-B");
1244 
1245         /**
1246          * Constant for the "Halfwidth and Fullwidth Forms" Unicode character
1247          * block.
1248          * @since 1.2
1249          */
1250         public static final UnicodeBlock HALFWIDTH_AND_FULLWIDTH_FORMS =
1251             new UnicodeBlock("HALFWIDTH_AND_FULLWIDTH_FORMS",
1252                              "HALFWIDTH AND FULLWIDTH FORMS",
1253                              "HALFWIDTHANDFULLWIDTHFORMS");
1254 
1255         /**
1256          * Constant for the "Specials" Unicode character block.
1257          * @since 1.2
1258          */
1259         public static final UnicodeBlock SPECIALS =
1260             new UnicodeBlock("SPECIALS");
1261 
1262         /**
1263          * @deprecated
1264          * Instead of {@code SURROGATES_AREA}, use {@link #HIGH_SURROGATES},
1265          * {@link #HIGH_PRIVATE_USE_SURROGATES}, and {@link #LOW_SURROGATES}.
1266          * These constants match the block definitions of the Unicode Standard.
1267          * The {@link #of(char)} and {@link #of(int)} methods return the
1268          * standard constants.
1269          */
1270         @Deprecated(since="1.5")
1271         public static final UnicodeBlock SURROGATES_AREA =
1272             new UnicodeBlock("SURROGATES_AREA");
1273 
1274         /**
1275          * Constant for the "Syriac" Unicode character block.
1276          * @since 1.4
1277          */
1278         public static final UnicodeBlock SYRIAC =
1279             new UnicodeBlock("SYRIAC");
1280 
1281         /**
1282          * Constant for the "Thaana" Unicode character block.
1283          * @since 1.4
1284          */
1285         public static final UnicodeBlock THAANA =
1286             new UnicodeBlock("THAANA");
1287 
1288         /**
1289          * Constant for the "Sinhala" Unicode character block.
1290          * @since 1.4
1291          */
1292         public static final UnicodeBlock SINHALA =
1293             new UnicodeBlock("SINHALA");
1294 
1295         /**
1296          * Constant for the "Myanmar" Unicode character block.
1297          * @since 1.4
1298          */
1299         public static final UnicodeBlock MYANMAR =
1300             new UnicodeBlock("MYANMAR");
1301 
1302         /**
1303          * Constant for the "Ethiopic" Unicode character block.
1304          * @since 1.4
1305          */
1306         public static final UnicodeBlock ETHIOPIC =
1307             new UnicodeBlock("ETHIOPIC");
1308 
1309         /**
1310          * Constant for the "Cherokee" Unicode character block.
1311          * @since 1.4
1312          */
1313         public static final UnicodeBlock CHEROKEE =
1314             new UnicodeBlock("CHEROKEE");
1315 
1316         /**
1317          * Constant for the "Unified Canadian Aboriginal Syllabics" Unicode character block.
1318          * @since 1.4
1319          */
1320         public static final UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS =
1321             new UnicodeBlock("UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS",
1322                              "UNIFIED CANADIAN ABORIGINAL SYLLABICS",
1323                              "UNIFIEDCANADIANABORIGINALSYLLABICS");
1324 
1325         /**
1326          * Constant for the "Ogham" Unicode character block.
1327          * @since 1.4
1328          */
1329         public static final UnicodeBlock OGHAM =
1330             new UnicodeBlock("OGHAM");
1331 
1332         /**
1333          * Constant for the "Runic" Unicode character block.
1334          * @since 1.4
1335          */
1336         public static final UnicodeBlock RUNIC =
1337             new UnicodeBlock("RUNIC");
1338 
1339         /**
1340          * Constant for the "Khmer" Unicode character block.
1341          * @since 1.4
1342          */
1343         public static final UnicodeBlock KHMER =
1344             new UnicodeBlock("KHMER");
1345 
1346         /**
1347          * Constant for the "Mongolian" Unicode character block.
1348          * @since 1.4
1349          */
1350         public static final UnicodeBlock MONGOLIAN =
1351             new UnicodeBlock("MONGOLIAN");
1352 
1353         /**
1354          * Constant for the "Braille Patterns" Unicode character block.
1355          * @since 1.4
1356          */
1357         public static final UnicodeBlock BRAILLE_PATTERNS =
1358             new UnicodeBlock("BRAILLE_PATTERNS",
1359                              "BRAILLE PATTERNS",
1360                              "BRAILLEPATTERNS");
1361 
1362         /**
1363          * Constant for the "CJK Radicals Supplement" Unicode character block.
1364          * @since 1.4
1365          */
1366         public static final UnicodeBlock CJK_RADICALS_SUPPLEMENT =
1367             new UnicodeBlock("CJK_RADICALS_SUPPLEMENT",
1368                              "CJK RADICALS SUPPLEMENT",
1369                              "CJKRADICALSSUPPLEMENT");
1370 
1371         /**
1372          * Constant for the "Kangxi Radicals" Unicode character block.
1373          * @since 1.4
1374          */
1375         public static final UnicodeBlock KANGXI_RADICALS =
1376             new UnicodeBlock("KANGXI_RADICALS",
1377                              "KANGXI RADICALS",
1378                              "KANGXIRADICALS");
1379 
1380         /**
1381          * Constant for the "Ideographic Description Characters" Unicode character block.
1382          * @since 1.4
1383          */
1384         public static final UnicodeBlock IDEOGRAPHIC_DESCRIPTION_CHARACTERS =
1385             new UnicodeBlock("IDEOGRAPHIC_DESCRIPTION_CHARACTERS",
1386                              "IDEOGRAPHIC DESCRIPTION CHARACTERS",
1387                              "IDEOGRAPHICDESCRIPTIONCHARACTERS");
1388 
1389         /**
1390          * Constant for the "Bopomofo Extended" Unicode character block.
1391          * @since 1.4
1392          */
1393         public static final UnicodeBlock BOPOMOFO_EXTENDED =
1394             new UnicodeBlock("BOPOMOFO_EXTENDED",
1395                              "BOPOMOFO EXTENDED",
1396                              "BOPOMOFOEXTENDED");
1397 
1398         /**
1399          * Constant for the "CJK Unified Ideographs Extension A" Unicode character block.
1400          * @since 1.4
1401          */
1402         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A =
1403             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A",
1404                              "CJK UNIFIED IDEOGRAPHS EXTENSION A",
1405                              "CJKUNIFIEDIDEOGRAPHSEXTENSIONA");
1406 
1407         /**
1408          * Constant for the "Yi Syllables" Unicode character block.
1409          * @since 1.4
1410          */
1411         public static final UnicodeBlock YI_SYLLABLES =
1412             new UnicodeBlock("YI_SYLLABLES",
1413                              "YI SYLLABLES",
1414                              "YISYLLABLES");
1415 
1416         /**
1417          * Constant for the "Yi Radicals" Unicode character block.
1418          * @since 1.4
1419          */
1420         public static final UnicodeBlock YI_RADICALS =
1421             new UnicodeBlock("YI_RADICALS",
1422                              "YI RADICALS",
1423                              "YIRADICALS");
1424 
1425         /**
1426          * Constant for the "Cyrillic Supplement" Unicode character block.
1427          * This block was previously known as the "Cyrillic Supplementary" block.
1428          * @since 1.5
1429          */
1430         public static final UnicodeBlock CYRILLIC_SUPPLEMENTARY =
1431             new UnicodeBlock("CYRILLIC_SUPPLEMENTARY",
1432                              "CYRILLIC SUPPLEMENTARY",
1433                              "CYRILLICSUPPLEMENTARY",
1434                              "CYRILLIC SUPPLEMENT",
1435                              "CYRILLICSUPPLEMENT");
1436 
1437         /**
1438          * Constant for the "Tagalog" Unicode character block.
1439          * @since 1.5
1440          */
1441         public static final UnicodeBlock TAGALOG =
1442             new UnicodeBlock("TAGALOG");
1443 
1444         /**
1445          * Constant for the "Hanunoo" Unicode character block.
1446          * @since 1.5
1447          */
1448         public static final UnicodeBlock HANUNOO =
1449             new UnicodeBlock("HANUNOO");
1450 
1451         /**
1452          * Constant for the "Buhid" Unicode character block.
1453          * @since 1.5
1454          */
1455         public static final UnicodeBlock BUHID =
1456             new UnicodeBlock("BUHID");
1457 
1458         /**
1459          * Constant for the "Tagbanwa" Unicode character block.
1460          * @since 1.5
1461          */
1462         public static final UnicodeBlock TAGBANWA =
1463             new UnicodeBlock("TAGBANWA");
1464 
1465         /**
1466          * Constant for the "Limbu" Unicode character block.
1467          * @since 1.5
1468          */
1469         public static final UnicodeBlock LIMBU =
1470             new UnicodeBlock("LIMBU");
1471 
1472         /**
1473          * Constant for the "Tai Le" Unicode character block.
1474          * @since 1.5
1475          */
1476         public static final UnicodeBlock TAI_LE =
1477             new UnicodeBlock("TAI_LE",
1478                              "TAI LE",
1479                              "TAILE");
1480 
1481         /**
1482          * Constant for the "Khmer Symbols" Unicode character block.
1483          * @since 1.5
1484          */
1485         public static final UnicodeBlock KHMER_SYMBOLS =
1486             new UnicodeBlock("KHMER_SYMBOLS",
1487                              "KHMER SYMBOLS",
1488                              "KHMERSYMBOLS");
1489 
1490         /**
1491          * Constant for the "Phonetic Extensions" Unicode character block.
1492          * @since 1.5
1493          */
1494         public static final UnicodeBlock PHONETIC_EXTENSIONS =
1495             new UnicodeBlock("PHONETIC_EXTENSIONS",
1496                              "PHONETIC EXTENSIONS",
1497                              "PHONETICEXTENSIONS");
1498 
1499         /**
1500          * Constant for the "Miscellaneous Mathematical Symbols-A" Unicode character block.
1501          * @since 1.5
1502          */
1503         public static final UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A =
1504             new UnicodeBlock("MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A",
1505                              "MISCELLANEOUS MATHEMATICAL SYMBOLS-A",
1506                              "MISCELLANEOUSMATHEMATICALSYMBOLS-A");
1507 
1508         /**
1509          * Constant for the "Supplemental Arrows-A" Unicode character block.
1510          * @since 1.5
1511          */
1512         public static final UnicodeBlock SUPPLEMENTAL_ARROWS_A =
1513             new UnicodeBlock("SUPPLEMENTAL_ARROWS_A",
1514                              "SUPPLEMENTAL ARROWS-A",
1515                              "SUPPLEMENTALARROWS-A");
1516 
1517         /**
1518          * Constant for the "Supplemental Arrows-B" Unicode character block.
1519          * @since 1.5
1520          */
1521         public static final UnicodeBlock SUPPLEMENTAL_ARROWS_B =
1522             new UnicodeBlock("SUPPLEMENTAL_ARROWS_B",
1523                              "SUPPLEMENTAL ARROWS-B",
1524                              "SUPPLEMENTALARROWS-B");
1525 
1526         /**
1527          * Constant for the "Miscellaneous Mathematical Symbols-B" Unicode
1528          * character block.
1529          * @since 1.5
1530          */
1531         public static final UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B =
1532             new UnicodeBlock("MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B",
1533                              "MISCELLANEOUS MATHEMATICAL SYMBOLS-B",
1534                              "MISCELLANEOUSMATHEMATICALSYMBOLS-B");
1535 
1536         /**
1537          * Constant for the "Supplemental Mathematical Operators" Unicode
1538          * character block.
1539          * @since 1.5
1540          */
1541         public static final UnicodeBlock SUPPLEMENTAL_MATHEMATICAL_OPERATORS =
1542             new UnicodeBlock("SUPPLEMENTAL_MATHEMATICAL_OPERATORS",
1543                              "SUPPLEMENTAL MATHEMATICAL OPERATORS",
1544                              "SUPPLEMENTALMATHEMATICALOPERATORS");
1545 
1546         /**
1547          * Constant for the "Miscellaneous Symbols and Arrows" Unicode character
1548          * block.
1549          * @since 1.5
1550          */
1551         public static final UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_ARROWS =
1552             new UnicodeBlock("MISCELLANEOUS_SYMBOLS_AND_ARROWS",
1553                              "MISCELLANEOUS SYMBOLS AND ARROWS",
1554                              "MISCELLANEOUSSYMBOLSANDARROWS");
1555 
1556         /**
1557          * Constant for the "Katakana Phonetic Extensions" Unicode character
1558          * block.
1559          * @since 1.5
1560          */
1561         public static final UnicodeBlock KATAKANA_PHONETIC_EXTENSIONS =
1562             new UnicodeBlock("KATAKANA_PHONETIC_EXTENSIONS",
1563                              "KATAKANA PHONETIC EXTENSIONS",
1564                              "KATAKANAPHONETICEXTENSIONS");
1565 
1566         /**
1567          * Constant for the "Yijing Hexagram Symbols" Unicode character block.
1568          * @since 1.5
1569          */
1570         public static final UnicodeBlock YIJING_HEXAGRAM_SYMBOLS =
1571             new UnicodeBlock("YIJING_HEXAGRAM_SYMBOLS",
1572                              "YIJING HEXAGRAM SYMBOLS",
1573                              "YIJINGHEXAGRAMSYMBOLS");
1574 
1575         /**
1576          * Constant for the "Variation Selectors" Unicode character block.
1577          * @since 1.5
1578          */
1579         public static final UnicodeBlock VARIATION_SELECTORS =
1580             new UnicodeBlock("VARIATION_SELECTORS",
1581                              "VARIATION SELECTORS",
1582                              "VARIATIONSELECTORS");
1583 
1584         /**
1585          * Constant for the "Linear B Syllabary" Unicode character block.
1586          * @since 1.5
1587          */
1588         public static final UnicodeBlock LINEAR_B_SYLLABARY =
1589             new UnicodeBlock("LINEAR_B_SYLLABARY",
1590                              "LINEAR B SYLLABARY",
1591                              "LINEARBSYLLABARY");
1592 
1593         /**
1594          * Constant for the "Linear B Ideograms" Unicode character block.
1595          * @since 1.5
1596          */
1597         public static final UnicodeBlock LINEAR_B_IDEOGRAMS =
1598             new UnicodeBlock("LINEAR_B_IDEOGRAMS",
1599                              "LINEAR B IDEOGRAMS",
1600                              "LINEARBIDEOGRAMS");
1601 
1602         /**
1603          * Constant for the "Aegean Numbers" Unicode character block.
1604          * @since 1.5
1605          */
1606         public static final UnicodeBlock AEGEAN_NUMBERS =
1607             new UnicodeBlock("AEGEAN_NUMBERS",
1608                              "AEGEAN NUMBERS",
1609                              "AEGEANNUMBERS");
1610 
1611         /**
1612          * Constant for the "Old Italic" Unicode character block.
1613          * @since 1.5
1614          */
1615         public static final UnicodeBlock OLD_ITALIC =
1616             new UnicodeBlock("OLD_ITALIC",
1617                              "OLD ITALIC",
1618                              "OLDITALIC");
1619 
1620         /**
1621          * Constant for the "Gothic" Unicode character block.
1622          * @since 1.5
1623          */
1624         public static final UnicodeBlock GOTHIC =
1625             new UnicodeBlock("GOTHIC");
1626 
1627         /**
1628          * Constant for the "Ugaritic" Unicode character block.
1629          * @since 1.5
1630          */
1631         public static final UnicodeBlock UGARITIC =
1632             new UnicodeBlock("UGARITIC");
1633 
1634         /**
1635          * Constant for the "Deseret" Unicode character block.
1636          * @since 1.5
1637          */
1638         public static final UnicodeBlock DESERET =
1639             new UnicodeBlock("DESERET");
1640 
1641         /**
1642          * Constant for the "Shavian" Unicode character block.
1643          * @since 1.5
1644          */
1645         public static final UnicodeBlock SHAVIAN =
1646             new UnicodeBlock("SHAVIAN");
1647 
1648         /**
1649          * Constant for the "Osmanya" Unicode character block.
1650          * @since 1.5
1651          */
1652         public static final UnicodeBlock OSMANYA =
1653             new UnicodeBlock("OSMANYA");
1654 
1655         /**
1656          * Constant for the "Cypriot Syllabary" Unicode character block.
1657          * @since 1.5
1658          */
1659         public static final UnicodeBlock CYPRIOT_SYLLABARY =
1660             new UnicodeBlock("CYPRIOT_SYLLABARY",
1661                              "CYPRIOT SYLLABARY",
1662                              "CYPRIOTSYLLABARY");
1663 
1664         /**
1665          * Constant for the "Byzantine Musical Symbols" Unicode character block.
1666          * @since 1.5
1667          */
1668         public static final UnicodeBlock BYZANTINE_MUSICAL_SYMBOLS =
1669             new UnicodeBlock("BYZANTINE_MUSICAL_SYMBOLS",
1670                              "BYZANTINE MUSICAL SYMBOLS",
1671                              "BYZANTINEMUSICALSYMBOLS");
1672 
1673         /**
1674          * Constant for the "Musical Symbols" Unicode character block.
1675          * @since 1.5
1676          */
1677         public static final UnicodeBlock MUSICAL_SYMBOLS =
1678             new UnicodeBlock("MUSICAL_SYMBOLS",
1679                              "MUSICAL SYMBOLS",
1680                              "MUSICALSYMBOLS");
1681 
1682         /**
1683          * Constant for the "Tai Xuan Jing Symbols" Unicode character block.
1684          * @since 1.5
1685          */
1686         public static final UnicodeBlock TAI_XUAN_JING_SYMBOLS =
1687             new UnicodeBlock("TAI_XUAN_JING_SYMBOLS",
1688                              "TAI XUAN JING SYMBOLS",
1689                              "TAIXUANJINGSYMBOLS");
1690 
1691         /**
1692          * Constant for the "Mathematical Alphanumeric Symbols" Unicode
1693          * character block.
1694          * @since 1.5
1695          */
1696         public static final UnicodeBlock MATHEMATICAL_ALPHANUMERIC_SYMBOLS =
1697             new UnicodeBlock("MATHEMATICAL_ALPHANUMERIC_SYMBOLS",
1698                              "MATHEMATICAL ALPHANUMERIC SYMBOLS",
1699                              "MATHEMATICALALPHANUMERICSYMBOLS");
1700 
1701         /**
1702          * Constant for the "CJK Unified Ideographs Extension B" Unicode
1703          * character block.
1704          * @since 1.5
1705          */
1706         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B =
1707             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B",
1708                              "CJK UNIFIED IDEOGRAPHS EXTENSION B",
1709                              "CJKUNIFIEDIDEOGRAPHSEXTENSIONB");
1710 
1711         /**
1712          * Constant for the "CJK Compatibility Ideographs Supplement" Unicode character block.
1713          * @since 1.5
1714          */
1715         public static final UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT =
1716             new UnicodeBlock("CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT",
1717                              "CJK COMPATIBILITY IDEOGRAPHS SUPPLEMENT",
1718                              "CJKCOMPATIBILITYIDEOGRAPHSSUPPLEMENT");
1719 
1720         /**
1721          * Constant for the "Tags" Unicode character block.
1722          * @since 1.5
1723          */
1724         public static final UnicodeBlock TAGS =
1725             new UnicodeBlock("TAGS");
1726 
1727         /**
1728          * Constant for the "Variation Selectors Supplement" Unicode character
1729          * block.
1730          * @since 1.5
1731          */
1732         public static final UnicodeBlock VARIATION_SELECTORS_SUPPLEMENT =
1733             new UnicodeBlock("VARIATION_SELECTORS_SUPPLEMENT",
1734                              "VARIATION SELECTORS SUPPLEMENT",
1735                              "VARIATIONSELECTORSSUPPLEMENT");
1736 
1737         /**
1738          * Constant for the "Supplementary Private Use Area-A" Unicode character
1739          * block.
1740          * @since 1.5
1741          */
1742         public static final UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_A =
1743             new UnicodeBlock("SUPPLEMENTARY_PRIVATE_USE_AREA_A",
1744                              "SUPPLEMENTARY PRIVATE USE AREA-A",
1745                              "SUPPLEMENTARYPRIVATEUSEAREA-A");
1746 
1747         /**
1748          * Constant for the "Supplementary Private Use Area-B" Unicode character
1749          * block.
1750          * @since 1.5
1751          */
1752         public static final UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_B =
1753             new UnicodeBlock("SUPPLEMENTARY_PRIVATE_USE_AREA_B",
1754                              "SUPPLEMENTARY PRIVATE USE AREA-B",
1755                              "SUPPLEMENTARYPRIVATEUSEAREA-B");
1756 
1757         /**
1758          * Constant for the "High Surrogates" Unicode character block.
1759          * This block represents codepoint values in the high surrogate
1760          * range: U+D800 through U+DB7F
1761          *
1762          * @since 1.5
1763          */
1764         public static final UnicodeBlock HIGH_SURROGATES =
1765             new UnicodeBlock("HIGH_SURROGATES",
1766                              "HIGH SURROGATES",
1767                              "HIGHSURROGATES");
1768 
1769         /**
1770          * Constant for the "High Private Use Surrogates" Unicode character
1771          * block.
1772          * This block represents codepoint values in the private use high
1773          * surrogate range: U+DB80 through U+DBFF
1774          *
1775          * @since 1.5
1776          */
1777         public static final UnicodeBlock HIGH_PRIVATE_USE_SURROGATES =
1778             new UnicodeBlock("HIGH_PRIVATE_USE_SURROGATES",
1779                              "HIGH PRIVATE USE SURROGATES",
1780                              "HIGHPRIVATEUSESURROGATES");
1781 
1782         /**
1783          * Constant for the "Low Surrogates" Unicode character block.
1784          * This block represents codepoint values in the low surrogate
1785          * range: U+DC00 through U+DFFF
1786          *
1787          * @since 1.5
1788          */
1789         public static final UnicodeBlock LOW_SURROGATES =
1790             new UnicodeBlock("LOW_SURROGATES",
1791                              "LOW SURROGATES",
1792                              "LOWSURROGATES");
1793 
1794         /**
1795          * Constant for the "Arabic Supplement" Unicode character block.
1796          * @since 1.7
1797          */
1798         public static final UnicodeBlock ARABIC_SUPPLEMENT =
1799             new UnicodeBlock("ARABIC_SUPPLEMENT",
1800                              "ARABIC SUPPLEMENT",
1801                              "ARABICSUPPLEMENT");
1802 
1803         /**
1804          * Constant for the "NKo" Unicode character block.
1805          * @since 1.7
1806          */
1807         public static final UnicodeBlock NKO =
1808             new UnicodeBlock("NKO");
1809 
1810         /**
1811          * Constant for the "Samaritan" Unicode character block.
1812          * @since 1.7
1813          */
1814         public static final UnicodeBlock SAMARITAN =
1815             new UnicodeBlock("SAMARITAN");
1816 
1817         /**
1818          * Constant for the "Mandaic" Unicode character block.
1819          * @since 1.7
1820          */
1821         public static final UnicodeBlock MANDAIC =
1822             new UnicodeBlock("MANDAIC");
1823 
1824         /**
1825          * Constant for the "Ethiopic Supplement" Unicode character block.
1826          * @since 1.7
1827          */
1828         public static final UnicodeBlock ETHIOPIC_SUPPLEMENT =
1829             new UnicodeBlock("ETHIOPIC_SUPPLEMENT",
1830                              "ETHIOPIC SUPPLEMENT",
1831                              "ETHIOPICSUPPLEMENT");
1832 
1833         /**
1834          * Constant for the "Unified Canadian Aboriginal Syllabics Extended"
1835          * Unicode character block.
1836          * @since 1.7
1837          */
1838         public static final UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED =
1839             new UnicodeBlock("UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED",
1840                              "UNIFIED CANADIAN ABORIGINAL SYLLABICS EXTENDED",
1841                              "UNIFIEDCANADIANABORIGINALSYLLABICSEXTENDED");
1842 
1843         /**
1844          * Constant for the "New Tai Lue" Unicode character block.
1845          * @since 1.7
1846          */
1847         public static final UnicodeBlock NEW_TAI_LUE =
1848             new UnicodeBlock("NEW_TAI_LUE",
1849                              "NEW TAI LUE",
1850                              "NEWTAILUE");
1851 
1852         /**
1853          * Constant for the "Buginese" Unicode character block.
1854          * @since 1.7
1855          */
1856         public static final UnicodeBlock BUGINESE =
1857             new UnicodeBlock("BUGINESE");
1858 
1859         /**
1860          * Constant for the "Tai Tham" Unicode character block.
1861          * @since 1.7
1862          */
1863         public static final UnicodeBlock TAI_THAM =
1864             new UnicodeBlock("TAI_THAM",
1865                              "TAI THAM",
1866                              "TAITHAM");
1867 
1868         /**
1869          * Constant for the "Balinese" Unicode character block.
1870          * @since 1.7
1871          */
1872         public static final UnicodeBlock BALINESE =
1873             new UnicodeBlock("BALINESE");
1874 
1875         /**
1876          * Constant for the "Sundanese" Unicode character block.
1877          * @since 1.7
1878          */
1879         public static final UnicodeBlock SUNDANESE =
1880             new UnicodeBlock("SUNDANESE");
1881 
1882         /**
1883          * Constant for the "Batak" Unicode character block.
1884          * @since 1.7
1885          */
1886         public static final UnicodeBlock BATAK =
1887             new UnicodeBlock("BATAK");
1888 
1889         /**
1890          * Constant for the "Lepcha" Unicode character block.
1891          * @since 1.7
1892          */
1893         public static final UnicodeBlock LEPCHA =
1894             new UnicodeBlock("LEPCHA");
1895 
1896         /**
1897          * Constant for the "Ol Chiki" Unicode character block.
1898          * @since 1.7
1899          */
1900         public static final UnicodeBlock OL_CHIKI =
1901             new UnicodeBlock("OL_CHIKI",
1902                              "OL CHIKI",
1903                              "OLCHIKI");
1904 
1905         /**
1906          * Constant for the "Vedic Extensions" Unicode character block.
1907          * @since 1.7
1908          */
1909         public static final UnicodeBlock VEDIC_EXTENSIONS =
1910             new UnicodeBlock("VEDIC_EXTENSIONS",
1911                              "VEDIC EXTENSIONS",
1912                              "VEDICEXTENSIONS");
1913 
1914         /**
1915          * Constant for the "Phonetic Extensions Supplement" Unicode character
1916          * block.
1917          * @since 1.7
1918          */
1919         public static final UnicodeBlock PHONETIC_EXTENSIONS_SUPPLEMENT =
1920             new UnicodeBlock("PHONETIC_EXTENSIONS_SUPPLEMENT",
1921                              "PHONETIC EXTENSIONS SUPPLEMENT",
1922                              "PHONETICEXTENSIONSSUPPLEMENT");
1923 
1924         /**
1925          * Constant for the "Combining Diacritical Marks Supplement" Unicode
1926          * character block.
1927          * @since 1.7
1928          */
1929         public static final UnicodeBlock COMBINING_DIACRITICAL_MARKS_SUPPLEMENT =
1930             new UnicodeBlock("COMBINING_DIACRITICAL_MARKS_SUPPLEMENT",
1931                              "COMBINING DIACRITICAL MARKS SUPPLEMENT",
1932                              "COMBININGDIACRITICALMARKSSUPPLEMENT");
1933 
1934         /**
1935          * Constant for the "Glagolitic" Unicode character block.
1936          * @since 1.7
1937          */
1938         public static final UnicodeBlock GLAGOLITIC =
1939             new UnicodeBlock("GLAGOLITIC");
1940 
1941         /**
1942          * Constant for the "Latin Extended-C" Unicode character block.
1943          * @since 1.7
1944          */
1945         public static final UnicodeBlock LATIN_EXTENDED_C =
1946             new UnicodeBlock("LATIN_EXTENDED_C",
1947                              "LATIN EXTENDED-C",
1948                              "LATINEXTENDED-C");
1949 
1950         /**
1951          * Constant for the "Coptic" Unicode character block.
1952          * @since 1.7
1953          */
1954         public static final UnicodeBlock COPTIC =
1955             new UnicodeBlock("COPTIC");
1956 
1957         /**
1958          * Constant for the "Georgian Supplement" Unicode character block.
1959          * @since 1.7
1960          */
1961         public static final UnicodeBlock GEORGIAN_SUPPLEMENT =
1962             new UnicodeBlock("GEORGIAN_SUPPLEMENT",
1963                              "GEORGIAN SUPPLEMENT",
1964                              "GEORGIANSUPPLEMENT");
1965 
1966         /**
1967          * Constant for the "Tifinagh" Unicode character block.
1968          * @since 1.7
1969          */
1970         public static final UnicodeBlock TIFINAGH =
1971             new UnicodeBlock("TIFINAGH");
1972 
1973         /**
1974          * Constant for the "Ethiopic Extended" Unicode character block.
1975          * @since 1.7
1976          */
1977         public static final UnicodeBlock ETHIOPIC_EXTENDED =
1978             new UnicodeBlock("ETHIOPIC_EXTENDED",
1979                              "ETHIOPIC EXTENDED",
1980                              "ETHIOPICEXTENDED");
1981 
1982         /**
1983          * Constant for the "Cyrillic Extended-A" Unicode character block.
1984          * @since 1.7
1985          */
1986         public static final UnicodeBlock CYRILLIC_EXTENDED_A =
1987             new UnicodeBlock("CYRILLIC_EXTENDED_A",
1988                              "CYRILLIC EXTENDED-A",
1989                              "CYRILLICEXTENDED-A");
1990 
1991         /**
1992          * Constant for the "Supplemental Punctuation" Unicode character block.
1993          * @since 1.7
1994          */
1995         public static final UnicodeBlock SUPPLEMENTAL_PUNCTUATION =
1996             new UnicodeBlock("SUPPLEMENTAL_PUNCTUATION",
1997                              "SUPPLEMENTAL PUNCTUATION",
1998                              "SUPPLEMENTALPUNCTUATION");
1999 
2000         /**
2001          * Constant for the "CJK Strokes" Unicode character block.
2002          * @since 1.7
2003          */
2004         public static final UnicodeBlock CJK_STROKES =
2005             new UnicodeBlock("CJK_STROKES",
2006                              "CJK STROKES",
2007                              "CJKSTROKES");
2008 
2009         /**
2010          * Constant for the "Lisu" Unicode character block.
2011          * @since 1.7
2012          */
2013         public static final UnicodeBlock LISU =
2014             new UnicodeBlock("LISU");
2015 
2016         /**
2017          * Constant for the "Vai" Unicode character block.
2018          * @since 1.7
2019          */
2020         public static final UnicodeBlock VAI =
2021             new UnicodeBlock("VAI");
2022 
2023         /**
2024          * Constant for the "Cyrillic Extended-B" Unicode character block.
2025          * @since 1.7
2026          */
2027         public static final UnicodeBlock CYRILLIC_EXTENDED_B =
2028             new UnicodeBlock("CYRILLIC_EXTENDED_B",
2029                              "CYRILLIC EXTENDED-B",
2030                              "CYRILLICEXTENDED-B");
2031 
2032         /**
2033          * Constant for the "Bamum" Unicode character block.
2034          * @since 1.7
2035          */
2036         public static final UnicodeBlock BAMUM =
2037             new UnicodeBlock("BAMUM");
2038 
2039         /**
2040          * Constant for the "Modifier Tone Letters" Unicode character block.
2041          * @since 1.7
2042          */
2043         public static final UnicodeBlock MODIFIER_TONE_LETTERS =
2044             new UnicodeBlock("MODIFIER_TONE_LETTERS",
2045                              "MODIFIER TONE LETTERS",
2046                              "MODIFIERTONELETTERS");
2047 
2048         /**
2049          * Constant for the "Latin Extended-D" Unicode character block.
2050          * @since 1.7
2051          */
2052         public static final UnicodeBlock LATIN_EXTENDED_D =
2053             new UnicodeBlock("LATIN_EXTENDED_D",
2054                              "LATIN EXTENDED-D",
2055                              "LATINEXTENDED-D");
2056 
2057         /**
2058          * Constant for the "Syloti Nagri" Unicode character block.
2059          * @since 1.7
2060          */
2061         public static final UnicodeBlock SYLOTI_NAGRI =
2062             new UnicodeBlock("SYLOTI_NAGRI",
2063                              "SYLOTI NAGRI",
2064                              "SYLOTINAGRI");
2065 
2066         /**
2067          * Constant for the "Common Indic Number Forms" Unicode character block.
2068          * @since 1.7
2069          */
2070         public static final UnicodeBlock COMMON_INDIC_NUMBER_FORMS =
2071             new UnicodeBlock("COMMON_INDIC_NUMBER_FORMS",
2072                              "COMMON INDIC NUMBER FORMS",
2073                              "COMMONINDICNUMBERFORMS");
2074 
2075         /**
2076          * Constant for the "Phags-pa" Unicode character block.
2077          * @since 1.7
2078          */
2079         public static final UnicodeBlock PHAGS_PA =
2080             new UnicodeBlock("PHAGS_PA",
2081                              "PHAGS-PA");
2082 
2083         /**
2084          * Constant for the "Saurashtra" Unicode character block.
2085          * @since 1.7
2086          */
2087         public static final UnicodeBlock SAURASHTRA =
2088             new UnicodeBlock("SAURASHTRA");
2089 
2090         /**
2091          * Constant for the "Devanagari Extended" Unicode character block.
2092          * @since 1.7
2093          */
2094         public static final UnicodeBlock DEVANAGARI_EXTENDED =
2095             new UnicodeBlock("DEVANAGARI_EXTENDED",
2096                              "DEVANAGARI EXTENDED",
2097                              "DEVANAGARIEXTENDED");
2098 
2099         /**
2100          * Constant for the "Kayah Li" Unicode character block.
2101          * @since 1.7
2102          */
2103         public static final UnicodeBlock KAYAH_LI =
2104             new UnicodeBlock("KAYAH_LI",
2105                              "KAYAH LI",
2106                              "KAYAHLI");
2107 
2108         /**
2109          * Constant for the "Rejang" Unicode character block.
2110          * @since 1.7
2111          */
2112         public static final UnicodeBlock REJANG =
2113             new UnicodeBlock("REJANG");
2114 
2115         /**
2116          * Constant for the "Hangul Jamo Extended-A" Unicode character block.
2117          * @since 1.7
2118          */
2119         public static final UnicodeBlock HANGUL_JAMO_EXTENDED_A =
2120             new UnicodeBlock("HANGUL_JAMO_EXTENDED_A",
2121                              "HANGUL JAMO EXTENDED-A",
2122                              "HANGULJAMOEXTENDED-A");
2123 
2124         /**
2125          * Constant for the "Javanese" Unicode character block.
2126          * @since 1.7
2127          */
2128         public static final UnicodeBlock JAVANESE =
2129             new UnicodeBlock("JAVANESE");
2130 
2131         /**
2132          * Constant for the "Cham" Unicode character block.
2133          * @since 1.7
2134          */
2135         public static final UnicodeBlock CHAM =
2136             new UnicodeBlock("CHAM");
2137 
2138         /**
2139          * Constant for the "Myanmar Extended-A" Unicode character block.
2140          * @since 1.7
2141          */
2142         public static final UnicodeBlock MYANMAR_EXTENDED_A =
2143             new UnicodeBlock("MYANMAR_EXTENDED_A",
2144                              "MYANMAR EXTENDED-A",
2145                              "MYANMAREXTENDED-A");
2146 
2147         /**
2148          * Constant for the "Tai Viet" Unicode character block.
2149          * @since 1.7
2150          */
2151         public static final UnicodeBlock TAI_VIET =
2152             new UnicodeBlock("TAI_VIET",
2153                              "TAI VIET",
2154                              "TAIVIET");
2155 
2156         /**
2157          * Constant for the "Ethiopic Extended-A" Unicode character block.
2158          * @since 1.7
2159          */
2160         public static final UnicodeBlock ETHIOPIC_EXTENDED_A =
2161             new UnicodeBlock("ETHIOPIC_EXTENDED_A",
2162                              "ETHIOPIC EXTENDED-A",
2163                              "ETHIOPICEXTENDED-A");
2164 
2165         /**
2166          * Constant for the "Meetei Mayek" Unicode character block.
2167          * @since 1.7
2168          */
2169         public static final UnicodeBlock MEETEI_MAYEK =
2170             new UnicodeBlock("MEETEI_MAYEK",
2171                              "MEETEI MAYEK",
2172                              "MEETEIMAYEK");
2173 
2174         /**
2175          * Constant for the "Hangul Jamo Extended-B" Unicode character block.
2176          * @since 1.7
2177          */
2178         public static final UnicodeBlock HANGUL_JAMO_EXTENDED_B =
2179             new UnicodeBlock("HANGUL_JAMO_EXTENDED_B",
2180                              "HANGUL JAMO EXTENDED-B",
2181                              "HANGULJAMOEXTENDED-B");
2182 
2183         /**
2184          * Constant for the "Vertical Forms" Unicode character block.
2185          * @since 1.7
2186          */
2187         public static final UnicodeBlock VERTICAL_FORMS =
2188             new UnicodeBlock("VERTICAL_FORMS",
2189                              "VERTICAL FORMS",
2190                              "VERTICALFORMS");
2191 
2192         /**
2193          * Constant for the "Ancient Greek Numbers" Unicode character block.
2194          * @since 1.7
2195          */
2196         public static final UnicodeBlock ANCIENT_GREEK_NUMBERS =
2197             new UnicodeBlock("ANCIENT_GREEK_NUMBERS",
2198                              "ANCIENT GREEK NUMBERS",
2199                              "ANCIENTGREEKNUMBERS");
2200 
2201         /**
2202          * Constant for the "Ancient Symbols" Unicode character block.
2203          * @since 1.7
2204          */
2205         public static final UnicodeBlock ANCIENT_SYMBOLS =
2206             new UnicodeBlock("ANCIENT_SYMBOLS",
2207                              "ANCIENT SYMBOLS",
2208                              "ANCIENTSYMBOLS");
2209 
2210         /**
2211          * Constant for the "Phaistos Disc" Unicode character block.
2212          * @since 1.7
2213          */
2214         public static final UnicodeBlock PHAISTOS_DISC =
2215             new UnicodeBlock("PHAISTOS_DISC",
2216                              "PHAISTOS DISC",
2217                              "PHAISTOSDISC");
2218 
2219         /**
2220          * Constant for the "Lycian" Unicode character block.
2221          * @since 1.7
2222          */
2223         public static final UnicodeBlock LYCIAN =
2224             new UnicodeBlock("LYCIAN");
2225 
2226         /**
2227          * Constant for the "Carian" Unicode character block.
2228          * @since 1.7
2229          */
2230         public static final UnicodeBlock CARIAN =
2231             new UnicodeBlock("CARIAN");
2232 
2233         /**
2234          * Constant for the "Old Persian" Unicode character block.
2235          * @since 1.7
2236          */
2237         public static final UnicodeBlock OLD_PERSIAN =
2238             new UnicodeBlock("OLD_PERSIAN",
2239                              "OLD PERSIAN",
2240                              "OLDPERSIAN");
2241 
2242         /**
2243          * Constant for the "Imperial Aramaic" Unicode character block.
2244          * @since 1.7
2245          */
2246         public static final UnicodeBlock IMPERIAL_ARAMAIC =
2247             new UnicodeBlock("IMPERIAL_ARAMAIC",
2248                              "IMPERIAL ARAMAIC",
2249                              "IMPERIALARAMAIC");
2250 
2251         /**
2252          * Constant for the "Phoenician" Unicode character block.
2253          * @since 1.7
2254          */
2255         public static final UnicodeBlock PHOENICIAN =
2256             new UnicodeBlock("PHOENICIAN");
2257 
2258         /**
2259          * Constant for the "Lydian" Unicode character block.
2260          * @since 1.7
2261          */
2262         public static final UnicodeBlock LYDIAN =
2263             new UnicodeBlock("LYDIAN");
2264 
2265         /**
2266          * Constant for the "Kharoshthi" Unicode character block.
2267          * @since 1.7
2268          */
2269         public static final UnicodeBlock KHAROSHTHI =
2270             new UnicodeBlock("KHAROSHTHI");
2271 
2272         /**
2273          * Constant for the "Old South Arabian" Unicode character block.
2274          * @since 1.7
2275          */
2276         public static final UnicodeBlock OLD_SOUTH_ARABIAN =
2277             new UnicodeBlock("OLD_SOUTH_ARABIAN",
2278                              "OLD SOUTH ARABIAN",
2279                              "OLDSOUTHARABIAN");
2280 
2281         /**
2282          * Constant for the "Avestan" Unicode character block.
2283          * @since 1.7
2284          */
2285         public static final UnicodeBlock AVESTAN =
2286             new UnicodeBlock("AVESTAN");
2287 
2288         /**
2289          * Constant for the "Inscriptional Parthian" Unicode character block.
2290          * @since 1.7
2291          */
2292         public static final UnicodeBlock INSCRIPTIONAL_PARTHIAN =
2293             new UnicodeBlock("INSCRIPTIONAL_PARTHIAN",
2294                              "INSCRIPTIONAL PARTHIAN",
2295                              "INSCRIPTIONALPARTHIAN");
2296 
2297         /**
2298          * Constant for the "Inscriptional Pahlavi" Unicode character block.
2299          * @since 1.7
2300          */
2301         public static final UnicodeBlock INSCRIPTIONAL_PAHLAVI =
2302             new UnicodeBlock("INSCRIPTIONAL_PAHLAVI",
2303                              "INSCRIPTIONAL PAHLAVI",
2304                              "INSCRIPTIONALPAHLAVI");
2305 
2306         /**
2307          * Constant for the "Old Turkic" Unicode character block.
2308          * @since 1.7
2309          */
2310         public static final UnicodeBlock OLD_TURKIC =
2311             new UnicodeBlock("OLD_TURKIC",
2312                              "OLD TURKIC",
2313                              "OLDTURKIC");
2314 
2315         /**
2316          * Constant for the "Rumi Numeral Symbols" Unicode character block.
2317          * @since 1.7
2318          */
2319         public static final UnicodeBlock RUMI_NUMERAL_SYMBOLS =
2320             new UnicodeBlock("RUMI_NUMERAL_SYMBOLS",
2321                              "RUMI NUMERAL SYMBOLS",
2322                              "RUMINUMERALSYMBOLS");
2323 
2324         /**
2325          * Constant for the "Brahmi" Unicode character block.
2326          * @since 1.7
2327          */
2328         public static final UnicodeBlock BRAHMI =
2329             new UnicodeBlock("BRAHMI");
2330 
2331         /**
2332          * Constant for the "Kaithi" Unicode character block.
2333          * @since 1.7
2334          */
2335         public static final UnicodeBlock KAITHI =
2336             new UnicodeBlock("KAITHI");
2337 
2338         /**
2339          * Constant for the "Cuneiform" Unicode character block.
2340          * @since 1.7
2341          */
2342         public static final UnicodeBlock CUNEIFORM =
2343             new UnicodeBlock("CUNEIFORM");
2344 
2345         /**
2346          * Constant for the "Cuneiform Numbers and Punctuation" Unicode
2347          * character block.
2348          * @since 1.7
2349          */
2350         public static final UnicodeBlock CUNEIFORM_NUMBERS_AND_PUNCTUATION =
2351             new UnicodeBlock("CUNEIFORM_NUMBERS_AND_PUNCTUATION",
2352                              "CUNEIFORM NUMBERS AND PUNCTUATION",
2353                              "CUNEIFORMNUMBERSANDPUNCTUATION");
2354 
2355         /**
2356          * Constant for the "Egyptian Hieroglyphs" Unicode character block.
2357          * @since 1.7
2358          */
2359         public static final UnicodeBlock EGYPTIAN_HIEROGLYPHS =
2360             new UnicodeBlock("EGYPTIAN_HIEROGLYPHS",
2361                              "EGYPTIAN HIEROGLYPHS",
2362                              "EGYPTIANHIEROGLYPHS");
2363 
2364         /**
2365          * Constant for the "Bamum Supplement" Unicode character block.
2366          * @since 1.7
2367          */
2368         public static final UnicodeBlock BAMUM_SUPPLEMENT =
2369             new UnicodeBlock("BAMUM_SUPPLEMENT",
2370                              "BAMUM SUPPLEMENT",
2371                              "BAMUMSUPPLEMENT");
2372 
2373         /**
2374          * Constant for the "Kana Supplement" Unicode character block.
2375          * @since 1.7
2376          */
2377         public static final UnicodeBlock KANA_SUPPLEMENT =
2378             new UnicodeBlock("KANA_SUPPLEMENT",
2379                              "KANA SUPPLEMENT",
2380                              "KANASUPPLEMENT");
2381 
2382         /**
2383          * Constant for the "Ancient Greek Musical Notation" Unicode character
2384          * block.
2385          * @since 1.7
2386          */
2387         public static final UnicodeBlock ANCIENT_GREEK_MUSICAL_NOTATION =
2388             new UnicodeBlock("ANCIENT_GREEK_MUSICAL_NOTATION",
2389                              "ANCIENT GREEK MUSICAL NOTATION",
2390                              "ANCIENTGREEKMUSICALNOTATION");
2391 
2392         /**
2393          * Constant for the "Counting Rod Numerals" Unicode character block.
2394          * @since 1.7
2395          */
2396         public static final UnicodeBlock COUNTING_ROD_NUMERALS =
2397             new UnicodeBlock("COUNTING_ROD_NUMERALS",
2398                              "COUNTING ROD NUMERALS",
2399                              "COUNTINGRODNUMERALS");
2400 
2401         /**
2402          * Constant for the "Mahjong Tiles" Unicode character block.
2403          * @since 1.7
2404          */
2405         public static final UnicodeBlock MAHJONG_TILES =
2406             new UnicodeBlock("MAHJONG_TILES",
2407                              "MAHJONG TILES",
2408                              "MAHJONGTILES");
2409 
2410         /**
2411          * Constant for the "Domino Tiles" Unicode character block.
2412          * @since 1.7
2413          */
2414         public static final UnicodeBlock DOMINO_TILES =
2415             new UnicodeBlock("DOMINO_TILES",
2416                              "DOMINO TILES",
2417                              "DOMINOTILES");
2418 
2419         /**
2420          * Constant for the "Playing Cards" Unicode character block.
2421          * @since 1.7
2422          */
2423         public static final UnicodeBlock PLAYING_CARDS =
2424             new UnicodeBlock("PLAYING_CARDS",
2425                              "PLAYING CARDS",
2426                              "PLAYINGCARDS");
2427 
2428         /**
2429          * Constant for the "Enclosed Alphanumeric Supplement" Unicode character
2430          * block.
2431          * @since 1.7
2432          */
2433         public static final UnicodeBlock ENCLOSED_ALPHANUMERIC_SUPPLEMENT =
2434             new UnicodeBlock("ENCLOSED_ALPHANUMERIC_SUPPLEMENT",
2435                              "ENCLOSED ALPHANUMERIC SUPPLEMENT",
2436                              "ENCLOSEDALPHANUMERICSUPPLEMENT");
2437 
2438         /**
2439          * Constant for the "Enclosed Ideographic Supplement" Unicode character
2440          * block.
2441          * @since 1.7
2442          */
2443         public static final UnicodeBlock ENCLOSED_IDEOGRAPHIC_SUPPLEMENT =
2444             new UnicodeBlock("ENCLOSED_IDEOGRAPHIC_SUPPLEMENT",
2445                              "ENCLOSED IDEOGRAPHIC SUPPLEMENT",
2446                              "ENCLOSEDIDEOGRAPHICSUPPLEMENT");
2447 
2448         /**
2449          * Constant for the "Miscellaneous Symbols And Pictographs" Unicode
2450          * character block.
2451          * @since 1.7
2452          */
2453         public static final UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS =
2454             new UnicodeBlock("MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS",
2455                              "MISCELLANEOUS SYMBOLS AND PICTOGRAPHS",
2456                              "MISCELLANEOUSSYMBOLSANDPICTOGRAPHS");
2457 
2458         /**
2459          * Constant for the "Emoticons" Unicode character block.
2460          * @since 1.7
2461          */
2462         public static final UnicodeBlock EMOTICONS =
2463             new UnicodeBlock("EMOTICONS");
2464 
2465         /**
2466          * Constant for the "Transport And Map Symbols" Unicode character block.
2467          * @since 1.7
2468          */
2469         public static final UnicodeBlock TRANSPORT_AND_MAP_SYMBOLS =
2470             new UnicodeBlock("TRANSPORT_AND_MAP_SYMBOLS",
2471                              "TRANSPORT AND MAP SYMBOLS",
2472                              "TRANSPORTANDMAPSYMBOLS");
2473 
2474         /**
2475          * Constant for the "Alchemical Symbols" Unicode character block.
2476          * @since 1.7
2477          */
2478         public static final UnicodeBlock ALCHEMICAL_SYMBOLS =
2479             new UnicodeBlock("ALCHEMICAL_SYMBOLS",
2480                              "ALCHEMICAL SYMBOLS",
2481                              "ALCHEMICALSYMBOLS");
2482 
2483         /**
2484          * Constant for the "CJK Unified Ideographs Extension C" Unicode
2485          * character block.
2486          * @since 1.7
2487          */
2488         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C =
2489             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C",
2490                              "CJK UNIFIED IDEOGRAPHS EXTENSION C",
2491                              "CJKUNIFIEDIDEOGRAPHSEXTENSIONC");
2492 
2493         /**
2494          * Constant for the "CJK Unified Ideographs Extension D" Unicode
2495          * character block.
2496          * @since 1.7
2497          */
2498         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D =
2499             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D",
2500                              "CJK UNIFIED IDEOGRAPHS EXTENSION D",
2501                              "CJKUNIFIEDIDEOGRAPHSEXTENSIOND");
2502 
2503         /**
2504          * Constant for the "Arabic Extended-A" Unicode character block.
2505          * @since 1.8
2506          */
2507         public static final UnicodeBlock ARABIC_EXTENDED_A =
2508             new UnicodeBlock("ARABIC_EXTENDED_A",
2509                              "ARABIC EXTENDED-A",
2510                              "ARABICEXTENDED-A");
2511 
2512         /**
2513          * Constant for the "Sundanese Supplement" Unicode character block.
2514          * @since 1.8
2515          */
2516         public static final UnicodeBlock SUNDANESE_SUPPLEMENT =
2517             new UnicodeBlock("SUNDANESE_SUPPLEMENT",
2518                              "SUNDANESE SUPPLEMENT",
2519                              "SUNDANESESUPPLEMENT");
2520 
2521         /**
2522          * Constant for the "Meetei Mayek Extensions" Unicode character block.
2523          * @since 1.8
2524          */
2525         public static final UnicodeBlock MEETEI_MAYEK_EXTENSIONS =
2526             new UnicodeBlock("MEETEI_MAYEK_EXTENSIONS",
2527                              "MEETEI MAYEK EXTENSIONS",
2528                              "MEETEIMAYEKEXTENSIONS");
2529 
2530         /**
2531          * Constant for the "Meroitic Hieroglyphs" Unicode character block.
2532          * @since 1.8
2533          */
2534         public static final UnicodeBlock MEROITIC_HIEROGLYPHS =
2535             new UnicodeBlock("MEROITIC_HIEROGLYPHS",
2536                              "MEROITIC HIEROGLYPHS",
2537                              "MEROITICHIEROGLYPHS");
2538 
2539         /**
2540          * Constant for the "Meroitic Cursive" Unicode character block.
2541          * @since 1.8
2542          */
2543         public static final UnicodeBlock MEROITIC_CURSIVE =
2544             new UnicodeBlock("MEROITIC_CURSIVE",
2545                              "MEROITIC CURSIVE",
2546                              "MEROITICCURSIVE");
2547 
2548         /**
2549          * Constant for the "Sora Sompeng" Unicode character block.
2550          * @since 1.8
2551          */
2552         public static final UnicodeBlock SORA_SOMPENG =
2553             new UnicodeBlock("SORA_SOMPENG",
2554                              "SORA SOMPENG",
2555                              "SORASOMPENG");
2556 
2557         /**
2558          * Constant for the "Chakma" Unicode character block.
2559          * @since 1.8
2560          */
2561         public static final UnicodeBlock CHAKMA =
2562             new UnicodeBlock("CHAKMA");
2563 
2564         /**
2565          * Constant for the "Sharada" Unicode character block.
2566          * @since 1.8
2567          */
2568         public static final UnicodeBlock SHARADA =
2569             new UnicodeBlock("SHARADA");
2570 
2571         /**
2572          * Constant for the "Takri" Unicode character block.
2573          * @since 1.8
2574          */
2575         public static final UnicodeBlock TAKRI =
2576             new UnicodeBlock("TAKRI");
2577 
2578         /**
2579          * Constant for the "Miao" Unicode character block.
2580          * @since 1.8
2581          */
2582         public static final UnicodeBlock MIAO =
2583             new UnicodeBlock("MIAO");
2584 
2585         /**
2586          * Constant for the "Arabic Mathematical Alphabetic Symbols" Unicode
2587          * character block.
2588          * @since 1.8
2589          */
2590         public static final UnicodeBlock ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS =
2591             new UnicodeBlock("ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS",
2592                              "ARABIC MATHEMATICAL ALPHABETIC SYMBOLS",
2593                              "ARABICMATHEMATICALALPHABETICSYMBOLS");
2594 
2595         /**
2596          * Constant for the "Combining Diacritical Marks Extended" Unicode
2597          * character block.
2598          * @since 9
2599          */
2600         public static final UnicodeBlock COMBINING_DIACRITICAL_MARKS_EXTENDED =
2601             new UnicodeBlock("COMBINING_DIACRITICAL_MARKS_EXTENDED",
2602                              "COMBINING DIACRITICAL MARKS EXTENDED",
2603                              "COMBININGDIACRITICALMARKSEXTENDED");
2604 
2605         /**
2606          * Constant for the "Myanmar Extended-B" Unicode character block.
2607          * @since 9
2608          */
2609         public static final UnicodeBlock MYANMAR_EXTENDED_B =
2610             new UnicodeBlock("MYANMAR_EXTENDED_B",
2611                              "MYANMAR EXTENDED-B",
2612                              "MYANMAREXTENDED-B");
2613 
2614         /**
2615          * Constant for the "Latin Extended-E" Unicode character block.
2616          * @since 9
2617          */
2618         public static final UnicodeBlock LATIN_EXTENDED_E =
2619             new UnicodeBlock("LATIN_EXTENDED_E",
2620                              "LATIN EXTENDED-E",
2621                              "LATINEXTENDED-E");
2622 
2623         /**
2624          * Constant for the "Coptic Epact Numbers" Unicode character block.
2625          * @since 9
2626          */
2627         public static final UnicodeBlock COPTIC_EPACT_NUMBERS =
2628             new UnicodeBlock("COPTIC_EPACT_NUMBERS",
2629                              "COPTIC EPACT NUMBERS",
2630                              "COPTICEPACTNUMBERS");
2631 
2632         /**
2633          * Constant for the "Old Permic" Unicode character block.
2634          * @since 9
2635          */
2636         public static final UnicodeBlock OLD_PERMIC =
2637             new UnicodeBlock("OLD_PERMIC",
2638                              "OLD PERMIC",
2639                              "OLDPERMIC");
2640 
2641         /**
2642          * Constant for the "Elbasan" Unicode character block.
2643          * @since 9
2644          */
2645         public static final UnicodeBlock ELBASAN =
2646             new UnicodeBlock("ELBASAN");
2647 
2648         /**
2649          * Constant for the "Caucasian Albanian" Unicode character block.
2650          * @since 9
2651          */
2652         public static final UnicodeBlock CAUCASIAN_ALBANIAN =
2653             new UnicodeBlock("CAUCASIAN_ALBANIAN",
2654                              "CAUCASIAN ALBANIAN",
2655                              "CAUCASIANALBANIAN");
2656 
2657         /**
2658          * Constant for the "Linear A" Unicode character block.
2659          * @since 9
2660          */
2661         public static final UnicodeBlock LINEAR_A =
2662             new UnicodeBlock("LINEAR_A",
2663                              "LINEAR A",
2664                              "LINEARA");
2665 
2666         /**
2667          * Constant for the "Palmyrene" Unicode character block.
2668          * @since 9
2669          */
2670         public static final UnicodeBlock PALMYRENE =
2671             new UnicodeBlock("PALMYRENE");
2672 
2673         /**
2674          * Constant for the "Nabataean" Unicode character block.
2675          * @since 9
2676          */
2677         public static final UnicodeBlock NABATAEAN =
2678             new UnicodeBlock("NABATAEAN");
2679 
2680         /**
2681          * Constant for the "Old North Arabian" Unicode character block.
2682          * @since 9
2683          */
2684         public static final UnicodeBlock OLD_NORTH_ARABIAN =
2685             new UnicodeBlock("OLD_NORTH_ARABIAN",
2686                              "OLD NORTH ARABIAN",
2687                              "OLDNORTHARABIAN");
2688 
2689         /**
2690          * Constant for the "Manichaean" Unicode character block.
2691          * @since 9
2692          */
2693         public static final UnicodeBlock MANICHAEAN =
2694             new UnicodeBlock("MANICHAEAN");
2695 
2696         /**
2697          * Constant for the "Psalter Pahlavi" Unicode character block.
2698          * @since 9
2699          */
2700         public static final UnicodeBlock PSALTER_PAHLAVI =
2701             new UnicodeBlock("PSALTER_PAHLAVI",
2702                              "PSALTER PAHLAVI",
2703                              "PSALTERPAHLAVI");
2704 
2705         /**
2706          * Constant for the "Mahajani" Unicode character block.
2707          * @since 9
2708          */
2709         public static final UnicodeBlock MAHAJANI =
2710             new UnicodeBlock("MAHAJANI");
2711 
2712         /**
2713          * Constant for the "Sinhala Archaic Numbers" Unicode character block.
2714          * @since 9
2715          */
2716         public static final UnicodeBlock SINHALA_ARCHAIC_NUMBERS =
2717             new UnicodeBlock("SINHALA_ARCHAIC_NUMBERS",
2718                              "SINHALA ARCHAIC NUMBERS",
2719                              "SINHALAARCHAICNUMBERS");
2720 
2721         /**
2722          * Constant for the "Khojki" Unicode character block.
2723          * @since 9
2724          */
2725         public static final UnicodeBlock KHOJKI =
2726             new UnicodeBlock("KHOJKI");
2727 
2728         /**
2729          * Constant for the "Khudawadi" Unicode character block.
2730          * @since 9
2731          */
2732         public static final UnicodeBlock KHUDAWADI =
2733             new UnicodeBlock("KHUDAWADI");
2734 
2735         /**
2736          * Constant for the "Grantha" Unicode character block.
2737          * @since 9
2738          */
2739         public static final UnicodeBlock GRANTHA =
2740             new UnicodeBlock("GRANTHA");
2741 
2742         /**
2743          * Constant for the "Tirhuta" Unicode character block.
2744          * @since 9
2745          */
2746         public static final UnicodeBlock TIRHUTA =
2747             new UnicodeBlock("TIRHUTA");
2748 
2749         /**
2750          * Constant for the "Siddham" Unicode character block.
2751          * @since 9
2752          */
2753         public static final UnicodeBlock SIDDHAM =
2754             new UnicodeBlock("SIDDHAM");
2755 
2756         /**
2757          * Constant for the "Modi" Unicode character block.
2758          * @since 9
2759          */
2760         public static final UnicodeBlock MODI =
2761             new UnicodeBlock("MODI");
2762 
2763         /**
2764          * Constant for the "Warang Citi" Unicode character block.
2765          * @since 9
2766          */
2767         public static final UnicodeBlock WARANG_CITI =
2768             new UnicodeBlock("WARANG_CITI",
2769                              "WARANG CITI",
2770                              "WARANGCITI");
2771 
2772         /**
2773          * Constant for the "Pau Cin Hau" Unicode character block.
2774          * @since 9
2775          */
2776         public static final UnicodeBlock PAU_CIN_HAU =
2777             new UnicodeBlock("PAU_CIN_HAU",
2778                              "PAU CIN HAU",
2779                              "PAUCINHAU");
2780 
2781         /**
2782          * Constant for the "Mro" Unicode character block.
2783          * @since 9
2784          */
2785         public static final UnicodeBlock MRO =
2786             new UnicodeBlock("MRO");
2787 
2788         /**
2789          * Constant for the "Bassa Vah" Unicode character block.
2790          * @since 9
2791          */
2792         public static final UnicodeBlock BASSA_VAH =
2793             new UnicodeBlock("BASSA_VAH",
2794                              "BASSA VAH",
2795                              "BASSAVAH");
2796 
2797         /**
2798          * Constant for the "Pahawh Hmong" Unicode character block.
2799          * @since 9
2800          */
2801         public static final UnicodeBlock PAHAWH_HMONG =
2802             new UnicodeBlock("PAHAWH_HMONG",
2803                              "PAHAWH HMONG",
2804                              "PAHAWHHMONG");
2805 
2806         /**
2807          * Constant for the "Duployan" Unicode character block.
2808          * @since 9
2809          */
2810         public static final UnicodeBlock DUPLOYAN =
2811             new UnicodeBlock("DUPLOYAN");
2812 
2813         /**
2814          * Constant for the "Shorthand Format Controls" Unicode character block.
2815          * @since 9
2816          */
2817         public static final UnicodeBlock SHORTHAND_FORMAT_CONTROLS =
2818             new UnicodeBlock("SHORTHAND_FORMAT_CONTROLS",
2819                              "SHORTHAND FORMAT CONTROLS",
2820                              "SHORTHANDFORMATCONTROLS");
2821 
2822         /**
2823          * Constant for the "Mende Kikakui" Unicode character block.
2824          * @since 9
2825          */
2826         public static final UnicodeBlock MENDE_KIKAKUI =
2827             new UnicodeBlock("MENDE_KIKAKUI",
2828                              "MENDE KIKAKUI",
2829                              "MENDEKIKAKUI");
2830 
2831         /**
2832          * Constant for the "Ornamental Dingbats" Unicode character block.
2833          * @since 9
2834          */
2835         public static final UnicodeBlock ORNAMENTAL_DINGBATS =
2836             new UnicodeBlock("ORNAMENTAL_DINGBATS",
2837                              "ORNAMENTAL DINGBATS",
2838                              "ORNAMENTALDINGBATS");
2839 
2840         /**
2841          * Constant for the "Geometric Shapes Extended" Unicode character block.
2842          * @since 9
2843          */
2844         public static final UnicodeBlock GEOMETRIC_SHAPES_EXTENDED =
2845             new UnicodeBlock("GEOMETRIC_SHAPES_EXTENDED",
2846                              "GEOMETRIC SHAPES EXTENDED",
2847                              "GEOMETRICSHAPESEXTENDED");
2848 
2849         /**
2850          * Constant for the "Supplemental Arrows-C" Unicode character block.
2851          * @since 9
2852          */
2853         public static final UnicodeBlock SUPPLEMENTAL_ARROWS_C =
2854             new UnicodeBlock("SUPPLEMENTAL_ARROWS_C",
2855                              "SUPPLEMENTAL ARROWS-C",
2856                              "SUPPLEMENTALARROWS-C");
2857 
2858         /**
2859          * Constant for the "Cherokee Supplement" Unicode character block.
2860          * @since 9
2861          */
2862         public static final UnicodeBlock CHEROKEE_SUPPLEMENT =
2863             new UnicodeBlock("CHEROKEE_SUPPLEMENT",
2864                              "CHEROKEE SUPPLEMENT",
2865                              "CHEROKEESUPPLEMENT");
2866 
2867         /**
2868          * Constant for the "Hatran" Unicode character block.
2869          * @since 9
2870          */
2871         public static final UnicodeBlock HATRAN =
2872             new UnicodeBlock("HATRAN");
2873 
2874         /**
2875          * Constant for the "Old Hungarian" Unicode character block.
2876          * @since 9
2877          */
2878         public static final UnicodeBlock OLD_HUNGARIAN =
2879             new UnicodeBlock("OLD_HUNGARIAN",
2880                              "OLD HUNGARIAN",
2881                              "OLDHUNGARIAN");
2882 
2883         /**
2884          * Constant for the "Multani" Unicode character block.
2885          * @since 9
2886          */
2887         public static final UnicodeBlock MULTANI =
2888             new UnicodeBlock("MULTANI");
2889 
2890         /**
2891          * Constant for the "Ahom" Unicode character block.
2892          * @since 9
2893          */
2894         public static final UnicodeBlock AHOM =
2895             new UnicodeBlock("AHOM");
2896 
2897         /**
2898          * Constant for the "Early Dynastic Cuneiform" Unicode character block.
2899          * @since 9
2900          */
2901         public static final UnicodeBlock EARLY_DYNASTIC_CUNEIFORM =
2902             new UnicodeBlock("EARLY_DYNASTIC_CUNEIFORM",
2903                              "EARLY DYNASTIC CUNEIFORM",
2904                              "EARLYDYNASTICCUNEIFORM");
2905 
2906         /**
2907          * Constant for the "Anatolian Hieroglyphs" Unicode character block.
2908          * @since 9
2909          */
2910         public static final UnicodeBlock ANATOLIAN_HIEROGLYPHS =
2911             new UnicodeBlock("ANATOLIAN_HIEROGLYPHS",
2912                              "ANATOLIAN HIEROGLYPHS",
2913                              "ANATOLIANHIEROGLYPHS");
2914 
2915         /**
2916          * Constant for the "Sutton SignWriting" Unicode character block.
2917          * @since 9
2918          */
2919         public static final UnicodeBlock SUTTON_SIGNWRITING =
2920             new UnicodeBlock("SUTTON_SIGNWRITING",
2921                              "SUTTON SIGNWRITING",
2922                              "SUTTONSIGNWRITING");
2923 
2924         /**
2925          * Constant for the "Supplemental Symbols and Pictographs" Unicode
2926          * character block.
2927          * @since 9
2928          */
2929         public static final UnicodeBlock SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS =
2930             new UnicodeBlock("SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS",
2931                              "SUPPLEMENTAL SYMBOLS AND PICTOGRAPHS",
2932                              "SUPPLEMENTALSYMBOLSANDPICTOGRAPHS");
2933 
2934         /**
2935          * Constant for the "CJK Unified Ideographs Extension E" Unicode
2936          * character block.
2937          * @since 9
2938          */
2939         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E =
2940             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E",
2941                              "CJK UNIFIED IDEOGRAPHS EXTENSION E",
2942                              "CJKUNIFIEDIDEOGRAPHSEXTENSIONE");
2943 
2944         /**
2945          * Constant for the "Syriac Supplement" Unicode
2946          * character block.
2947          * @since 11
2948          */
2949         public static final UnicodeBlock SYRIAC_SUPPLEMENT =
2950             new UnicodeBlock("SYRIAC_SUPPLEMENT",
2951                              "SYRIAC SUPPLEMENT",
2952                              "SYRIACSUPPLEMENT");
2953 
2954         /**
2955          * Constant for the "Cyrillic Extended-C" Unicode
2956          * character block.
2957          * @since 11
2958          */
2959         public static final UnicodeBlock CYRILLIC_EXTENDED_C =
2960             new UnicodeBlock("CYRILLIC_EXTENDED_C",
2961                              "CYRILLIC EXTENDED-C",
2962                              "CYRILLICEXTENDED-C");
2963 
2964         /**
2965          * Constant for the "Osage" Unicode
2966          * character block.
2967          * @since 11
2968          */
2969         public static final UnicodeBlock OSAGE =
2970             new UnicodeBlock("OSAGE");
2971 
2972         /**
2973          * Constant for the "Newa" Unicode
2974          * character block.
2975          * @since 11
2976          */
2977         public static final UnicodeBlock NEWA =
2978             new UnicodeBlock("NEWA");
2979 
2980         /**
2981          * Constant for the "Mongolian Supplement" Unicode
2982          * character block.
2983          * @since 11
2984          */
2985         public static final UnicodeBlock MONGOLIAN_SUPPLEMENT =
2986             new UnicodeBlock("MONGOLIAN_SUPPLEMENT",
2987                              "MONGOLIAN SUPPLEMENT",
2988                              "MONGOLIANSUPPLEMENT");
2989 
2990         /**
2991          * Constant for the "Marchen" Unicode
2992          * character block.
2993          * @since 11
2994          */
2995         public static final UnicodeBlock MARCHEN =
2996             new UnicodeBlock("MARCHEN");
2997 
2998         /**
2999          * Constant for the "Ideographic Symbols and Punctuation" Unicode
3000          * character block.
3001          * @since 11
3002          */
3003         public static final UnicodeBlock IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION =
3004             new UnicodeBlock("IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION",
3005                              "IDEOGRAPHIC SYMBOLS AND PUNCTUATION",
3006                              "IDEOGRAPHICSYMBOLSANDPUNCTUATION");
3007 
3008         /**
3009          * Constant for the "Tangut" Unicode
3010          * character block.
3011          * @since 11
3012          */
3013         public static final UnicodeBlock TANGUT =
3014             new UnicodeBlock("TANGUT");
3015 
3016         /**
3017          * Constant for the "Tangut Components" Unicode
3018          * character block.
3019          * @since 11
3020          */
3021         public static final UnicodeBlock TANGUT_COMPONENTS =
3022             new UnicodeBlock("TANGUT_COMPONENTS",
3023                              "TANGUT COMPONENTS",
3024                              "TANGUTCOMPONENTS");
3025 
3026         /**
3027          * Constant for the "Kana Extended-A" Unicode
3028          * character block.
3029          * @since 11
3030          */
3031         public static final UnicodeBlock KANA_EXTENDED_A =
3032             new UnicodeBlock("KANA_EXTENDED_A",
3033                              "KANA EXTENDED-A",
3034                              "KANAEXTENDED-A");
3035         /**
3036          * Constant for the "Glagolitic Supplement" Unicode
3037          * character block.
3038          * @since 11
3039          */
3040         public static final UnicodeBlock GLAGOLITIC_SUPPLEMENT =
3041             new UnicodeBlock("GLAGOLITIC_SUPPLEMENT",
3042                              "GLAGOLITIC SUPPLEMENT",
3043                              "GLAGOLITICSUPPLEMENT");
3044         /**
3045          * Constant for the "Adlam" Unicode
3046          * character block.
3047          * @since 11
3048          */
3049         public static final UnicodeBlock ADLAM =
3050             new UnicodeBlock("ADLAM");
3051 
3052         /**
3053          * Constant for the "Masaram Gondi" Unicode
3054          * character block.
3055          * @since 11
3056          */
3057         public static final UnicodeBlock MASARAM_GONDI =
3058             new UnicodeBlock("MASARAM_GONDI",
3059                              "MASARAM GONDI",
3060                              "MASARAMGONDI");
3061 
3062         /**
3063          * Constant for the "Zanabazar Square" Unicode
3064          * character block.
3065          * @since 11
3066          */
3067         public static final UnicodeBlock ZANABAZAR_SQUARE =
3068             new UnicodeBlock("ZANABAZAR_SQUARE",
3069                              "ZANABAZAR SQUARE",
3070                              "ZANABAZARSQUARE");
3071 
3072         /**
3073          * Constant for the "Nushu" Unicode
3074          * character block.
3075          * @since 11
3076          */
3077         public static final UnicodeBlock NUSHU =
3078             new UnicodeBlock("NUSHU");
3079 
3080         /**
3081          * Constant for the "Soyombo" Unicode
3082          * character block.
3083          * @since 11
3084          */
3085         public static final UnicodeBlock SOYOMBO =
3086             new UnicodeBlock("SOYOMBO");
3087 
3088         /**
3089          * Constant for the "Bhaiksuki" Unicode
3090          * character block.
3091          * @since 11
3092          */
3093         public static final UnicodeBlock BHAIKSUKI =
3094             new UnicodeBlock("BHAIKSUKI");
3095 
3096         /**
3097          * Constant for the "CJK Unified Ideographs Extension F" Unicode
3098          * character block.
3099          * @since 11
3100          */
3101         public static final UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F =
3102             new UnicodeBlock("CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F",
3103                              "CJK UNIFIED IDEOGRAPHS EXTENSION F",
3104                              "CJKUNIFIEDIDEOGRAPHSEXTENSIONF");
3105         /**
3106          * Constant for the "Georgian Extended" Unicode
3107          * character block.
3108          * @since 12
3109          */
3110         public static final UnicodeBlock GEORGIAN_EXTENDED =
3111             new UnicodeBlock("GEORGIAN_EXTENDED",
3112                              "GEORGIAN EXTENDED",
3113                              "GEORGIANEXTENDED");
3114 
3115         /**
3116          * Constant for the "Hanifi Rohingya" Unicode
3117          * character block.
3118          * @since 12
3119          */
3120         public static final UnicodeBlock HANIFI_ROHINGYA =
3121             new UnicodeBlock("HANIFI_ROHINGYA",
3122                              "HANIFI ROHINGYA",
3123                              "HANIFIROHINGYA");
3124 
3125         /**
3126          * Constant for the "Old Sogdian" Unicode
3127          * character block.
3128          * @since 12
3129          */
3130         public static final UnicodeBlock OLD_SOGDIAN =
3131             new UnicodeBlock("OLD_SOGDIAN",
3132                              "OLD SOGDIAN",
3133                              "OLDSOGDIAN");
3134 
3135         /**
3136          * Constant for the "Sogdian" Unicode
3137          * character block.
3138          * @since 12
3139          */
3140         public static final UnicodeBlock SOGDIAN =
3141             new UnicodeBlock("SOGDIAN");
3142 
3143         /**
3144          * Constant for the "Dogra" Unicode
3145          * character block.
3146          * @since 12
3147          */
3148         public static final UnicodeBlock DOGRA =
3149             new UnicodeBlock("DOGRA");
3150 
3151         /**
3152          * Constant for the "Gunjala Gondi" Unicode
3153          * character block.
3154          * @since 12
3155          */
3156         public static final UnicodeBlock GUNJALA_GONDI =
3157             new UnicodeBlock("GUNJALA_GONDI",
3158                              "GUNJALA GONDI",
3159                              "GUNJALAGONDI");
3160 
3161         /**
3162          * Constant for the "Makasar" Unicode
3163          * character block.
3164          * @since 12
3165          */
3166         public static final UnicodeBlock MAKASAR =
3167             new UnicodeBlock("MAKASAR");
3168 
3169         /**
3170          * Constant for the "Medefaidrin" Unicode
3171          * character block.
3172          * @since 12
3173          */
3174         public static final UnicodeBlock MEDEFAIDRIN =
3175             new UnicodeBlock("MEDEFAIDRIN");
3176 
3177         /**
3178          * Constant for the "Mayan Numerals" Unicode
3179          * character block.
3180          * @since 12
3181          */
3182         public static final UnicodeBlock MAYAN_NUMERALS =
3183             new UnicodeBlock("MAYAN_NUMERALS",
3184                              "MAYAN NUMERALS",
3185                              "MAYANNUMERALS");
3186 
3187        /**
3188          * Constant for the "Indic Siyaq Numbers" Unicode
3189          * character block.
3190          * @since 12
3191          */
3192         public static final UnicodeBlock INDIC_SIYAQ_NUMBERS =
3193             new UnicodeBlock("INDIC_SIYAQ_NUMBERS",
3194                              "INDIC SIYAQ NUMBERS",
3195                              "INDICSIYAQNUMBERS");
3196 
3197         /**
3198          * Constant for the "Chess Symbols" Unicode
3199          * character block.
3200          * @since 12
3201          */
3202         public static final UnicodeBlock CHESS_SYMBOLS =
3203             new UnicodeBlock("CHESS_SYMBOLS",
3204                              "CHESS SYMBOLS",
3205                              "CHESSSYMBOLS");
3206 
3207 
3208         private static final int blockStarts[] = {
3209             0x0000,   // 0000..007F; Basic Latin
3210             0x0080,   // 0080..00FF; Latin-1 Supplement
3211             0x0100,   // 0100..017F; Latin Extended-A
3212             0x0180,   // 0180..024F; Latin Extended-B
3213             0x0250,   // 0250..02AF; IPA Extensions
3214             0x02B0,   // 02B0..02FF; Spacing Modifier Letters
3215             0x0300,   // 0300..036F; Combining Diacritical Marks
3216             0x0370,   // 0370..03FF; Greek and Coptic
3217             0x0400,   // 0400..04FF; Cyrillic
3218             0x0500,   // 0500..052F; Cyrillic Supplement
3219             0x0530,   // 0530..058F; Armenian
3220             0x0590,   // 0590..05FF; Hebrew
3221             0x0600,   // 0600..06FF; Arabic
3222             0x0700,   // 0700..074F; Syriac
3223             0x0750,   // 0750..077F; Arabic Supplement
3224             0x0780,   // 0780..07BF; Thaana
3225             0x07C0,   // 07C0..07FF; NKo
3226             0x0800,   // 0800..083F; Samaritan
3227             0x0840,   // 0840..085F; Mandaic
3228             0x0860,   // 0860..086F; Syriac Supplement
3229             0x0870,   //             unassigned
3230             0x08A0,   // 08A0..08FF; Arabic Extended-A
3231             0x0900,   // 0900..097F; Devanagari
3232             0x0980,   // 0980..09FF; Bengali
3233             0x0A00,   // 0A00..0A7F; Gurmukhi
3234             0x0A80,   // 0A80..0AFF; Gujarati
3235             0x0B00,   // 0B00..0B7F; Oriya
3236             0x0B80,   // 0B80..0BFF; Tamil
3237             0x0C00,   // 0C00..0C7F; Telugu
3238             0x0C80,   // 0C80..0CFF; Kannada
3239             0x0D00,   // 0D00..0D7F; Malayalam
3240             0x0D80,   // 0D80..0DFF; Sinhala
3241             0x0E00,   // 0E00..0E7F; Thai
3242             0x0E80,   // 0E80..0EFF; Lao
3243             0x0F00,   // 0F00..0FFF; Tibetan
3244             0x1000,   // 1000..109F; Myanmar
3245             0x10A0,   // 10A0..10FF; Georgian
3246             0x1100,   // 1100..11FF; Hangul Jamo
3247             0x1200,   // 1200..137F; Ethiopic
3248             0x1380,   // 1380..139F; Ethiopic Supplement
3249             0x13A0,   // 13A0..13FF; Cherokee
3250             0x1400,   // 1400..167F; Unified Canadian Aboriginal Syllabics
3251             0x1680,   // 1680..169F; Ogham
3252             0x16A0,   // 16A0..16FF; Runic
3253             0x1700,   // 1700..171F; Tagalog
3254             0x1720,   // 1720..173F; Hanunoo
3255             0x1740,   // 1740..175F; Buhid
3256             0x1760,   // 1760..177F; Tagbanwa
3257             0x1780,   // 1780..17FF; Khmer
3258             0x1800,   // 1800..18AF; Mongolian
3259             0x18B0,   // 18B0..18FF; Unified Canadian Aboriginal Syllabics Extended
3260             0x1900,   // 1900..194F; Limbu
3261             0x1950,   // 1950..197F; Tai Le
3262             0x1980,   // 1980..19DF; New Tai Lue
3263             0x19E0,   // 19E0..19FF; Khmer Symbols
3264             0x1A00,   // 1A00..1A1F; Buginese
3265             0x1A20,   // 1A20..1AAF; Tai Tham
3266             0x1AB0,   // 1AB0..1AFF; Combining Diacritical Marks Extended
3267             0x1B00,   // 1B00..1B7F; Balinese
3268             0x1B80,   // 1B80..1BBF; Sundanese
3269             0x1BC0,   // 1BC0..1BFF; Batak
3270             0x1C00,   // 1C00..1C4F; Lepcha
3271             0x1C50,   // 1C50..1C7F; Ol Chiki
3272             0x1C80,   // 1C80..1C8F; Cyrillic Extended-C
3273             0x1C90,   // 1C90..1CBF; Georgian Extended
3274             0x1CC0,   // 1CC0..1CCF; Sundanese Supplement
3275             0x1CD0,   // 1CD0..1CFF; Vedic Extensions
3276             0x1D00,   // 1D00..1D7F; Phonetic Extensions
3277             0x1D80,   // 1D80..1DBF; Phonetic Extensions Supplement
3278             0x1DC0,   // 1DC0..1DFF; Combining Diacritical Marks Supplement
3279             0x1E00,   // 1E00..1EFF; Latin Extended Additional
3280             0x1F00,   // 1F00..1FFF; Greek Extended
3281             0x2000,   // 2000..206F; General Punctuation
3282             0x2070,   // 2070..209F; Superscripts and Subscripts
3283             0x20A0,   // 20A0..20CF; Currency Symbols
3284             0x20D0,   // 20D0..20FF; Combining Diacritical Marks for Symbols
3285             0x2100,   // 2100..214F; Letterlike Symbols
3286             0x2150,   // 2150..218F; Number Forms
3287             0x2190,   // 2190..21FF; Arrows
3288             0x2200,   // 2200..22FF; Mathematical Operators
3289             0x2300,   // 2300..23FF; Miscellaneous Technical
3290             0x2400,   // 2400..243F; Control Pictures
3291             0x2440,   // 2440..245F; Optical Character Recognition
3292             0x2460,   // 2460..24FF; Enclosed Alphanumerics
3293             0x2500,   // 2500..257F; Box Drawing
3294             0x2580,   // 2580..259F; Block Elements
3295             0x25A0,   // 25A0..25FF; Geometric Shapes
3296             0x2600,   // 2600..26FF; Miscellaneous Symbols
3297             0x2700,   // 2700..27BF; Dingbats
3298             0x27C0,   // 27C0..27EF; Miscellaneous Mathematical Symbols-A
3299             0x27F0,   // 27F0..27FF; Supplemental Arrows-A
3300             0x2800,   // 2800..28FF; Braille Patterns
3301             0x2900,   // 2900..297F; Supplemental Arrows-B
3302             0x2980,   // 2980..29FF; Miscellaneous Mathematical Symbols-B
3303             0x2A00,   // 2A00..2AFF; Supplemental Mathematical Operators
3304             0x2B00,   // 2B00..2BFF; Miscellaneous Symbols and Arrows
3305             0x2C00,   // 2C00..2C5F; Glagolitic
3306             0x2C60,   // 2C60..2C7F; Latin Extended-C
3307             0x2C80,   // 2C80..2CFF; Coptic
3308             0x2D00,   // 2D00..2D2F; Georgian Supplement
3309             0x2D30,   // 2D30..2D7F; Tifinagh
3310             0x2D80,   // 2D80..2DDF; Ethiopic Extended
3311             0x2DE0,   // 2DE0..2DFF; Cyrillic Extended-A
3312             0x2E00,   // 2E00..2E7F; Supplemental Punctuation
3313             0x2E80,   // 2E80..2EFF; CJK Radicals Supplement
3314             0x2F00,   // 2F00..2FDF; Kangxi Radicals
3315             0x2FE0,   //             unassigned
3316             0x2FF0,   // 2FF0..2FFF; Ideographic Description Characters
3317             0x3000,   // 3000..303F; CJK Symbols and Punctuation
3318             0x3040,   // 3040..309F; Hiragana
3319             0x30A0,   // 30A0..30FF; Katakana
3320             0x3100,   // 3100..312F; Bopomofo
3321             0x3130,   // 3130..318F; Hangul Compatibility Jamo
3322             0x3190,   // 3190..319F; Kanbun
3323             0x31A0,   // 31A0..31BF; Bopomofo Extended
3324             0x31C0,   // 31C0..31EF; CJK Strokes
3325             0x31F0,   // 31F0..31FF; Katakana Phonetic Extensions
3326             0x3200,   // 3200..32FF; Enclosed CJK Letters and Months
3327             0x3300,   // 3300..33FF; CJK Compatibility
3328             0x3400,   // 3400..4DBF; CJK Unified Ideographs Extension A
3329             0x4DC0,   // 4DC0..4DFF; Yijing Hexagram Symbols
3330             0x4E00,   // 4E00..9FFF; CJK Unified Ideographs
3331             0xA000,   // A000..A48F; Yi Syllables
3332             0xA490,   // A490..A4CF; Yi Radicals
3333             0xA4D0,   // A4D0..A4FF; Lisu
3334             0xA500,   // A500..A63F; Vai
3335             0xA640,   // A640..A69F; Cyrillic Extended-B
3336             0xA6A0,   // A6A0..A6FF; Bamum
3337             0xA700,   // A700..A71F; Modifier Tone Letters
3338             0xA720,   // A720..A7FF; Latin Extended-D
3339             0xA800,   // A800..A82F; Syloti Nagri
3340             0xA830,   // A830..A83F; Common Indic Number Forms
3341             0xA840,   // A840..A87F; Phags-pa
3342             0xA880,   // A880..A8DF; Saurashtra
3343             0xA8E0,   // A8E0..A8FF; Devanagari Extended
3344             0xA900,   // A900..A92F; Kayah Li
3345             0xA930,   // A930..A95F; Rejang
3346             0xA960,   // A960..A97F; Hangul Jamo Extended-A
3347             0xA980,   // A980..A9DF; Javanese
3348             0xA9E0,   // A9E0..A9FF; Myanmar Extended-B
3349             0xAA00,   // AA00..AA5F; Cham
3350             0xAA60,   // AA60..AA7F; Myanmar Extended-A
3351             0xAA80,   // AA80..AADF; Tai Viet
3352             0xAAE0,   // AAE0..AAFF; Meetei Mayek Extensions
3353             0xAB00,   // AB00..AB2F; Ethiopic Extended-A
3354             0xAB30,   // AB30..AB6F; Latin Extended-E
3355             0xAB70,   // AB70..ABBF; Cherokee Supplement
3356             0xABC0,   // ABC0..ABFF; Meetei Mayek
3357             0xAC00,   // AC00..D7AF; Hangul Syllables
3358             0xD7B0,   // D7B0..D7FF; Hangul Jamo Extended-B
3359             0xD800,   // D800..DB7F; High Surrogates
3360             0xDB80,   // DB80..DBFF; High Private Use Surrogates
3361             0xDC00,   // DC00..DFFF; Low Surrogates
3362             0xE000,   // E000..F8FF; Private Use Area
3363             0xF900,   // F900..FAFF; CJK Compatibility Ideographs
3364             0xFB00,   // FB00..FB4F; Alphabetic Presentation Forms
3365             0xFB50,   // FB50..FDFF; Arabic Presentation Forms-A
3366             0xFE00,   // FE00..FE0F; Variation Selectors
3367             0xFE10,   // FE10..FE1F; Vertical Forms
3368             0xFE20,   // FE20..FE2F; Combining Half Marks
3369             0xFE30,   // FE30..FE4F; CJK Compatibility Forms
3370             0xFE50,   // FE50..FE6F; Small Form Variants
3371             0xFE70,   // FE70..FEFF; Arabic Presentation Forms-B
3372             0xFF00,   // FF00..FFEF; Halfwidth and Fullwidth Forms
3373             0xFFF0,   // FFF0..FFFF; Specials
3374             0x10000,  // 10000..1007F; Linear B Syllabary
3375             0x10080,  // 10080..100FF; Linear B Ideograms
3376             0x10100,  // 10100..1013F; Aegean Numbers
3377             0x10140,  // 10140..1018F; Ancient Greek Numbers
3378             0x10190,  // 10190..101CF; Ancient Symbols
3379             0x101D0,  // 101D0..101FF; Phaistos Disc
3380             0x10200,  //               unassigned
3381             0x10280,  // 10280..1029F; Lycian
3382             0x102A0,  // 102A0..102DF; Carian
3383             0x102E0,  // 102E0..102FF; Coptic Epact Numbers
3384             0x10300,  // 10300..1032F; Old Italic
3385             0x10330,  // 10330..1034F; Gothic
3386             0x10350,  // 10350..1037F; Old Permic
3387             0x10380,  // 10380..1039F; Ugaritic
3388             0x103A0,  // 103A0..103DF; Old Persian
3389             0x103E0,  //               unassigned
3390             0x10400,  // 10400..1044F; Deseret
3391             0x10450,  // 10450..1047F; Shavian
3392             0x10480,  // 10480..104AF; Osmanya
3393             0x104B0,  // 104B0..104FF; Osage
3394             0x10500,  // 10500..1052F; Elbasan
3395             0x10530,  // 10530..1056F; Caucasian Albanian
3396             0x10570,  //               unassigned
3397             0x10600,  // 10600..1077F; Linear A
3398             0x10780,  //               unassigned
3399             0x10800,  // 10800..1083F; Cypriot Syllabary
3400             0x10840,  // 10840..1085F; Imperial Aramaic
3401             0x10860,  // 10860..1087F; Palmyrene
3402             0x10880,  // 10880..108AF; Nabataean
3403             0x108B0,  //               unassigned
3404             0x108E0,  // 108E0..108FF; Hatran
3405             0x10900,  // 10900..1091F; Phoenician
3406             0x10920,  // 10920..1093F; Lydian
3407             0x10940,  //               unassigned
3408             0x10980,  // 10980..1099F; Meroitic Hieroglyphs
3409             0x109A0,  // 109A0..109FF; Meroitic Cursive
3410             0x10A00,  // 10A00..10A5F; Kharoshthi
3411             0x10A60,  // 10A60..10A7F; Old South Arabian
3412             0x10A80,  // 10A80..10A9F; Old North Arabian
3413             0x10AA0,  //               unassigned
3414             0x10AC0,  // 10AC0..10AFF; Manichaean
3415             0x10B00,  // 10B00..10B3F; Avestan
3416             0x10B40,  // 10B40..10B5F; Inscriptional Parthian
3417             0x10B60,  // 10B60..10B7F; Inscriptional Pahlavi
3418             0x10B80,  // 10B80..10BAF; Psalter Pahlavi
3419             0x10BB0,  //               unassigned
3420             0x10C00,  // 10C00..10C4F; Old Turkic
3421             0x10C50,  //               unassigned
3422             0x10C80,  // 10C80..10CFF; Old Hungarian
3423             0x10D00,  // 10D00..10D3F; Hanifi Rohingya
3424             0x10D40,  //               unassigned
3425             0x10E60,  // 10E60..10E7F; Rumi Numeral Symbols
3426             0x10E80,  //               unassigned
3427             0x10F00,  // 10F00..10F2F; Old Sogdian
3428             0x10F30,  // 10F30..10F6F; Sogdian
3429             0x10F70,  //               unassigned
3430             0x11000,  // 11000..1107F; Brahmi
3431             0x11080,  // 11080..110CF; Kaithi
3432             0x110D0,  // 110D0..110FF; Sora Sompeng
3433             0x11100,  // 11100..1114F; Chakma
3434             0x11150,  // 11150..1117F; Mahajani
3435             0x11180,  // 11180..111DF; Sharada
3436             0x111E0,  // 111E0..111FF; Sinhala Archaic Numbers
3437             0x11200,  // 11200..1124F; Khojki
3438             0x11250,  //               unassigned
3439             0x11280,  // 11280..112AF; Multani
3440             0x112B0,  // 112B0..112FF; Khudawadi
3441             0x11300,  // 11300..1137F; Grantha
3442             0x11380,  //               unassigned
3443             0x11400,  // 11400..1147F; Newa
3444             0x11480,  // 11480..114DF; Tirhuta
3445             0x114E0,  //               unassigned
3446             0x11580,  // 11580..115FF; Siddham
3447             0x11600,  // 11600..1165F; Modi
3448             0x11660, //  11660..1167F; Mongolian Supplement
3449             0x11680,  // 11680..116CF; Takri
3450             0x116D0,  //               unassigned
3451             0x11700,  // 11700..1173F; Ahom
3452             0x11740,  //               unassigned
3453             0x11800,  // 11800..1184F; Dogra
3454             0x11850,  //               unassigned
3455             0x118A0,  // 118A0..118FF; Warang Citi
3456             0x11900,  //               unassigned
3457             0x11A00,  // 11A00..11A4F; Zanabazar Square
3458             0x11A50,  // 11A50..11AAF; Soyombo
3459             0x11AB0,  //               unassigned
3460             0x11AC0,  // 11AC0..11AFF; Pau Cin Hau
3461             0x11B00,  //               unassigned
3462             0x11C00,  // 11C00..11C6F; Bhaiksuki
3463             0x11C70,  // 11C70..11CBF; Marchen
3464             0x11CC0,  //               unassigned
3465             0x11D00,  // 11D00..11D5F; Masaram Gondi
3466             0x11D60,  // 11D60..11DAF; Gunjala Gondi
3467             0x11DB0,  //               unassigned
3468             0x11EE0,  // 11EE0..11EFF; Makasar
3469             0x11F00,  //               unassigned
3470             0x12000,  // 12000..123FF; Cuneiform
3471             0x12400,  // 12400..1247F; Cuneiform Numbers and Punctuation
3472             0x12480,  // 12480..1254F; Early Dynastic Cuneiform
3473             0x12550,  //               unassigned
3474             0x13000,  // 13000..1342F; Egyptian Hieroglyphs
3475             0x13430,  //               unassigned
3476             0x14400,  // 14400..1467F; Anatolian Hieroglyphs
3477             0x14680,  //               unassigned
3478             0x16800,  // 16800..16A3F; Bamum Supplement
3479             0x16A40,  // 16A40..16A6F; Mro
3480             0x16A70,  //               unassigned
3481             0x16AD0,  // 16AD0..16AFF; Bassa Vah
3482             0x16B00,  // 16B00..16B8F; Pahawh Hmong
3483             0x16B90,  //               unassigned
3484             0x16E40,  // 16E40..16E9F; Medefaidrin
3485             0x16EA0,  //               unassigned
3486             0x16F00,  // 16F00..16F9F; Miao
3487             0x16FA0,  //               unassigned
3488             0x16FE0,  // 16FE0..16FFF; Ideographic Symbols and Punctuation
3489             0x17000,  // 17000..187FF; Tangut
3490             0x18800,  // 18800..18AFF; Tangut Components
3491             0x18B00,  //               unassigned
3492             0x1B000,  // 1B000..1B0FF; Kana Supplement
3493             0x1B100,  // 1B100..1B12F; Kana Extended-A
3494             0x1B130,  //               unassigned
3495             0x1B170,  // 1B170..1B2FF; Nushu
3496             0x1B300,  //               unassigned
3497             0x1BC00,  // 1BC00..1BC9F; Duployan
3498             0x1BCA0,  // 1BCA0..1BCAF; Shorthand Format Controls
3499             0x1BCB0,  //               unassigned
3500             0x1D000,  // 1D000..1D0FF; Byzantine Musical Symbols
3501             0x1D100,  // 1D100..1D1FF; Musical Symbols
3502             0x1D200,  // 1D200..1D24F; Ancient Greek Musical Notation
3503             0x1D250,  //               unassigned
3504             0x1D2E0,  // 1D2E0..1D2FF; Mayan Numerals
3505             0x1D300,  // 1D300..1D35F; Tai Xuan Jing Symbols
3506             0x1D360,  // 1D360..1D37F; Counting Rod Numerals
3507             0x1D380,  //               unassigned
3508             0x1D400,  // 1D400..1D7FF; Mathematical Alphanumeric Symbols
3509             0x1D800,  // 1D800..1DAAF; Sutton SignWriting
3510             0x1DAB0,  //               unassigned
3511             0x1E000,  // 1E000..1E02F; Glagolitic Supplement
3512             0x1E030,  //               unassigned
3513             0x1E800,  // 1E800..1E8DF; Mende Kikakui
3514             0x1E8E0,  //               unassigned
3515             0x1E900,  // 1E900..1E95F; Adlam
3516             0x1E960,  //               unassigned
3517             0x1EC70,  // 1EC70..1ECBF; Indic Siyaq Numbers
3518             0x1ECC0,  //               unassigned
3519             0x1EE00,  // 1EE00..1EEFF; Arabic Mathematical Alphabetic Symbols
3520             0x1EF00,  //               unassigned
3521             0x1F000,  // 1F000..1F02F; Mahjong Tiles
3522             0x1F030,  // 1F030..1F09F; Domino Tiles
3523             0x1F0A0,  // 1F0A0..1F0FF; Playing Cards
3524             0x1F100,  // 1F100..1F1FF; Enclosed Alphanumeric Supplement
3525             0x1F200,  // 1F200..1F2FF; Enclosed Ideographic Supplement
3526             0x1F300,  // 1F300..1F5FF; Miscellaneous Symbols and Pictographs
3527             0x1F600,  // 1F600..1F64F; Emoticons
3528             0x1F650,  // 1F650..1F67F; Ornamental Dingbats
3529             0x1F680,  // 1F680..1F6FF; Transport and Map Symbols
3530             0x1F700,  // 1F700..1F77F; Alchemical Symbols
3531             0x1F780,  // 1F780..1F7FF; Geometric Shapes Extended
3532             0x1F800,  // 1F800..1F8FF; Supplemental Arrows-C
3533             0x1F900,  // 1F900..1F9FF; Supplemental Symbols and Pictographs
3534             0x1FA00,  // 1FA00..1FA6F; Chess Symbols
3535             0x1FA70,  //               unassigned
3536             0x20000,  // 20000..2A6DF; CJK Unified Ideographs Extension B
3537             0x2A6E0,  //               unassigned
3538             0x2A700,  // 2A700..2B73F; CJK Unified Ideographs Extension C
3539             0x2B740,  // 2B740..2B81F; CJK Unified Ideographs Extension D
3540             0x2B820,  // 2B820..2CEAF; CJK Unified Ideographs Extension E
3541             0x2CEB0,  // 2CEB0..2EBEF; CJK Unified Ideographs Extension F
3542             0x2EBF0,  //               unassigned
3543             0x2F800,  // 2F800..2FA1F; CJK Compatibility Ideographs Supplement
3544             0x2FA20,  //               unassigned
3545             0xE0000,  // E0000..E007F; Tags
3546             0xE0080,  //               unassigned
3547             0xE0100,  // E0100..E01EF; Variation Selectors Supplement
3548             0xE01F0,  //               unassigned
3549             0xF0000,  // F0000..FFFFF; Supplementary Private Use Area-A
3550             0x100000  // 100000..10FFFF; Supplementary Private Use Area-B
3551         };
3552 
3553         private static final UnicodeBlock[] blocks = {
3554             BASIC_LATIN,
3555             LATIN_1_SUPPLEMENT,
3556             LATIN_EXTENDED_A,
3557             LATIN_EXTENDED_B,
3558             IPA_EXTENSIONS,
3559             SPACING_MODIFIER_LETTERS,
3560             COMBINING_DIACRITICAL_MARKS,
3561             GREEK,
3562             CYRILLIC,
3563             CYRILLIC_SUPPLEMENTARY,
3564             ARMENIAN,
3565             HEBREW,
3566             ARABIC,
3567             SYRIAC,
3568             ARABIC_SUPPLEMENT,
3569             THAANA,
3570             NKO,
3571             SAMARITAN,
3572             MANDAIC,
3573             SYRIAC_SUPPLEMENT,
3574             null,
3575             ARABIC_EXTENDED_A,
3576             DEVANAGARI,
3577             BENGALI,
3578             GURMUKHI,
3579             GUJARATI,
3580             ORIYA,
3581             TAMIL,
3582             TELUGU,
3583             KANNADA,
3584             MALAYALAM,
3585             SINHALA,
3586             THAI,
3587             LAO,
3588             TIBETAN,
3589             MYANMAR,
3590             GEORGIAN,
3591             HANGUL_JAMO,
3592             ETHIOPIC,
3593             ETHIOPIC_SUPPLEMENT,
3594             CHEROKEE,
3595             UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS,
3596             OGHAM,
3597             RUNIC,
3598             TAGALOG,
3599             HANUNOO,
3600             BUHID,
3601             TAGBANWA,
3602             KHMER,
3603             MONGOLIAN,
3604             UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED,
3605             LIMBU,
3606             TAI_LE,
3607             NEW_TAI_LUE,
3608             KHMER_SYMBOLS,
3609             BUGINESE,
3610             TAI_THAM,
3611             COMBINING_DIACRITICAL_MARKS_EXTENDED,
3612             BALINESE,
3613             SUNDANESE,
3614             BATAK,
3615             LEPCHA,
3616             OL_CHIKI,
3617             CYRILLIC_EXTENDED_C,
3618             GEORGIAN_EXTENDED,
3619             SUNDANESE_SUPPLEMENT,
3620             VEDIC_EXTENSIONS,
3621             PHONETIC_EXTENSIONS,
3622             PHONETIC_EXTENSIONS_SUPPLEMENT,
3623             COMBINING_DIACRITICAL_MARKS_SUPPLEMENT,
3624             LATIN_EXTENDED_ADDITIONAL,
3625             GREEK_EXTENDED,
3626             GENERAL_PUNCTUATION,
3627             SUPERSCRIPTS_AND_SUBSCRIPTS,
3628             CURRENCY_SYMBOLS,
3629             COMBINING_MARKS_FOR_SYMBOLS,
3630             LETTERLIKE_SYMBOLS,
3631             NUMBER_FORMS,
3632             ARROWS,
3633             MATHEMATICAL_OPERATORS,
3634             MISCELLANEOUS_TECHNICAL,
3635             CONTROL_PICTURES,
3636             OPTICAL_CHARACTER_RECOGNITION,
3637             ENCLOSED_ALPHANUMERICS,
3638             BOX_DRAWING,
3639             BLOCK_ELEMENTS,
3640             GEOMETRIC_SHAPES,
3641             MISCELLANEOUS_SYMBOLS,
3642             DINGBATS,
3643             MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A,
3644             SUPPLEMENTAL_ARROWS_A,
3645             BRAILLE_PATTERNS,
3646             SUPPLEMENTAL_ARROWS_B,
3647             MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B,
3648             SUPPLEMENTAL_MATHEMATICAL_OPERATORS,
3649             MISCELLANEOUS_SYMBOLS_AND_ARROWS,
3650             GLAGOLITIC,
3651             LATIN_EXTENDED_C,
3652             COPTIC,
3653             GEORGIAN_SUPPLEMENT,
3654             TIFINAGH,
3655             ETHIOPIC_EXTENDED,
3656             CYRILLIC_EXTENDED_A,
3657             SUPPLEMENTAL_PUNCTUATION,
3658             CJK_RADICALS_SUPPLEMENT,
3659             KANGXI_RADICALS,
3660             null,
3661             IDEOGRAPHIC_DESCRIPTION_CHARACTERS,
3662             CJK_SYMBOLS_AND_PUNCTUATION,
3663             HIRAGANA,
3664             KATAKANA,
3665             BOPOMOFO,
3666             HANGUL_COMPATIBILITY_JAMO,
3667             KANBUN,
3668             BOPOMOFO_EXTENDED,
3669             CJK_STROKES,
3670             KATAKANA_PHONETIC_EXTENSIONS,
3671             ENCLOSED_CJK_LETTERS_AND_MONTHS,
3672             CJK_COMPATIBILITY,
3673             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A,
3674             YIJING_HEXAGRAM_SYMBOLS,
3675             CJK_UNIFIED_IDEOGRAPHS,
3676             YI_SYLLABLES,
3677             YI_RADICALS,
3678             LISU,
3679             VAI,
3680             CYRILLIC_EXTENDED_B,
3681             BAMUM,
3682             MODIFIER_TONE_LETTERS,
3683             LATIN_EXTENDED_D,
3684             SYLOTI_NAGRI,
3685             COMMON_INDIC_NUMBER_FORMS,
3686             PHAGS_PA,
3687             SAURASHTRA,
3688             DEVANAGARI_EXTENDED,
3689             KAYAH_LI,
3690             REJANG,
3691             HANGUL_JAMO_EXTENDED_A,
3692             JAVANESE,
3693             MYANMAR_EXTENDED_B,
3694             CHAM,
3695             MYANMAR_EXTENDED_A,
3696             TAI_VIET,
3697             MEETEI_MAYEK_EXTENSIONS,
3698             ETHIOPIC_EXTENDED_A,
3699             LATIN_EXTENDED_E,
3700             CHEROKEE_SUPPLEMENT,
3701             MEETEI_MAYEK,
3702             HANGUL_SYLLABLES,
3703             HANGUL_JAMO_EXTENDED_B,
3704             HIGH_SURROGATES,
3705             HIGH_PRIVATE_USE_SURROGATES,
3706             LOW_SURROGATES,
3707             PRIVATE_USE_AREA,
3708             CJK_COMPATIBILITY_IDEOGRAPHS,
3709             ALPHABETIC_PRESENTATION_FORMS,
3710             ARABIC_PRESENTATION_FORMS_A,
3711             VARIATION_SELECTORS,
3712             VERTICAL_FORMS,
3713             COMBINING_HALF_MARKS,
3714             CJK_COMPATIBILITY_FORMS,
3715             SMALL_FORM_VARIANTS,
3716             ARABIC_PRESENTATION_FORMS_B,
3717             HALFWIDTH_AND_FULLWIDTH_FORMS,
3718             SPECIALS,
3719             LINEAR_B_SYLLABARY,
3720             LINEAR_B_IDEOGRAMS,
3721             AEGEAN_NUMBERS,
3722             ANCIENT_GREEK_NUMBERS,
3723             ANCIENT_SYMBOLS,
3724             PHAISTOS_DISC,
3725             null,
3726             LYCIAN,
3727             CARIAN,
3728             COPTIC_EPACT_NUMBERS,
3729             OLD_ITALIC,
3730             GOTHIC,
3731             OLD_PERMIC,
3732             UGARITIC,
3733             OLD_PERSIAN,
3734             null,
3735             DESERET,
3736             SHAVIAN,
3737             OSMANYA,
3738             OSAGE,
3739             ELBASAN,
3740             CAUCASIAN_ALBANIAN,
3741             null,
3742             LINEAR_A,
3743             null,
3744             CYPRIOT_SYLLABARY,
3745             IMPERIAL_ARAMAIC,
3746             PALMYRENE,
3747             NABATAEAN,
3748             null,
3749             HATRAN,
3750             PHOENICIAN,
3751             LYDIAN,
3752             null,
3753             MEROITIC_HIEROGLYPHS,
3754             MEROITIC_CURSIVE,
3755             KHAROSHTHI,
3756             OLD_SOUTH_ARABIAN,
3757             OLD_NORTH_ARABIAN,
3758             null,
3759             MANICHAEAN,
3760             AVESTAN,
3761             INSCRIPTIONAL_PARTHIAN,
3762             INSCRIPTIONAL_PAHLAVI,
3763             PSALTER_PAHLAVI,
3764             null,
3765             OLD_TURKIC,
3766             null,
3767             OLD_HUNGARIAN,
3768             HANIFI_ROHINGYA,
3769             null,
3770             RUMI_NUMERAL_SYMBOLS,
3771             null,
3772             OLD_SOGDIAN,
3773             SOGDIAN,
3774             null,
3775             BRAHMI,
3776             KAITHI,
3777             SORA_SOMPENG,
3778             CHAKMA,
3779             MAHAJANI,
3780             SHARADA,
3781             SINHALA_ARCHAIC_NUMBERS,
3782             KHOJKI,
3783             null,
3784             MULTANI,
3785             KHUDAWADI,
3786             GRANTHA,
3787             null,
3788             NEWA,
3789             TIRHUTA,
3790             null,
3791             SIDDHAM,
3792             MODI,
3793             MONGOLIAN_SUPPLEMENT,
3794             TAKRI,
3795             null,
3796             AHOM,
3797             null,
3798             DOGRA,
3799             null,
3800             WARANG_CITI,
3801             null,
3802             ZANABAZAR_SQUARE,
3803             SOYOMBO,
3804             null,
3805             PAU_CIN_HAU,
3806             null,
3807             BHAIKSUKI,
3808             MARCHEN,
3809             null,
3810             MASARAM_GONDI,
3811             GUNJALA_GONDI,
3812             null,
3813             MAKASAR,
3814             null,
3815             CUNEIFORM,
3816             CUNEIFORM_NUMBERS_AND_PUNCTUATION,
3817             EARLY_DYNASTIC_CUNEIFORM,
3818             null,
3819             EGYPTIAN_HIEROGLYPHS,
3820             null,
3821             ANATOLIAN_HIEROGLYPHS,
3822             null,
3823             BAMUM_SUPPLEMENT,
3824             MRO,
3825             null,
3826             BASSA_VAH,
3827             PAHAWH_HMONG,
3828             null,
3829             MEDEFAIDRIN,
3830             null,
3831             MIAO,
3832             null,
3833             IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION,
3834             TANGUT,
3835             TANGUT_COMPONENTS,
3836             null,
3837             KANA_SUPPLEMENT,
3838             KANA_EXTENDED_A,
3839             null,
3840             NUSHU,
3841             null,
3842             DUPLOYAN,
3843             SHORTHAND_FORMAT_CONTROLS,
3844             null,
3845             BYZANTINE_MUSICAL_SYMBOLS,
3846             MUSICAL_SYMBOLS,
3847             ANCIENT_GREEK_MUSICAL_NOTATION,
3848             null,
3849             MAYAN_NUMERALS,
3850             TAI_XUAN_JING_SYMBOLS,
3851             COUNTING_ROD_NUMERALS,
3852             null,
3853             MATHEMATICAL_ALPHANUMERIC_SYMBOLS,
3854             SUTTON_SIGNWRITING,
3855             null,
3856             GLAGOLITIC_SUPPLEMENT,
3857             null,
3858             MENDE_KIKAKUI,
3859             null,
3860             ADLAM,
3861             null,
3862             INDIC_SIYAQ_NUMBERS,
3863             null,
3864             ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS,
3865             null,
3866             MAHJONG_TILES,
3867             DOMINO_TILES,
3868             PLAYING_CARDS,
3869             ENCLOSED_ALPHANUMERIC_SUPPLEMENT,
3870             ENCLOSED_IDEOGRAPHIC_SUPPLEMENT,
3871             MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS,
3872             EMOTICONS,
3873             ORNAMENTAL_DINGBATS,
3874             TRANSPORT_AND_MAP_SYMBOLS,
3875             ALCHEMICAL_SYMBOLS,
3876             GEOMETRIC_SHAPES_EXTENDED,
3877             SUPPLEMENTAL_ARROWS_C,
3878             SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS,
3879             CHESS_SYMBOLS,
3880             null,
3881             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B,
3882             null,
3883             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C,
3884             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D,
3885             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E,
3886             CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F,
3887             null,
3888             CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT,
3889             null,
3890             TAGS,
3891             null,
3892             VARIATION_SELECTORS_SUPPLEMENT,
3893             null,
3894             SUPPLEMENTARY_PRIVATE_USE_AREA_A,
3895             SUPPLEMENTARY_PRIVATE_USE_AREA_B
3896         };
3897 
3898 
3899         /**
3900          * Returns the object representing the Unicode block containing the
3901          * given character, or {@code null} if the character is not a
3902          * member of a defined block.
3903          *
3904          * <p><b>Note:</b> This method cannot handle
3905          * <a href="Character.html#supplementary"> supplementary
3906          * characters</a>.  To support all Unicode characters, including
3907          * supplementary characters, use the {@link #of(int)} method.
3908          *
3909          * @param   c  The character in question
3910          * @return  The {@code UnicodeBlock} instance representing the
3911          *          Unicode block of which this character is a member, or
3912          *          {@code null} if the character is not a member of any
3913          *          Unicode block
3914          */
3915         public static UnicodeBlock of(char c) {
3916             return of((int)c);
3917         }
3918 
3919         /**
3920          * Returns the object representing the Unicode block
3921          * containing the given character (Unicode code point), or
3922          * {@code null} if the character is not a member of a
3923          * defined block.
3924          *
3925          * @param   codePoint the character (Unicode code point) in question.
3926          * @return  The {@code UnicodeBlock} instance representing the
3927          *          Unicode block of which this character is a member, or
3928          *          {@code null} if the character is not a member of any
3929          *          Unicode block
3930          * @throws  IllegalArgumentException if the specified
3931          * {@code codePoint} is an invalid Unicode code point.
3932          * @see Character#isValidCodePoint(int)
3933          * @since   1.5
3934          */
3935         public static UnicodeBlock of(int codePoint) {
3936             if (!isValidCodePoint(codePoint)) {
3937                 throw new IllegalArgumentException(
3938                     String.format("Not a valid Unicode code point: 0x%X", codePoint));
3939             }
3940 
3941             int top, bottom, current;
3942             bottom = 0;
3943             top = blockStarts.length;
3944             current = top/2;
3945 
3946             // invariant: top > current >= bottom && codePoint >= unicodeBlockStarts[bottom]
3947             while (top - bottom > 1) {
3948                 if (codePoint >= blockStarts[current]) {
3949                     bottom = current;
3950                 } else {
3951                     top = current;
3952                 }
3953                 current = (top + bottom) / 2;
3954             }
3955             return blocks[current];
3956         }
3957 
3958         /**
3959          * Returns the UnicodeBlock with the given name. Block
3960          * names are determined by The Unicode Standard. The file
3961          * {@code Blocks-<version>.txt} defines blocks for a particular
3962          * version of the standard. The {@link Character} class specifies
3963          * the version of the standard that it supports.
3964          * <p>
3965          * This method accepts block names in the following forms:
3966          * <ol>
3967          * <li> Canonical block names as defined by the Unicode Standard.
3968          * For example, the standard defines a "Basic Latin" block. Therefore, this
3969          * method accepts "Basic Latin" as a valid block name. The documentation of
3970          * each UnicodeBlock provides the canonical name.
3971          * <li>Canonical block names with all spaces removed. For example, "BasicLatin"
3972          * is a valid block name for the "Basic Latin" block.
3973          * <li>The text representation of each constant UnicodeBlock identifier.
3974          * For example, this method will return the {@link #BASIC_LATIN} block if
3975          * provided with the "BASIC_LATIN" name. This form replaces all spaces and
3976          * hyphens in the canonical name with underscores.
3977          * </ol>
3978          * Finally, character case is ignored for all of the valid block name forms.
3979          * For example, "BASIC_LATIN" and "basic_latin" are both valid block names.
3980          * The en_US locale's case mapping rules are used to provide case-insensitive
3981          * string comparisons for block name validation.
3982          * <p>
3983          * If the Unicode Standard changes block names, both the previous and
3984          * current names will be accepted.
3985          *
3986          * @param blockName A {@code UnicodeBlock} name.
3987          * @return The {@code UnicodeBlock} instance identified
3988          *         by {@code blockName}
3989          * @throws IllegalArgumentException if {@code blockName} is an
3990          *         invalid name
3991          * @throws NullPointerException if {@code blockName} is null
3992          * @since 1.5
3993          */
3994         public static final UnicodeBlock forName(String blockName) {
3995             UnicodeBlock block = map.get(blockName.toUpperCase(Locale.US));
3996             if (block == null) {
3997                 throw new IllegalArgumentException("Not a valid block name: "
3998                             + blockName);
3999             }
4000             return block;
4001         }
4002     }
4003 
4004 
4005     /**
4006      * A family of character subsets representing the character scripts
4007      * defined in the <a href="http://www.unicode.org/reports/tr24/">
4008      * <i>Unicode Standard Annex #24: Script Names</i></a>. Every Unicode
4009      * character is assigned to a single Unicode script, either a specific
4010      * script, such as {@link Character.UnicodeScript#LATIN Latin}, or
4011      * one of the following three special values,
4012      * {@link Character.UnicodeScript#INHERITED Inherited},
4013      * {@link Character.UnicodeScript#COMMON Common} or
4014      * {@link Character.UnicodeScript#UNKNOWN Unknown}.
4015      *
4016      * @since 1.7
4017      */
4018     public static enum UnicodeScript {
4019         /**
4020          * Unicode script "Common".
4021          */
4022         COMMON,
4023 
4024         /**
4025          * Unicode script "Latin".
4026          */
4027         LATIN,
4028 
4029         /**
4030          * Unicode script "Greek".
4031          */
4032         GREEK,
4033 
4034         /**
4035          * Unicode script "Cyrillic".
4036          */
4037         CYRILLIC,
4038 
4039         /**
4040          * Unicode script "Armenian".
4041          */
4042         ARMENIAN,
4043 
4044         /**
4045          * Unicode script "Hebrew".
4046          */
4047         HEBREW,
4048 
4049         /**
4050          * Unicode script "Arabic".
4051          */
4052         ARABIC,
4053 
4054         /**
4055          * Unicode script "Syriac".
4056          */
4057         SYRIAC,
4058 
4059         /**
4060          * Unicode script "Thaana".
4061          */
4062         THAANA,
4063 
4064         /**
4065          * Unicode script "Devanagari".
4066          */
4067         DEVANAGARI,
4068 
4069         /**
4070          * Unicode script "Bengali".
4071          */
4072         BENGALI,
4073 
4074         /**
4075          * Unicode script "Gurmukhi".
4076          */
4077         GURMUKHI,
4078 
4079         /**
4080          * Unicode script "Gujarati".
4081          */
4082         GUJARATI,
4083 
4084         /**
4085          * Unicode script "Oriya".
4086          */
4087         ORIYA,
4088 
4089         /**
4090          * Unicode script "Tamil".
4091          */
4092         TAMIL,
4093 
4094         /**
4095          * Unicode script "Telugu".
4096          */
4097         TELUGU,
4098 
4099         /**
4100          * Unicode script "Kannada".
4101          */
4102         KANNADA,
4103 
4104         /**
4105          * Unicode script "Malayalam".
4106          */
4107         MALAYALAM,
4108 
4109         /**
4110          * Unicode script "Sinhala".
4111          */
4112         SINHALA,
4113 
4114         /**
4115          * Unicode script "Thai".
4116          */
4117         THAI,
4118 
4119         /**
4120          * Unicode script "Lao".
4121          */
4122         LAO,
4123 
4124         /**
4125          * Unicode script "Tibetan".
4126          */
4127         TIBETAN,
4128 
4129         /**
4130          * Unicode script "Myanmar".
4131          */
4132         MYANMAR,
4133 
4134         /**
4135          * Unicode script "Georgian".
4136          */
4137         GEORGIAN,
4138 
4139         /**
4140          * Unicode script "Hangul".
4141          */
4142         HANGUL,
4143 
4144         /**
4145          * Unicode script "Ethiopic".
4146          */
4147         ETHIOPIC,
4148 
4149         /**
4150          * Unicode script "Cherokee".
4151          */
4152         CHEROKEE,
4153 
4154         /**
4155          * Unicode script "Canadian_Aboriginal".
4156          */
4157         CANADIAN_ABORIGINAL,
4158 
4159         /**
4160          * Unicode script "Ogham".
4161          */
4162         OGHAM,
4163 
4164         /**
4165          * Unicode script "Runic".
4166          */
4167         RUNIC,
4168 
4169         /**
4170          * Unicode script "Khmer".
4171          */
4172         KHMER,
4173 
4174         /**
4175          * Unicode script "Mongolian".
4176          */
4177         MONGOLIAN,
4178 
4179         /**
4180          * Unicode script "Hiragana".
4181          */
4182         HIRAGANA,
4183 
4184         /**
4185          * Unicode script "Katakana".
4186          */
4187         KATAKANA,
4188 
4189         /**
4190          * Unicode script "Bopomofo".
4191          */
4192         BOPOMOFO,
4193 
4194         /**
4195          * Unicode script "Han".
4196          */
4197         HAN,
4198 
4199         /**
4200          * Unicode script "Yi".
4201          */
4202         YI,
4203 
4204         /**
4205          * Unicode script "Old_Italic".
4206          */
4207         OLD_ITALIC,
4208 
4209         /**
4210          * Unicode script "Gothic".
4211          */
4212         GOTHIC,
4213 
4214         /**
4215          * Unicode script "Deseret".
4216          */
4217         DESERET,
4218 
4219         /**
4220          * Unicode script "Inherited".
4221          */
4222         INHERITED,
4223 
4224         /**
4225          * Unicode script "Tagalog".
4226          */
4227         TAGALOG,
4228 
4229         /**
4230          * Unicode script "Hanunoo".
4231          */
4232         HANUNOO,
4233 
4234         /**
4235          * Unicode script "Buhid".
4236          */
4237         BUHID,
4238 
4239         /**
4240          * Unicode script "Tagbanwa".
4241          */
4242         TAGBANWA,
4243 
4244         /**
4245          * Unicode script "Limbu".
4246          */
4247         LIMBU,
4248 
4249         /**
4250          * Unicode script "Tai_Le".
4251          */
4252         TAI_LE,
4253 
4254         /**
4255          * Unicode script "Linear_B".
4256          */
4257         LINEAR_B,
4258 
4259         /**
4260          * Unicode script "Ugaritic".
4261          */
4262         UGARITIC,
4263 
4264         /**
4265          * Unicode script "Shavian".
4266          */
4267         SHAVIAN,
4268 
4269         /**
4270          * Unicode script "Osmanya".
4271          */
4272         OSMANYA,
4273 
4274         /**
4275          * Unicode script "Cypriot".
4276          */
4277         CYPRIOT,
4278 
4279         /**
4280          * Unicode script "Braille".
4281          */
4282         BRAILLE,
4283 
4284         /**
4285          * Unicode script "Buginese".
4286          */
4287         BUGINESE,
4288 
4289         /**
4290          * Unicode script "Coptic".
4291          */
4292         COPTIC,
4293 
4294         /**
4295          * Unicode script "New_Tai_Lue".
4296          */
4297         NEW_TAI_LUE,
4298 
4299         /**
4300          * Unicode script "Glagolitic".
4301          */
4302         GLAGOLITIC,
4303 
4304         /**
4305          * Unicode script "Tifinagh".
4306          */
4307         TIFINAGH,
4308 
4309         /**
4310          * Unicode script "Syloti_Nagri".
4311          */
4312         SYLOTI_NAGRI,
4313 
4314         /**
4315          * Unicode script "Old_Persian".
4316          */
4317         OLD_PERSIAN,
4318 
4319         /**
4320          * Unicode script "Kharoshthi".
4321          */
4322         KHAROSHTHI,
4323 
4324         /**
4325          * Unicode script "Balinese".
4326          */
4327         BALINESE,
4328 
4329         /**
4330          * Unicode script "Cuneiform".
4331          */
4332         CUNEIFORM,
4333 
4334         /**
4335          * Unicode script "Phoenician".
4336          */
4337         PHOENICIAN,
4338 
4339         /**
4340          * Unicode script "Phags_Pa".
4341          */
4342         PHAGS_PA,
4343 
4344         /**
4345          * Unicode script "Nko".
4346          */
4347         NKO,
4348 
4349         /**
4350          * Unicode script "Sundanese".
4351          */
4352         SUNDANESE,
4353 
4354         /**
4355          * Unicode script "Batak".
4356          */
4357         BATAK,
4358 
4359         /**
4360          * Unicode script "Lepcha".
4361          */
4362         LEPCHA,
4363 
4364         /**
4365          * Unicode script "Ol_Chiki".
4366          */
4367         OL_CHIKI,
4368 
4369         /**
4370          * Unicode script "Vai".
4371          */
4372         VAI,
4373 
4374         /**
4375          * Unicode script "Saurashtra".
4376          */
4377         SAURASHTRA,
4378 
4379         /**
4380          * Unicode script "Kayah_Li".
4381          */
4382         KAYAH_LI,
4383 
4384         /**
4385          * Unicode script "Rejang".
4386          */
4387         REJANG,
4388 
4389         /**
4390          * Unicode script "Lycian".
4391          */
4392         LYCIAN,
4393 
4394         /**
4395          * Unicode script "Carian".
4396          */
4397         CARIAN,
4398 
4399         /**
4400          * Unicode script "Lydian".
4401          */
4402         LYDIAN,
4403 
4404         /**
4405          * Unicode script "Cham".
4406          */
4407         CHAM,
4408 
4409         /**
4410          * Unicode script "Tai_Tham".
4411          */
4412         TAI_THAM,
4413 
4414         /**
4415          * Unicode script "Tai_Viet".
4416          */
4417         TAI_VIET,
4418 
4419         /**
4420          * Unicode script "Avestan".
4421          */
4422         AVESTAN,
4423 
4424         /**
4425          * Unicode script "Egyptian_Hieroglyphs".
4426          */
4427         EGYPTIAN_HIEROGLYPHS,
4428 
4429         /**
4430          * Unicode script "Samaritan".
4431          */
4432         SAMARITAN,
4433 
4434         /**
4435          * Unicode script "Mandaic".
4436          */
4437         MANDAIC,
4438 
4439         /**
4440          * Unicode script "Lisu".
4441          */
4442         LISU,
4443 
4444         /**
4445          * Unicode script "Bamum".
4446          */
4447         BAMUM,
4448 
4449         /**
4450          * Unicode script "Javanese".
4451          */
4452         JAVANESE,
4453 
4454         /**
4455          * Unicode script "Meetei_Mayek".
4456          */
4457         MEETEI_MAYEK,
4458 
4459         /**
4460          * Unicode script "Imperial_Aramaic".
4461          */
4462         IMPERIAL_ARAMAIC,
4463 
4464         /**
4465          * Unicode script "Old_South_Arabian".
4466          */
4467         OLD_SOUTH_ARABIAN,
4468 
4469         /**
4470          * Unicode script "Inscriptional_Parthian".
4471          */
4472         INSCRIPTIONAL_PARTHIAN,
4473 
4474         /**
4475          * Unicode script "Inscriptional_Pahlavi".
4476          */
4477         INSCRIPTIONAL_PAHLAVI,
4478 
4479         /**
4480          * Unicode script "Old_Turkic".
4481          */
4482         OLD_TURKIC,
4483 
4484         /**
4485          * Unicode script "Brahmi".
4486          */
4487         BRAHMI,
4488 
4489         /**
4490          * Unicode script "Kaithi".
4491          */
4492         KAITHI,
4493 
4494         /**
4495          * Unicode script "Meroitic Hieroglyphs".
4496          * @since 1.8
4497          */
4498         MEROITIC_HIEROGLYPHS,
4499 
4500         /**
4501          * Unicode script "Meroitic Cursive".
4502          * @since 1.8
4503          */
4504         MEROITIC_CURSIVE,
4505 
4506         /**
4507          * Unicode script "Sora Sompeng".
4508          * @since 1.8
4509          */
4510         SORA_SOMPENG,
4511 
4512         /**
4513          * Unicode script "Chakma".
4514          * @since 1.8
4515          */
4516         CHAKMA,
4517 
4518         /**
4519          * Unicode script "Sharada".
4520          * @since 1.8
4521          */
4522         SHARADA,
4523 
4524         /**
4525          * Unicode script "Takri".
4526          * @since 1.8
4527          */
4528         TAKRI,
4529 
4530         /**
4531          * Unicode script "Miao".
4532          * @since 1.8
4533          */
4534         MIAO,
4535 
4536         /**
4537          * Unicode script "Caucasian Albanian".
4538          * @since 9
4539          */
4540         CAUCASIAN_ALBANIAN,
4541 
4542         /**
4543          * Unicode script "Bassa Vah".
4544          * @since 9
4545          */
4546         BASSA_VAH,
4547 
4548         /**
4549          * Unicode script "Duployan".
4550          * @since 9
4551          */
4552         DUPLOYAN,
4553 
4554         /**
4555          * Unicode script "Elbasan".
4556          * @since 9
4557          */
4558         ELBASAN,
4559 
4560         /**
4561          * Unicode script "Grantha".
4562          * @since 9
4563          */
4564         GRANTHA,
4565 
4566         /**
4567          * Unicode script "Pahawh Hmong".
4568          * @since 9
4569          */
4570         PAHAWH_HMONG,
4571 
4572         /**
4573          * Unicode script "Khojki".
4574          * @since 9
4575          */
4576         KHOJKI,
4577 
4578         /**
4579          * Unicode script "Linear A".
4580          * @since 9
4581          */
4582         LINEAR_A,
4583 
4584         /**
4585          * Unicode script "Mahajani".
4586          * @since 9
4587          */
4588         MAHAJANI,
4589 
4590         /**
4591          * Unicode script "Manichaean".
4592          * @since 9
4593          */
4594         MANICHAEAN,
4595 
4596         /**
4597          * Unicode script "Mende Kikakui".
4598          * @since 9
4599          */
4600         MENDE_KIKAKUI,
4601 
4602         /**
4603          * Unicode script "Modi".
4604          * @since 9
4605          */
4606         MODI,
4607 
4608         /**
4609          * Unicode script "Mro".
4610          * @since 9
4611          */
4612         MRO,
4613 
4614         /**
4615          * Unicode script "Old North Arabian".
4616          * @since 9
4617          */
4618         OLD_NORTH_ARABIAN,
4619 
4620         /**
4621          * Unicode script "Nabataean".
4622          * @since 9
4623          */
4624         NABATAEAN,
4625 
4626         /**
4627          * Unicode script "Palmyrene".
4628          * @since 9
4629          */
4630         PALMYRENE,
4631 
4632         /**
4633          * Unicode script "Pau Cin Hau".
4634          * @since 9
4635          */
4636         PAU_CIN_HAU,
4637 
4638         /**
4639          * Unicode script "Old Permic".
4640          * @since 9
4641          */
4642         OLD_PERMIC,
4643 
4644         /**
4645          * Unicode script "Psalter Pahlavi".
4646          * @since 9
4647          */
4648         PSALTER_PAHLAVI,
4649 
4650         /**
4651          * Unicode script "Siddham".
4652          * @since 9
4653          */
4654         SIDDHAM,
4655 
4656         /**
4657          * Unicode script "Khudawadi".
4658          * @since 9
4659          */
4660         KHUDAWADI,
4661 
4662         /**
4663          * Unicode script "Tirhuta".
4664          * @since 9
4665          */
4666         TIRHUTA,
4667 
4668         /**
4669          * Unicode script "Warang Citi".
4670          * @since 9
4671          */
4672         WARANG_CITI,
4673 
4674          /**
4675          * Unicode script "Ahom".
4676          * @since 9
4677          */
4678         AHOM,
4679 
4680         /**
4681          * Unicode script "Anatolian Hieroglyphs".
4682          * @since 9
4683          */
4684         ANATOLIAN_HIEROGLYPHS,
4685 
4686         /**
4687          * Unicode script "Hatran".
4688          * @since 9
4689          */
4690         HATRAN,
4691 
4692         /**
4693          * Unicode script "Multani".
4694          * @since 9
4695          */
4696         MULTANI,
4697 
4698         /**
4699          * Unicode script "Old Hungarian".
4700          * @since 9
4701          */
4702         OLD_HUNGARIAN,
4703 
4704         /**
4705          * Unicode script "SignWriting".
4706          * @since 9
4707          */
4708         SIGNWRITING,
4709 
4710         /**
4711           * Unicode script "Adlam".
4712           * @since 11
4713           */
4714         ADLAM,
4715 
4716         /**
4717           * Unicode script "Bhaiksuki".
4718           * @since 11
4719           */
4720         BHAIKSUKI,
4721 
4722         /**
4723           * Unicode script "Marchen".
4724           * @since 11
4725           */
4726         MARCHEN,
4727 
4728         /**
4729           * Unicode script "Newa".
4730           * @since 11
4731           */
4732         NEWA,
4733 
4734         /**
4735           * Unicode script "Osage".
4736           * @since 11
4737           */
4738         OSAGE,
4739 
4740         /**
4741           * Unicode script "Tangut".
4742           * @since 11
4743           */
4744         TANGUT,
4745 
4746         /**
4747           * Unicode script "Masaram Gondi".
4748           * @since 11
4749           */
4750         MASARAM_GONDI,
4751 
4752         /**
4753           * Unicode script "Nushu".
4754           * @since 11
4755           */
4756         NUSHU,
4757 
4758         /**
4759           * Unicode script "Soyombo".
4760           * @since 11
4761           */
4762         SOYOMBO,
4763 
4764         /**
4765           * Unicode script "Zanabazar Square".
4766           * @since 11
4767           */
4768         ZANABAZAR_SQUARE,
4769 
4770         /**
4771           * Unicode script "Hanifi Rohingya".
4772           * @since 12
4773           */
4774         HANIFI_ROHINGYA,
4775 
4776         /**
4777           * Unicode script "Old Sogdian".
4778           * @since 12
4779           */
4780         OLD_SOGDIAN,
4781 
4782         /**
4783           * Unicode script "Sogdian".
4784           * @since 12
4785           */
4786         SOGDIAN,
4787 
4788         /**
4789           * Unicode script "Dogra".
4790           * @since 12
4791           */
4792         DOGRA,
4793 
4794         /**
4795           * Unicode script "Gunjala Gondi".
4796           * @since 12
4797           */
4798         GUNJALA_GONDI,
4799 
4800         /**
4801           * Unicode script "Makasar".
4802           * @since 12
4803           */
4804         MAKASAR,
4805 
4806         /**
4807           * Unicode script "Medefaidrin".
4808           * @since 12
4809           */
4810         MEDEFAIDRIN,
4811 
4812         /**
4813          * Unicode script "Unknown".
4814          */
4815         UNKNOWN;
4816 
4817         private static final int[] scriptStarts = {
4818             0x0000,   // 0000..0040; COMMON
4819             0x0041,   // 0041..005A; LATIN
4820             0x005B,   // 005B..0060; COMMON
4821             0x0061,   // 0061..007A; LATIN
4822             0x007B,   // 007B..00A9; COMMON
4823             0x00AA,   // 00AA      ; LATIN
4824             0x00AB,   // 00AB..00B9; COMMON
4825             0x00BA,   // 00BA      ; LATIN
4826             0x00BB,   // 00BB..00BF; COMMON
4827             0x00C0,   // 00C0..00D6; LATIN
4828             0x00D7,   // 00D7      ; COMMON
4829             0x00D8,   // 00D8..00F6; LATIN
4830             0x00F7,   // 00F7      ; COMMON
4831             0x00F8,   // 00F8..02B8; LATIN
4832             0x02B9,   // 02B9..02DF; COMMON
4833             0x02E0,   // 02E0..02E4; LATIN
4834             0x02E5,   // 02E5..02E9; COMMON
4835             0x02EA,   // 02EA..02EB; BOPOMOFO
4836             0x02EC,   // 02EC..02FF; COMMON
4837             0x0300,   // 0300..036F; INHERITED
4838             0x0370,   // 0370..0373; GREEK
4839             0x0374,   // 0374      ; COMMON
4840             0x0375,   // 0375..0377; GREEK
4841             0x0378,   // 0378..0379; UNKNOWN
4842             0x037A,   // 037A..037D; GREEK
4843             0x037E,   // 037E      ; COMMON
4844             0x037F,   // 037F      ; GREEK
4845             0x0380,   // 0380..0383; UNKNOWN
4846             0x0384,   // 0384      ; GREEK
4847             0x0385,   // 0385      ; COMMON
4848             0x0386,   // 0386      ; GREEK
4849             0x0387,   // 0387      ; COMMON
4850             0x0388,   // 0388..038A; GREEK
4851             0x038B,   // 038B      ; UNKNOWN
4852             0x038C,   // 038C      ; GREEK
4853             0x038D,   // 038D      ; UNKNOWN
4854             0x038E,   // 038E..03A1; GREEK
4855             0x03A2,   // 03A2      ; UNKNOWN
4856             0x03A3,   // 03A3..03E1; GREEK
4857             0x03E2,   // 03E2..03EF; COPTIC
4858             0x03F0,   // 03F0..03FF; GREEK
4859             0x0400,   // 0400..0484; CYRILLIC
4860             0x0485,   // 0485..0486; INHERITED
4861             0x0487,   // 0487..052F; CYRILLIC
4862             0x0530,   // 0530      ; UNKNOWN
4863             0x0531,   // 0531..0556; ARMENIAN
4864             0x0557,   // 0557..0558; UNKNOWN
4865             0x0559,   // 0559..0588; ARMENIAN
4866             0x0589,   // 0589      ; COMMON
4867             0x058A,   // 058A      ; ARMENIAN
4868             0x058B,   // 058B..058C; UNKNOWN
4869             0x058D,   // 058D..058F; ARMENIAN
4870             0x0590,   // 0590      ; UNKNOWN
4871             0x0591,   // 0591..05C7; HEBREW
4872             0x05C8,   // 05C8..05CF; UNKNOWN
4873             0x05D0,   // 05D0..05EA; HEBREW
4874             0x05EB,   // 05EB..05EE; UNKNOWN
4875             0x05EF,   // 05EF..05F4; HEBREW
4876             0x05F5,   // 05F5..05FF; UNKNOWN
4877             0x0600,   // 0600..0604; ARABIC
4878             0x0605,   // 0605      ; COMMON
4879             0x0606,   // 0606..060B; ARABIC
4880             0x060C,   // 060C      ; COMMON
4881             0x060D,   // 060D..061A; ARABIC
4882             0x061B,   // 061B      ; COMMON
4883             0x061C,   // 061C      ; ARABIC
4884             0x061D,   // 061D      ; UNKNOWN
4885             0x061E,   // 061E      ; ARABIC
4886             0x061F,   // 061F      ; COMMON
4887             0x0620,   // 0620..063F; ARABIC
4888             0x0640,   // 0640      ; COMMON
4889             0x0641,   // 0641..064A; ARABIC
4890             0x064B,   // 064B..0655; INHERITED
4891             0x0656,   // 0656..066F; ARABIC
4892             0x0670,   // 0670      ; INHERITED
4893             0x0671,   // 0671..06DC; ARABIC
4894             0x06DD,   // 06DD      ; COMMON
4895             0x06DE,   // 06DE..06FF; ARABIC
4896             0x0700,   // 0700..070D; SYRIAC
4897             0x070E,   // 070E      ; UNKNOWN
4898             0x070F,   // 070F..074A; SYRIAC
4899             0x074B,   // 074B..074C; UNKNOWN
4900             0x074D,   // 074D..074F; SYRIAC
4901             0x0750,   // 0750..077F; ARABIC
4902             0x0780,   // 0780..07B1; THAANA
4903             0x07B2,   // 07B2..07BF; UNKNOWN
4904             0x07C0,   // 07C0..07FA; NKO
4905             0x07FB,   // 07FB..07FC; UNKNOWN
4906             0X07FD,   // 07FD..07FF; NKO
4907             0x0800,   // 0800..082D; SAMARITAN
4908             0x082E,   // 082E..082F; UNKNOWN
4909             0x0830,   // 0830..083E; SAMARITAN
4910             0x083F,   // 083F      ; UNKNOWN
4911             0x0840,   // 0840..085B; MANDAIC
4912             0x085C,   // 085C..085D; UNKNOWN
4913             0x085E,   // 085E      ; MANDAIC
4914             0x085F,   // 085F      ; UNKNOWN
4915             0x0860,   // 0860..086A; SYRIAC
4916             0x086B,   // 086B..089F; UNKNOWN
4917             0x08A0,   // 08A0..08B4; ARABIC
4918             0x08B5,   // 08B5      ; UNKNOWN
4919             0x08B6,   // 08B6..08BD; ARABIC
4920             0x08BE,   // 08BE..08D2; UNKNOWN
4921             0x08D3,   // 08D3..08E1; ARABIC
4922             0x08E2,   // 08E2      ; COMMON
4923             0x08E3,   // 08E3..08FF; ARABIC
4924             0x0900,   // 0900..0950; DEVANAGARI
4925             0x0951,   // 0951..0952; INHERITED
4926             0x0953,   // 0953..0963; DEVANAGARI
4927             0x0964,   // 0964..0965; COMMON
4928             0x0966,   // 0966..097F; DEVANAGARI
4929             0x0980,   // 0980..0983; BENGALI
4930             0x0984,   // 0984      ; UNKNOWN
4931             0x0985,   // 0985..098C; BENGALI
4932             0x098D,   // 098D..098E; UNKNOWN
4933             0x098F,   // 098F..0990; BENGALI
4934             0x0991,   // 0991..0992; UNKNOWN
4935             0x0993,   // 0993..09A8; BENGALI
4936             0x09A9,   // 09A9      ; UNKNOWN
4937             0x09AA,   // 09AA..09B0; BENGALI
4938             0x09B1,   // 09B1      ; UNKNOWN
4939             0x09B2,   // 09B2      ; BENGALI
4940             0x09B3,   // 09B3..09B5; UNKNOWN
4941             0x09B6,   // 09B6..09B9; BENGALI
4942             0x09BA,   // 09BA..09BB; UNKNOWN
4943             0x09BC,   // 09BC..09C4; BENGALI
4944             0x09C5,   // 09C5..09C6; UNKNOWN
4945             0x09C7,   // 09C7..09C8; BENGALI
4946             0x09C9,   // 09C9..09CA; UNKNOWN
4947             0x09CB,   // 09CB..09CE; BENGALI
4948             0x09CF,   // 09CF..09D6; UNKNOWN
4949             0x09D7,   // 09D7      ; BENGALI
4950             0x09D8,   // 09D8..09DB; UNKNOWN
4951             0x09DC,   // 09DC..09DD; BENGALI
4952             0x09DE,   // 09DE      ; UNKNOWN
4953             0x09DF,   // 09DF..09E3; BENGALI
4954             0x09E4,   // 09E4..09E5; UNKNOWN
4955             0x09E6,   // 09E6..09FE; BENGALI
4956             0x09FF,   // 09FF..0A00; UNKNOWN
4957             0x0A01,   // 0A01..0A03; GURMUKHI
4958             0x0A04,   // 0A04      ; UNKNOWN
4959             0x0A05,   // 0A05..0A0A; GURMUKHI
4960             0x0A0B,   // 0A0B..0A0E; UNKNOWN
4961             0x0A0F,   // 0A0F..0A10; GURMUKHI
4962             0x0A11,   // 0A11..0A12; UNKNOWN
4963             0x0A13,   // 0A13..0A28; GURMUKHI
4964             0x0A29,   // 0A29      ; UNKNOWN
4965             0x0A2A,   // 0A2A..0A30; GURMUKHI
4966             0x0A31,   // 0A31      ; UNKNOWN
4967             0x0A32,   // 0A32..0A33; GURMUKHI
4968             0x0A34,   // 0A34      ; UNKNOWN
4969             0x0A35,   // 0A35..0A36; GURMUKHI
4970             0x0A37,   // 0A37      ; UNKNOWN
4971             0x0A38,   // 0A38..0A39; GURMUKHI
4972             0x0A3A,   // 0A3A..0A3B; UNKNOWN
4973             0x0A3C,   // 0A3C      ; GURMUKHI
4974             0x0A3D,   // 0A3D      ; UNKNOWN
4975             0x0A3E,   // 0A3E..0A42; GURMUKHI
4976             0x0A43,   // 0A43..0A46; UNKNOWN
4977             0x0A47,   // 0A47..0A48; GURMUKHI
4978             0x0A49,   // 0A49..0A4A; UNKNOWN
4979             0x0A4B,   // 0A4B..0A4D; GURMUKHI
4980             0x0A4E,   // 0A4E..0A50; UNKNOWN
4981             0x0A51,   // 0A51      ; GURMUKHI
4982             0x0A52,   // 0A52..0A58; UNKNOWN
4983             0x0A59,   // 0A59..0A5C; GURMUKHI
4984             0x0A5D,   // 0A5D      ; UNKNOWN
4985             0x0A5E,   // 0A5E      ; GURMUKHI
4986             0x0A5F,   // 0A5F..0A65; UNKNOWN
4987             0x0A66,   // 0A66..0A76; GURMUKHI
4988             0x0A77,   // 0A77..0A80; UNKNOWN
4989             0x0A81,   // 0A81..0A83; GUJARATI
4990             0x0A84,   // 0A84      ; UNKNOWN
4991             0x0A85,   // 0A85..0A8D; GUJARATI
4992             0x0A8E,   // 0A8E      ; UNKNOWN
4993             0x0A8F,   // 0A8F..0A91; GUJARATI
4994             0x0A92,   // 0A92      ; UNKNOWN
4995             0x0A93,   // 0A93..0AA8; GUJARATI
4996             0x0AA9,   // 0AA9      ; UNKNOWN
4997             0x0AAA,   // 0AAA..0AB0; GUJARATI
4998             0x0AB1,   // 0AB1      ; UNKNOWN
4999             0x0AB2,   // 0AB2..0AB3; GUJARATI
5000             0x0AB4,   // 0AB4      ; UNKNOWN
5001             0x0AB5,   // 0AB5..0AB9; GUJARATI
5002             0x0ABA,   // 0ABA..0ABB; UNKNOWN
5003             0x0ABC,   // 0ABC..0AC5; GUJARATI
5004             0x0AC6,   // 0AC6      ; UNKNOWN
5005             0x0AC7,   // 0AC7..0AC9; GUJARATI
5006             0x0ACA,   // 0ACA      ; UNKNOWN
5007             0x0ACB,   // 0ACB..0ACD; GUJARATI
5008             0x0ACE,   // 0ACE..0ACF; UNKNOWN
5009             0x0AD0,   // 0AD0      ; GUJARATI
5010             0x0AD1,   // 0AD1..0ADF; UNKNOWN
5011             0x0AE0,   // 0AE0..0AE3; GUJARATI
5012             0x0AE4,   // 0AE4..0AE5; UNKNOWN
5013             0x0AE6,   // 0AE6..0AF1; GUJARATI
5014             0x0AF2,   // 0AF2..0AF8; UNKNOWN
5015             0x0AF9,   // 0AF9..0AFF; GUJARATI
5016             0x0B00,   // 0B00      ; UNKNOWN
5017             0x0B01,   // 0B01..0B03; ORIYA
5018             0x0B04,   // 0B04      ; UNKNOWN
5019             0x0B05,   // 0B05..0B0C; ORIYA
5020             0x0B0D,   // 0B0D..0B0E; UNKNOWN
5021             0x0B0F,   // 0B0F..0B10; ORIYA
5022             0x0B11,   // 0B11..0B12; UNKNOWN
5023             0x0B13,   // 0B13..0B28; ORIYA
5024             0x0B29,   // 0B29      ; UNKNOWN
5025             0x0B2A,   // 0B2A..0B30; ORIYA
5026             0x0B31,   // 0B31      ; UNKNOWN
5027             0x0B32,   // 0B32..0B33; ORIYA
5028             0x0B34,   // 0B34      ; UNKNOWN
5029             0x0B35,   // 0B35..0B39; ORIYA
5030             0x0B3A,   // 0B3A..0B3B; UNKNOWN
5031             0x0B3C,   // 0B3C..0B44; ORIYA
5032             0x0B45,   // 0B45..0B46; UNKNOWN
5033             0x0B47,   // 0B47..0B48; ORIYA
5034             0x0B49,   // 0B49..0B4A; UNKNOWN
5035             0x0B4B,   // 0B4B..0B4D; ORIYA
5036             0x0B4E,   // 0B4E..0B55; UNKNOWN
5037             0x0B56,   // 0B56..0B57; ORIYA
5038             0x0B58,   // 0B58..0B5B; UNKNOWN
5039             0x0B5C,   // 0B5C..0B5D; ORIYA
5040             0x0B5E,   // 0B5E      ; UNKNOWN
5041             0x0B5F,   // 0B5F..0B63; ORIYA
5042             0x0B64,   // 0B64..0B65; UNKNOWN
5043             0x0B66,   // 0B66..0B77; ORIYA
5044             0x0B78,   // 0B78..0B81; UNKNOWN
5045             0x0B82,   // 0B82..0B83; TAMIL
5046             0x0B84,   // 0B84      ; UNKNOWN
5047             0x0B85,   // 0B85..0B8A; TAMIL
5048             0x0B8B,   // 0B8B..0B8D; UNKNOWN
5049             0x0B8E,   // 0B8E..0B90; TAMIL
5050             0x0B91,   // 0B91      ; UNKNOWN
5051             0x0B92,   // 0B92..0B95; TAMIL
5052             0x0B96,   // 0B96..0B98; UNKNOWN
5053             0x0B99,   // 0B99..0B9A; TAMIL
5054             0x0B9B,   // 0B9B      ; UNKNOWN
5055             0x0B9C,   // 0B9C      ; TAMIL
5056             0x0B9D,   // 0B9D      ; UNKNOWN
5057             0x0B9E,   // 0B9E..0B9F; TAMIL
5058             0x0BA0,   // 0BA0..0BA2; UNKNOWN
5059             0x0BA3,   // 0BA3..0BA4; TAMIL
5060             0x0BA5,   // 0BA5..0BA7; UNKNOWN
5061             0x0BA8,   // 0BA8..0BAA; TAMIL
5062             0x0BAB,   // 0BAB..0BAD; UNKNOWN
5063             0x0BAE,   // 0BAE..0BB9; TAMIL
5064             0x0BBA,   // 0BBA..0BBD; UNKNOWN
5065             0x0BBE,   // 0BBE..0BC2; TAMIL
5066             0x0BC3,   // 0BC3..0BC5; UNKNOWN
5067             0x0BC6,   // 0BC6..0BC8; TAMIL
5068             0x0BC9,   // 0BC9      ; UNKNOWN
5069             0x0BCA,   // 0BCA..0BCD; TAMIL
5070             0x0BCE,   // 0BCE..0BCF; UNKNOWN
5071             0x0BD0,   // 0BD0      ; TAMIL
5072             0x0BD1,   // 0BD1..0BD6; UNKNOWN
5073             0x0BD7,   // 0BD7      ; TAMIL
5074             0x0BD8,   // 0BD8..0BE5; UNKNOWN
5075             0x0BE6,   // 0BE6..0BFA; TAMIL
5076             0x0BFB,   // 0BFB..0BFF; UNKNOWN
5077             0x0C00,   // 0C00..0C0C; TELUGU
5078             0x0C0D,   // 0C0D      ; UNKNOWN
5079             0x0C0E,   // 0C0E..0C10; TELUGU
5080             0x0C11,   // 0C11      ; UNKNOWN
5081             0x0C12,   // 0C12..0C28; TELUGU
5082             0x0C29,   // 0C29      ; UNKNOWN
5083             0x0C2A,   // 0C2A..0C39; TELUGU
5084             0x0C3A,   // 0C3A..0C3C; UNKNOWN
5085             0x0C3D,   // 0C3D..0C44; TELUGU
5086             0x0C45,   // 0C45      ; UNKNOWN
5087             0x0C46,   // 0C46..0C48; TELUGU
5088             0x0C49,   // 0C49      ; UNKNOWN
5089             0x0C4A,   // 0C4A..0C4D; TELUGU
5090             0x0C4E,   // 0C4E..0C54; UNKNOWN
5091             0x0C55,   // 0C55..0C56; TELUGU
5092             0x0C57,   // 0C57      ; UNKNOWN
5093             0x0C58,   // 0C58..0C5A; TELUGU
5094             0x0C5B,   // 0C5B..0C5F; UNKNOWN
5095             0x0C60,   // 0C60..0C63; TELUGU
5096             0x0C64,   // 0C64..0C65; UNKNOWN
5097             0x0C66,   // 0C66..0C6F; TELUGU
5098             0x0C70,   // 0C70..0C77; UNKNOWN
5099             0x0C78,   // 0C78..0C7F; TELUGU
5100             0x0C80,   // 0C80..0C8C; KANNADA
5101             0x0C8D,   // 0C8D      ; UNKNOWN
5102             0x0C8E,   // 0C8E..0C90; KANNADA
5103             0x0C91,   // 0C91      ; UNKNOWN
5104             0x0C92,   // 0C92..0CA8; KANNADA
5105             0x0CA9,   // 0CA9      ; UNKNOWN
5106             0x0CAA,   // 0CAA..0CB3; KANNADA
5107             0x0CB4,   // 0CB4      ; UNKNOWN
5108             0x0CB5,   // 0CB5..0CB9; KANNADA
5109             0x0CBA,   // 0CBA..0CBB; UNKNOWN
5110             0x0CBC,   // 0CBC..0CC4; KANNADA
5111             0x0CC5,   // 0CC5      ; UNKNOWN
5112             0x0CC6,   // 0CC6..0CC8; KANNADA
5113             0x0CC9,   // 0CC9      ; UNKNOWN
5114             0x0CCA,   // 0CCA..0CCD; KANNADA
5115             0x0CCE,   // 0CCE..0CD4; UNKNOWN
5116             0x0CD5,   // 0CD5..0CD6; KANNADA
5117             0x0CD7,   // 0CD7..0CDD; UNKNOWN
5118             0x0CDE,   // 0CDE      ; KANNADA
5119             0x0CDF,   // 0CDF      ; UNKNOWN
5120             0x0CE0,   // 0CE0..0CE3; KANNADA
5121             0x0CE4,   // 0CE4..0CE5; UNKNOWN
5122             0x0CE6,   // 0CE6..0CEF; KANNADA
5123             0x0CF0,   // 0CF0      ; UNKNOWN
5124             0x0CF1,   // 0CF1..0CF2; KANNADA
5125             0x0CF3,   // 0CF3..0CFF; UNKNOWN
5126             0x0D00,   // 0D00..0D03; MALAYALAM
5127             0x0D04,   // 0D04      ; UNKNOWN
5128             0x0D05,   // 0D05..0D0C; MALAYALAM
5129             0x0D0D,   // 0D0D      ; UNKNOWN
5130             0x0D0E,   // 0D0E..0D10; MALAYALAM
5131             0x0D11,   // 0D11      ; UNKNOWN
5132             0x0D12,   // 0D12..0D44; MALAYALAM
5133             0x0D45,   // 0D45      ; UNKNOWN
5134             0x0D46,   // 0D46..0D48; MALAYALAM
5135             0x0D49,   // 0D49      ; UNKNOWN
5136             0x0D4A,   // 0D4A..0D4F; MALAYALAM
5137             0x0D50,   // 0D50..0D53; UNKNOWN
5138             0x0D54,   // 0D54..0D63; MALAYALAM
5139             0x0D64,   // 0D64..0D65; UNKNOWN
5140             0x0D66,   // 0D66..0D7F; MALAYALAM
5141             0x0D80,   // 0D80..0D81; UNKNOWN
5142             0x0D82,   // 0D82..0D83; SINHALA
5143             0x0D84,   // 0D84      ; UNKNOWN
5144             0x0D85,   // 0D85..0D96; SINHALA
5145             0x0D97,   // 0D97..0D99; UNKNOWN
5146             0x0D9A,   // 0D9A..0DB1; SINHALA
5147             0x0DB2,   // 0DB2      ; UNKNOWN
5148             0x0DB3,   // 0DB3..0DBB; SINHALA
5149             0x0DBC,   // 0DBC      ; UNKNOWN
5150             0x0DBD,   // 0DBD      ; SINHALA
5151             0x0DBE,   // 0DBE..0DBF; UNKNOWN
5152             0x0DC0,   // 0DC0..0DC6; SINHALA
5153             0x0DC7,   // 0DC7..0DC9; UNKNOWN
5154             0x0DCA,   // 0DCA      ; SINHALA
5155             0x0DCB,   // 0DCB..0DCE; UNKNOWN
5156             0x0DCF,   // 0DCF..0DD4; SINHALA
5157             0x0DD5,   // 0DD5      ; UNKNOWN
5158             0x0DD6,   // 0DD6      ; SINHALA
5159             0x0DD7,   // 0DD7      ; UNKNOWN
5160             0x0DD8,   // 0DD8..0DDF; SINHALA
5161             0x0DE0,   // 0DE0..0DE5; UNKNOWN
5162             0x0DE6,   // 0DE6..0DEF; SINHALA
5163             0x0DF0,   // 0DF0..0DF1; UNKNOWN
5164             0x0DF2,   // 0DF2..0DF4; SINHALA
5165             0x0DF5,   // 0DF5..0E00; UNKNOWN
5166             0x0E01,   // 0E01..0E3A; THAI
5167             0x0E3B,   // 0E3B..0E3E; UNKNOWN
5168             0x0E3F,   // 0E3F      ; COMMON
5169             0x0E40,   // 0E40..0E5B; THAI
5170             0x0E5C,   // 0E5C..0E80; UNKNOWN
5171             0x0E81,   // 0E81..0E82; LAO
5172             0x0E83,   // 0E83      ; UNKNOWN
5173             0x0E84,   // 0E84      ; LAO
5174             0x0E85,   // 0E85..0E86; UNKNOWN
5175             0x0E87,   // 0E87..0E88; LAO
5176             0x0E89,   // 0E89      ; UNKNOWN
5177             0x0E8A,   // 0E8A      ; LAO
5178             0x0E8B,   // 0E8B..0E8C; UNKNOWN
5179             0x0E8D,   // 0E8D      ; LAO
5180             0x0E8E,   // 0E8E..0E93; UNKNOWN
5181             0x0E94,   // 0E94..0E97; LAO
5182             0x0E98,   // 0E98      ; UNKNOWN
5183             0x0E99,   // 0E99..0E9F; LAO
5184             0x0EA0,   // 0EA0      ; UNKNOWN
5185             0x0EA1,   // 0EA1..0EA3; LAO
5186             0x0EA4,   // 0EA4      ; UNKNOWN
5187             0x0EA5,   // 0EA5      ; LAO
5188             0x0EA6,   // 0EA6      ; UNKNOWN
5189             0x0EA7,   // 0EA7      ; LAO
5190             0x0EA8,   // 0EA8..0EA9; UNKNOWN
5191             0x0EAA,   // 0EAA..0EAB; LAO
5192             0x0EAC,   // 0EAC      ; UNKNOWN
5193             0x0EAD,   // 0EAD..0EB9; LAO
5194             0x0EBA,   // 0EBA      ; UNKNOWN
5195             0x0EBB,   // 0EBB..0EBD; LAO
5196             0x0EBE,   // 0EBE..0EBF; UNKNOWN
5197             0x0EC0,   // 0EC0..0EC4; LAO
5198             0x0EC5,   // 0EC5      ; UNKNOWN
5199             0x0EC6,   // 0EC6      ; LAO
5200             0x0EC7,   // 0EC7      ; UNKNOWN
5201             0x0EC8,   // 0EC8..0ECD; LAO
5202             0x0ECE,   // 0ECE..0ECF; UNKNOWN
5203             0x0ED0,   // 0ED0..0ED9; LAO
5204             0x0EDA,   // 0EDA..0EDB; UNKNOWN
5205             0x0EDC,   // 0EDC..0EDF; LAO
5206             0x0EE0,   // 0EE0..0EFF; UNKNOWN
5207             0x0F00,   // 0F00..0F47; TIBETAN
5208             0x0F48,   // 0F48      ; UNKNOWN
5209             0x0F49,   // 0F49..0F6C; TIBETAN
5210             0x0F6D,   // 0F6D..0F70; UNKNOWN
5211             0x0F71,   // 0F71..0F97; TIBETAN
5212             0x0F98,   // 0F98      ; UNKNOWN
5213             0x0F99,   // 0F99..0FBC; TIBETAN
5214             0x0FBD,   // 0FBD      ; UNKNOWN
5215             0x0FBE,   // 0FBE..0FCC; TIBETAN
5216             0x0FCD,   // 0FCD      ; UNKNOWN
5217             0x0FCE,   // 0FCE..0FD4; TIBETAN
5218             0x0FD5,   // 0FD5..0FD8; COMMON
5219             0x0FD9,   // 0FD9..0FDA; TIBETAN
5220             0x0FDB,   // 0FDB..FFF; UNKNOWN
5221             0x1000,   // 1000..109F; MYANMAR
5222             0x10A0,   // 10A0..10C5; GEORGIAN
5223             0x10C6,   // 10C6      ; UNKNOWN
5224             0x10C7,   // 10C7      ; GEORGIAN
5225             0x10C8,   // 10C8..10CC; UNKNOWN
5226             0x10CD,   // 10CD      ; GEORGIAN
5227             0x10CE,   // 10CE..10CF; UNKNOWN
5228             0x10D0,   // 10D0..10FA; GEORGIAN
5229             0x10FB,   // 10FB      ; COMMON
5230             0x10FC,   // 10FC..10FF; GEORGIAN
5231             0x1100,   // 1100..11FF; HANGUL
5232             0x1200,   // 1200..1248; ETHIOPIC
5233             0x1249,   // 1249      ; UNKNOWN
5234             0x124A,   // 124A..124D; ETHIOPIC
5235             0x124E,   // 124E..124F; UNKNOWN
5236             0x1250,   // 1250..1256; ETHIOPIC
5237             0x1257,   // 1257      ; UNKNOWN
5238             0x1258,   // 1258      ; ETHIOPIC
5239             0x1259,   // 1259      ; UNKNOWN
5240             0x125A,   // 125A..125D; ETHIOPIC
5241             0x125E,   // 125E..125F; UNKNOWN
5242             0x1260,   // 1260..1288; ETHIOPIC
5243             0x1289,   // 1289      ; UNKNOWN
5244             0x128A,   // 128A..128D; ETHIOPIC
5245             0x128E,   // 128E..128F; UNKNOWN
5246             0x1290,   // 1290..12B0; ETHIOPIC
5247             0x12B1,   // 12B1      ; UNKNOWN
5248             0x12B2,   // 12B2..12B5; ETHIOPIC
5249             0x12B6,   // 12B6..12B7; UNKNOWN
5250             0x12B8,   // 12B8..12BE; ETHIOPIC
5251             0x12BF,   // 12BF      ; UNKNOWN
5252             0x12C0,   // 12C0      ; ETHIOPIC
5253             0x12C1,   // 12C1      ; UNKNOWN
5254             0x12C2,   // 12C2..12C5; ETHIOPIC
5255             0x12C6,   // 12C6..12C7; UNKNOWN
5256             0x12C8,   // 12C8..12D6; ETHIOPIC
5257             0x12D7,   // 12D7      ; UNKNOWN
5258             0x12D8,   // 12D8..1310; ETHIOPIC
5259             0x1311,   // 1311      ; UNKNOWN
5260             0x1312,   // 1312..1315; ETHIOPIC
5261             0x1316,   // 1316..1317; UNKNOWN
5262             0x1318,   // 1318..135A; ETHIOPIC
5263             0x135B,   // 135B..135C; UNKNOWN
5264             0x135D,   // 135D..137C; ETHIOPIC
5265             0x137D,   // 137D..137F; UNKNOWN
5266             0x1380,   // 1380..1399; ETHIOPIC
5267             0x139A,   // 139A..139F; UNKNOWN
5268             0x13A0,   // 13A0..13F5; CHEROKEE
5269             0x13F6,   // 13F6..13F7; UNKNOWN
5270             0x13F8,   // 13F8..13FD; CHEROKEE
5271             0x13FE,   // 13FE..13FF; UNKNOWN
5272             0x1400,   // 1400..167F; CANADIAN_ABORIGINAL
5273             0x1680,   // 1680..169C; OGHAM
5274             0x169D,   // 169D..169F; UNKNOWN
5275             0x16A0,   // 16A0..16EA; RUNIC
5276             0x16EB,   // 16EB..16ED; COMMON
5277             0x16EE,   // 16EE..16F8; RUNIC
5278             0x16F9,   // 16F9..16FF; UNKNOWN
5279             0x1700,   // 1700..170C; TAGALOG
5280             0x170D,   // 170D      ; UNKNOWN
5281             0x170E,   // 170E..1714; TAGALOG
5282             0x1715,   // 1715..171F; UNKNOWN
5283             0x1720,   // 1720..1734; HANUNOO
5284             0x1735,   // 1735..1736; COMMON
5285             0x1737,   // 1737..173F; UNKNOWN
5286             0x1740,   // 1740..1753; BUHID
5287             0x1754,   // 1754..175F; UNKNOWN
5288             0x1760,   // 1760..176C; TAGBANWA
5289             0x176D,   // 176D      ; UNKNOWN
5290             0x176E,   // 176E..1770; TAGBANWA
5291             0x1771,   // 1771      ; UNKNOWN
5292             0x1772,   // 1772..1773; TAGBANWA
5293             0x1774,   // 1774..177F; UNKNOWN
5294             0x1780,   // 1780..17DD; KHMER
5295             0x17DE,   // 17DE..17DF; UNKNOWN
5296             0x17E0,   // 17E0..17E9; KHMER
5297             0x17EA,   // 17EA..17EF; UNKNOWN
5298             0x17F0,   // 17F0..17F9; KHMER
5299             0x17FA,   // 17FA..17FF; UNKNOWN
5300             0x1800,   // 1800..1801; MONGOLIAN
5301             0x1802,   // 1802..1803; COMMON
5302             0x1804,   // 1804      ; MONGOLIAN
5303             0x1805,   // 1805      ; COMMON
5304             0x1806,   // 1806..180E; MONGOLIAN
5305             0x180F,   // 180F      ; UNKNOWN
5306             0x1810,   // 1810..1819; MONGOLIAN
5307             0x181A,   // 181A..181F; UNKNOWN
5308             0x1820,   // 1820..1878; MONGOLIAN
5309             0x1879,   // 1879..187F; UNKNOWN
5310             0x1880,   // 1880..18AA; MONGOLIAN
5311             0x18AB,   // 18AB..18AF; UNKNOWN
5312             0x18B0,   // 18B0..18F5; CANADIAN_ABORIGINAL
5313             0x18F6,   // 18F6..18FF; UNKNOWN
5314             0x1900,   // 1900..191E; LIMBU
5315             0x191F,   // 191F      ; UNKNOWN
5316             0x1920,   // 1920..192B; LIMBU
5317             0x192C,   // 192C..192F; UNKNOWN
5318             0x1930,   // 1930..193B; LIMBU
5319             0x193C,   // 193C..193F; UNKNOWN
5320             0x1940,   // 1940      ; LIMBU
5321             0x1941,   // 1941..1943; UNKNOWN
5322             0x1944,   // 1944..194F; LIMBU
5323             0x1950,   // 1950..196D; TAI_LE
5324             0x196E,   // 196E..196F; UNKNOWN
5325             0x1970,   // 1970..1974; TAI_LE
5326             0x1975,   // 1975..197F; UNKNOWN
5327             0x1980,   // 1980..19AB; NEW_TAI_LUE
5328             0x19AC,   // 19AC..19AF; UNKNOWN
5329             0x19B0,   // 19B0..19C9; NEW_TAI_LUE
5330             0x19CA,   // 19CA..19CF; UNKNOWN
5331             0x19D0,   // 19D0..19DA; NEW_TAI_LUE
5332             0x19DB,   // 19DB..19DD; UNKNOWN
5333             0x19DE,   // 19DE..19DF; NEW_TAI_LUE
5334             0x19E0,   // 19E0..19FF; KHMER
5335             0x1A00,   // 1A00..1A1B; BUGINESE
5336             0x1A1C,   // 1A1C..1A1D; UNKNOWN
5337             0x1A1E,   // 1A1E..1A1F; BUGINESE
5338             0x1A20,   // 1A20..1A5E; TAI_THAM
5339             0x1A5F,   // 1A5F      ; UNKNOWN
5340             0x1A60,   // 1A60..1A7C; TAI_THAM
5341             0x1A7D,   // 1A7D..1A7E; UNKNOWN
5342             0x1A7F,   // 1A7F..1A89; TAI_THAM
5343             0x1A8A,   // 1A8A..1A8F; UNKNOWN
5344             0x1A90,   // 1A90..1A99; TAI_THAM
5345             0x1A9A,   // 1A9A..1A9F; UNKNOWN
5346             0x1AA0,   // 1AA0..1AAD; TAI_THAM
5347             0x1AAE,   // 1AAE..1AAF; UNKNOWN
5348             0x1AB0,   // 1AB0..1ABE; INHERITED
5349             0x1ABF,   // 1ABF..1AFF; UNKNOWN
5350             0x1B00,   // 1B00..1B4B; BALINESE
5351             0x1B4C,   // 1B4C..1B4F; UNKNOWN
5352             0x1B50,   // 1B50..1B7C; BALINESE
5353             0x1B7D,   // 1B7D..1B7F; UNKNOWN
5354             0x1B80,   // 1B80..1BBF; SUNDANESE
5355             0x1BC0,   // 1BC0..1BF3; BATAK
5356             0x1BF4,   // 1BF4..1BFB; UNKNOWN
5357             0x1BFC,   // 1BFC..1BFF; BATAK
5358             0x1C00,   // 1C00..1C37; LEPCHA
5359             0x1C38,   // 1C38..1C3A; UNKNOWN
5360             0x1C3B,   // 1C3B..1C49; LEPCHA
5361             0x1C4A,   // 1C4A..1C4C; UNKNOWN
5362             0x1C4D,   // 1C4D..1C4F; LEPCHA
5363             0x1C50,   // 1C50..1C7F; OL_CHIKI
5364             0x1C80,   // 1C80..1C88; CYRILLIC
5365             0x1C89,   // 1C89      ; UNKNOWN
5366             0x1C90,   // 1C90..1CBA; GEORGIAN
5367             0x1CBB,   // 1CBB..1CBC; UNKNOWN
5368             0x1CBD,   // 1CBD..1CBF; GEORGIAN
5369             0x1CC0,   // 1CC0..1CC7; SUNDANESE
5370             0x1CC8,   // 1CC8..1CCF; UNKNOWN
5371             0x1CD0,   // 1CD0..1CD2; INHERITED
5372             0x1CD3,   // 1CD3      ; COMMON
5373             0x1CD4,   // 1CD4..1CE0; INHERITED
5374             0x1CE1,   // 1CE1      ; COMMON
5375             0x1CE2,   // 1CE2..1CE8; INHERITED
5376             0x1CE9,   // 1CE9..1CEC; COMMON
5377             0x1CED,   // 1CED      ; INHERITED
5378             0x1CEE,   // 1CEE..1CF3; COMMON
5379             0x1CF4,   // 1CF4      ; INHERITED
5380             0x1CF5,   // 1CF5..1CF7; COMMON
5381             0x1CF8,   // 1CF8..1CF9; INHERITED
5382             0x1CFA,   // 1CFA..1CFF; UNKNOWN
5383             0x1D00,   // 1D00..1D25; LATIN
5384             0x1D26,   // 1D26..1D2A; GREEK
5385             0x1D2B,   // 1D2B      ; CYRILLIC
5386             0x1D2C,   // 1D2C..1D5C; LATIN
5387             0x1D5D,   // 1D5D..1D61; GREEK
5388             0x1D62,   // 1D62..1D65; LATIN
5389             0x1D66,   // 1D66..1D6A; GREEK
5390             0x1D6B,   // 1D6B..1D77; LATIN
5391             0x1D78,   // 1D78      ; CYRILLIC
5392             0x1D79,   // 1D79..1DBE; LATIN
5393             0x1DBF,   // 1DBF      ; GREEK
5394             0x1DC0,   // 1DC0..1DF9; INHERITED
5395             0x1DFA,   // 1DFA      ; UNKNOWN
5396             0x1DFB,   // 1DFB..1DFF; INHERITED
5397             0x1E00,   // 1E00..1EFF; LATIN
5398             0x1F00,   // 1F00..1F15; GREEK
5399             0x1F16,   // 1F16..1F17; UNKNOWN
5400             0x1F18,   // 1F18..1F1D; GREEK
5401             0x1F1E,   // 1F1E..1F1F; UNKNOWN
5402             0x1F20,   // 1F20..1F45; GREEK
5403             0x1F46,   // 1F46..1F47; UNKNOWN
5404             0x1F48,   // 1F48..1F4D; GREEK
5405             0x1F4E,   // 1F4E..1F4F; UNKNOWN
5406             0x1F50,   // 1F50..1F57; GREEK
5407             0x1F58,   // 1F58      ; UNKNOWN
5408             0x1F59,   // 1F59      ; GREEK
5409             0x1F5A,   // 1F5A      ; UNKNOWN
5410             0x1F5B,   // 1F5B      ; GREEK
5411             0x1F5C,   // 1F5C      ; UNKNOWN
5412             0x1F5D,   // 1F5D      ; GREEK
5413             0x1F5E,   // 1F5E      ; UNKNOWN
5414             0x1F5F,   // 1F5F..1F7D; GREEK
5415             0x1F7E,   // 1F7E..1F7F; UNKNOWN
5416             0x1F80,   // 1F80..1FB4; GREEK
5417             0x1FB5,   // 1FB5      ; UNKNOWN
5418             0x1FB6,   // 1FB6..1FC4; GREEK
5419             0x1FC5,   // 1FC5      ; UNKNOWN
5420             0x1FC6,   // 1FC6..1FD3; GREEK
5421             0x1FD4,   // 1FD4..1FD5; UNKNOWN
5422             0x1FD6,   // 1FD6..1FDB; GREEK
5423             0x1FDC,   // 1FDC      ; UNKNOWN
5424             0x1FDD,   // 1FDD..1FEF; GREEK
5425             0x1FF0,   // 1FF0..1FF1; UNKNOWN
5426             0x1FF2,   // 1FF2..1FF4; GREEK
5427             0x1FF5,   // 1FF5      ; UNKNOWN
5428             0x1FF6,   // 1FF6..1FFE; GREEK
5429             0x1FFF,   // 1FFF      ; UNKNOWN
5430             0x2000,   // 2000..200B; COMMON
5431             0x200C,   // 200C..200D; INHERITED
5432             0x200E,   // 200E..2064; COMMON
5433             0x2065,   // 2065      ; UNKNOWN
5434             0x2066,   // 2066..2070; COMMON
5435             0x2071,   // 2071      ; LATIN
5436             0x2072,   // 2072..2073; UNKNOWN
5437             0x2074,   // 2074..207E; COMMON
5438             0x207F,   // 207F      ; LATIN
5439             0x2080,   // 2080..208E; COMMON
5440             0x208F,   // 208F      ; UNKNOWN
5441             0x2090,   // 2090..209C; LATIN
5442             0x209D,   // 209D..209F; UNKNOWN
5443             0x20A0,   // 20A0..20BF; COMMON
5444             0x20C0,   // 20C0..20CF; UNKNOWN
5445             0x20D0,   // 20D0..20F0; INHERITED
5446             0x20F1,   // 20F1..20FF; UNKNOWN
5447             0x2100,   // 2100..2125; COMMON
5448             0x2126,   // 2126      ; GREEK
5449             0x2127,   // 2127..2129; COMMON
5450             0x212A,   // 212A..212B; LATIN
5451             0x212C,   // 212C..2131; COMMON
5452             0x2132,   // 2132      ; LATIN
5453             0x2133,   // 2133..214D; COMMON
5454             0x214E,   // 214E      ; LATIN
5455             0x214F,   // 214F..215F; COMMON
5456             0x2160,   // 2160..2188; LATIN
5457             0x2189,   // 2189..218B; COMMON
5458             0x218C,   // 218C..218F; UNKNOWN
5459             0x2190,   // 2190..2426; COMMON
5460             0x2427,   // 2427..243F; UNKNOWN
5461             0x2440,   // 2440..244A; COMMON
5462             0x244B,   // 244B..245F; UNKNOWN
5463             0x2460,   // 2460..27FF; COMMON
5464             0x2800,   // 2800..28FF; BRAILLE
5465             0x2900,   // 2900..2B73; COMMON
5466             0x2B74,   // 2B74..2B75; UNKNOWN
5467             0x2B76,   // 2B76..2B95; COMMON
5468             0x2B96,   // 2B96..2B97; UNKNOWN
5469             0x2B98,   // 2B98..2BC8; COMMON
5470             0x2BC9,   // 2BC9      ; UNKNOWN
5471             0x2BCA,   // 2BCA..2BFE; COMMON
5472             0x2BFF,   // 2BFF;       UNKNOWN
5473             0x2C00,   // 2C00..2C2E; GLAGOLITIC
5474             0x2C2F,   // 2C2F      ; UNKNOWN
5475             0x2C30,   // 2C30..2C5E; GLAGOLITIC
5476             0x2C5F,   // 2C5F      ; UNKNOWN
5477             0x2C60,   // 2C60..2C7F; LATIN
5478             0x2C80,   // 2C80..2CF3; COPTIC
5479             0x2CF4,   // 2CF4..2CF8; UNKNOWN
5480             0x2CF9,   // 2CF9..2CFF; COPTIC
5481             0x2D00,   // 2D00..2D25; GEORGIAN
5482             0x2D26,   // 2D26      ; UNKNOWN
5483             0x2D27,   // 2D27      ; GEORGIAN
5484             0x2D28,   // 2D28..2D2C; UNKNOWN
5485             0x2D2D,   // 2D2D      ; GEORGIAN
5486             0x2D2E,   // 2D2E..2D2F; UNKNOWN
5487             0x2D30,   // 2D30..2D67; TIFINAGH
5488             0x2D68,   // 2D68..2D6E; UNKNOWN
5489             0x2D6F,   // 2D6F..2D70; TIFINAGH
5490             0x2D71,   // 2D71..2D7E; UNKNOWN
5491             0x2D7F,   // 2D7F      ; TIFINAGH
5492             0x2D80,   // 2D80..2D96; ETHIOPIC
5493             0x2D97,   // 2D97..2D9F; UNKNOWN
5494             0x2DA0,   // 2DA0..2DA6; ETHIOPIC
5495             0x2DA7,   // 2DA7      ; UNKNOWN
5496             0x2DA8,   // 2DA8..2DAE; ETHIOPIC
5497             0x2DAF,   // 2DAF      ; UNKNOWN
5498             0x2DB0,   // 2DB0..2DB6; ETHIOPIC
5499             0x2DB7,   // 2DB7      ; UNKNOWN
5500             0x2DB8,   // 2DB8..2DBE; ETHIOPIC
5501             0x2DBF,   // 2DBF      ; UNKNOWN
5502             0x2DC0,   // 2DC0..2DC6; ETHIOPIC
5503             0x2DC7,   // 2DC7      ; UNKNOWN
5504             0x2DC8,   // 2DC8..2DCE; ETHIOPIC
5505             0x2DCF,   // 2DCF      ; UNKNOWN
5506             0x2DD0,   // 2DD0..2DD6; ETHIOPIC
5507             0x2DD7,   // 2DD7      ; UNKNOWN
5508             0x2DD8,   // 2DD8..2DDE; ETHIOPIC
5509             0x2DDF,   // 2DDF      ; UNKNOWN
5510             0x2DE0,   // 2DE0..2DFF; CYRILLIC
5511             0x2E00,   // 2E00..2E4E; COMMON
5512             0x2E4F,   // 2E4F..2E7F; UNKNOWN
5513             0x2E80,   // 2E80..2E99; HAN
5514             0x2E9A,   // 2E9A      ; UNKNOWN
5515             0x2E9B,   // 2E9B..2EF3; HAN
5516             0x2EF4,   // 2EF4..2EFF; UNKNOWN
5517             0x2F00,   // 2F00..2FD5; HAN
5518             0x2FD6,   // 2FD6..2FEF; UNKNOWN
5519             0x2FF0,   // 2FF0..2FFB; COMMON
5520             0x2FFC,   // 2FFC..2FFF; UNKNOWN
5521             0x3000,   // 3000..3004; COMMON
5522             0x3005,   // 3005      ; HAN
5523             0x3006,   // 3006      ; COMMON
5524             0x3007,   // 3007      ; HAN
5525             0x3008,   // 3008..3020; COMMON
5526             0x3021,   // 3021..3029; HAN
5527             0x302A,   // 302A..302D; INHERITED
5528             0x302E,   // 302E..302F; HANGUL
5529             0x3030,   // 3030..3037; COMMON
5530             0x3038,   // 3038..303B; HAN
5531             0x303C,   // 303C..303F; COMMON
5532             0x3040,   // 3040      ; UNKNOWN
5533             0x3041,   // 3041..3096; HIRAGANA
5534             0x3097,   // 3097..3098; UNKNOWN
5535             0x3099,   // 3099..309A; INHERITED
5536             0x309B,   // 309B..309C; COMMON
5537             0x309D,   // 309D..309F; HIRAGANA
5538             0x30A0,   // 30A0      ; COMMON
5539             0x30A1,   // 30A1..30FA; KATAKANA
5540             0x30FB,   // 30FB..30FC; COMMON
5541             0x30FD,   // 30FD..30FF; KATAKANA
5542             0x3100,   // 3100..3104; UNKNOWN
5543             0x3105,   // 3105..312F; BOPOMOFO
5544             0x3130,   // 3130;       UNKNOWN
5545             0x3131,   // 3131..318E; HANGUL
5546             0x318F,   // 318F      ; UNKNOWN
5547             0x3190,   // 3190..319F; COMMON
5548             0x31A0,   // 31A0..31BA; BOPOMOFO
5549             0x31BB,   // 31BB..31BF; UNKNOWN
5550             0x31C0,   // 31C0..31E3; COMMON
5551             0x31E4,   // 31E4..31EF; UNKNOWN
5552             0x31F0,   // 31F0..31FF; KATAKANA
5553             0x3200,   // 3200..321E; HANGUL
5554             0x321F,   // 321F      ; UNKNOWN
5555             0x3220,   // 3220..325F; COMMON
5556             0x3260,   // 3260..327E; HANGUL
5557             0x327F,   // 327F..32CF; COMMON
5558             0x32D0,   // 32D0..32FE; KATAKANA
5559             0x32FF,   // 32FF      ; COMMON
5560             0x3300,   // 3300..3357; KATAKANA
5561             0x3358,   // 3358..33FF; COMMON
5562             0x3400,   // 3400..4DB5; HAN
5563             0x4DB6,   // 4DB6..4DBF; UNKNOWN
5564             0x4DC0,   // 4DC0..4DFF; COMMON
5565             0x4E00,   // 4E00..9FEF; HAN
5566             0x9FF0,   // 9FF0..9FFF; UNKNOWN
5567             0xA000,   // A000..A48C; YI
5568             0xA48D,   // A48D..A48F; UNKNOWN
5569             0xA490,   // A490..A4C6; YI
5570             0xA4C7,   // A4C7..A4CF; UNKNOWN
5571             0xA4D0,   // A4D0..A4FF; LISU
5572             0xA500,   // A500..A62B; VAI
5573             0xA62C,   // A62C..A63F; UNKNOWN
5574             0xA640,   // A640..A69F; CYRILLIC
5575             0xA6A0,   // A6A0..A6F7; BAMUM
5576             0xA6F8,   // A6F8..A6FF; UNKNOWN
5577             0xA700,   // A700..A721; COMMON
5578             0xA722,   // A722..A787; LATIN
5579             0xA788,   // A788..A78A; COMMON
5580             0xA78B,   // A78B..A7B9; LATIN
5581             0xA7C0,   // A7C0..A7F6; UNKNOWN
5582             0xA7F7,   // A7F7..A7FF; LATIN
5583             0xA800,   // A800..A82B; SYLOTI_NAGRI
5584             0xA82C,   // A82C..A82F; UNKNOWN
5585             0xA830,   // A830..A839; COMMON
5586             0xA83A,   // A83A..A83F; UNKNOWN
5587             0xA840,   // A840..A877; PHAGS_PA
5588             0xA878,   // A878..A87F; UNKNOWN
5589             0xA880,   // A880..A8C5; SAURASHTRA
5590             0xA8C6,   // A8C6..A8CD; UNKNOWN
5591             0xA8CE,   // A8CE..A8D9; SAURASHTRA
5592             0xA8DA,   // A8DA..A8DF; UNKNOWN
5593             0xA8E0,   // A8E0..A8FF; DEVANAGARI
5594             0xA900,   // A900..A92D; KAYAH_LI
5595             0xA92E,   // A92E      ; COMMON
5596             0xA92F,   // A92F      ; KAYAH_LI
5597             0xA930,   // A930..A953; REJANG
5598             0xA954,   // A954..A95E; UNKNOWN
5599             0xA95F,   // A95F      ; REJANG
5600             0xA960,   // A960..A97C; HANGUL
5601             0xA97D,   // A97D..A97F; UNKNOWN
5602             0xA980,   // A980..A9CD; JAVANESE
5603             0xA9CE,   // A9CE      ; UNKNOWN
5604             0xA9CF,   // A9CF      ; COMMON
5605             0xA9D0,   // A9D0..A9D9; JAVANESE
5606             0xA9DA,   // A9DA..A9DD; UNKNOWN
5607             0xA9DE,   // A9DE..A9DF; JAVANESE
5608             0xA9E0,   // A9E0..A9FE; MYANMAR
5609             0xA9FF,   // A9FF      ; UNKNOWN
5610             0xAA00,   // AA00..AA36; CHAM
5611             0xAA37,   // AA37..AA3F; UNKNOWN
5612             0xAA40,   // AA40..AA4D; CHAM
5613             0xAA4E,   // AA4E..AA4F; UNKNOWN
5614             0xAA50,   // AA50..AA59; CHAM
5615             0xAA5A,   // AA5A..AA5B; UNKNOWN
5616             0xAA5C,   // AA5C..AA5F; CHAM
5617             0xAA60,   // AA60..AA7F; MYANMAR
5618             0xAA80,   // AA80..AAC2; TAI_VIET
5619             0xAAC3,   // AAC3..AADA; UNKNOWN
5620             0xAADB,   // AADB..AADF; TAI_VIET
5621             0xAAE0,   // AAE0..AAF6; MEETEI_MAYEK
5622             0xAAF7,   // AAF7..AB00; UNKNOWN
5623             0xAB01,   // AB01..AB06; ETHIOPIC
5624             0xAB07,   // AB07..AB08; UNKNOWN
5625             0xAB09,   // AB09..AB0E; ETHIOPIC
5626             0xAB0F,   // AB0F..AB10; UNKNOWN
5627             0xAB11,   // AB11..AB16; ETHIOPIC
5628             0xAB17,   // AB17..AB1F; UNKNOWN
5629             0xAB20,   // AB20..AB26; ETHIOPIC
5630             0xAB27,   // AB27      ; UNKNOWN
5631             0xAB28,   // AB28..AB2E; ETHIOPIC
5632             0xAB2F,   // AB2F      ; UNKNOWN
5633             0xAB30,   // AB30..AB5A; LATIN
5634             0xAB5B,   // AB5B      ; COMMON
5635             0xAB5C,   // AB5C..AB64; LATIN
5636             0xAB65,   // AB65      ; GREEK
5637             0xAB66,   // AB66..AB6F; UNKNOWN
5638             0xAB70,   // AB70..ABBF; CHEROKEE
5639             0xABC0,   // ABC0..ABED; MEETEI_MAYEK
5640             0xABEE,   // ABEE..ABEF; UNKNOWN
5641             0xABF0,   // ABF0..ABF9; MEETEI_MAYEK
5642             0xABFA,   // ABFA..ABFF; UNKNOWN
5643             0xAC00,   // AC00..D7A3; HANGUL
5644             0xD7A4,   // D7A4..D7AF; UNKNOWN
5645             0xD7B0,   // D7B0..D7C6; HANGUL
5646             0xD7C7,   // D7C7..D7CA; UNKNOWN
5647             0xD7CB,   // D7CB..D7FB; HANGUL
5648             0xD7FC,   // D7FC..F8FF; UNKNOWN
5649             0xF900,   // F900..FA6D; HAN
5650             0xFA6E,   // FA6E..FA6F; UNKNOWN
5651             0xFA70,   // FA70..FAD9; HAN
5652             0xFADA,   // FADA..FAFF; UNKNOWN
5653             0xFB00,   // FB00..FB06; LATIN
5654             0xFB07,   // FB07..FB12; UNKNOWN
5655             0xFB13,   // FB13..FB17; ARMENIAN
5656             0xFB18,   // FB18..FB1C; UNKNOWN
5657             0xFB1D,   // FB1D..FB36; HEBREW
5658             0xFB37,   // FB37      ; UNKNOWN
5659             0xFB38,   // FB38..FB3C; HEBREW
5660             0xFB3D,   // FB3D      ; UNKNOWN
5661             0xFB3E,   // FB3E      ; HEBREW
5662             0xFB3F,   // FB3F      ; UNKNOWN
5663             0xFB40,   // FB40..FB41; HEBREW
5664             0xFB42,   // FB42      ; UNKNOWN
5665             0xFB43,   // FB43..FB44; HEBREW
5666             0xFB45,   // FB45      ; UNKNOWN
5667             0xFB46,   // FB46..FB4F; HEBREW
5668             0xFB50,   // FB50..FBC1; ARABIC
5669             0xFBC2,   // FBC2..FBD2; UNKNOWN
5670             0xFBD3,   // FBD3..FD3D; ARABIC
5671             0xFD3E,   // FD3E..FD3F; COMMON
5672             0xFD40,   // FD40..FD4F; UNKNOWN
5673             0xFD50,   // FD50..FD8F; ARABIC
5674             0xFD90,   // FD90..FD91; UNKNOWN
5675             0xFD92,   // FD92..FDC7; ARABIC
5676             0xFDC8,   // FDC8..FDEF; UNKNOWN
5677             0xFDF0,   // FDF0..FDFD; ARABIC
5678             0xFDFE,   // FDFE..FDFF; UNKNOWN
5679             0xFE00,   // FE00..FE0F; INHERITED
5680             0xFE10,   // FE10..FE19; COMMON
5681             0xFE1A,   // FE1A..FE1F; UNKNOWN
5682             0xFE20,   // FE20..FE2D; INHERITED
5683             0xFE2E,   // FE2E..FE2F; CYRILLIC
5684             0xFE30,   // FE30..FE52; COMMON
5685             0xFE53,   // FE53      ; UNKNOWN
5686             0xFE54,   // FE54..FE66; COMMON
5687             0xFE67,   // FE67      ; UNKNOWN
5688             0xFE68,   // FE68..FE6B; COMMON
5689             0xFE6C,   // FE6C..FE6F; UNKNOWN
5690             0xFE70,   // FE70..FE74; ARABIC
5691             0xFE75,   // FE75      ; UNKNOWN
5692             0xFE76,   // FE76..FEFC; ARABIC
5693             0xFEFD,   // FEFD..FEFE; UNKNOWN
5694             0xFEFF,   // FEFF      ; COMMON
5695             0xFF00,   // FF00      ; UNKNOWN
5696             0xFF01,   // FF01..FF20; COMMON
5697             0xFF21,   // FF21..FF3A; LATIN
5698             0xFF3B,   // FF3B..FF40; COMMON
5699             0xFF41,   // FF41..FF5A; LATIN
5700             0xFF5B,   // FF5B..FF65; COMMON
5701             0xFF66,   // FF66..FF6F; KATAKANA
5702             0xFF70,   // FF70      ; COMMON
5703             0xFF71,   // FF71..FF9D; KATAKANA
5704             0xFF9E,   // FF9E..FF9F; COMMON
5705             0xFFA0,   // FFA0..FFBE; HANGUL
5706             0xFFBF,   // FFBF..FFC1; UNKNOWN
5707             0xFFC2,   // FFC2..FFC7; HANGUL
5708             0xFFC8,   // FFC8..FFC9; UNKNOWN
5709             0xFFCA,   // FFCA..FFCF; HANGUL
5710             0xFFD0,   // FFD0..FFD1; UNKNOWN
5711             0xFFD2,   // FFD2..FFD7; HANGUL
5712             0xFFD8,   // FFD8..FFD9; UNKNOWN
5713             0xFFDA,   // FFDA..FFDC; HANGUL
5714             0xFFDD,   // FFDD..FFDF; UNKNOWN
5715             0xFFE0,   // FFE0..FFE6; COMMON
5716             0xFFE7,   // FFE7      ; UNKNOWN
5717             0xFFE8,   // FFE8..FFEE; COMMON
5718             0xFFEF,   // FFEF..FFF8; UNKNOWN
5719             0xFFF9,   // FFF9..FFFD; COMMON
5720             0xFFFE,   // FFFE..FFFF; UNKNOWN
5721             0x10000,  // 10000..1000B; LINEAR_B
5722             0x1000C,  // 1000C       ; UNKNOWN
5723             0x1000D,  // 1000D..10026; LINEAR_B
5724             0x10027,  // 10027       ; UNKNOWN
5725             0x10028,  // 10028..1003A; LINEAR_B
5726             0x1003B,  // 1003B       ; UNKNOWN
5727             0x1003C,  // 1003C..1003D; LINEAR_B
5728             0x1003E,  // 1003E       ; UNKNOWN
5729             0x1003F,  // 1003F..1004D; LINEAR_B
5730             0x1004E,  // 1004E..1004F; UNKNOWN
5731             0x10050,  // 10050..1005D; LINEAR_B
5732             0x1005E,  // 1005E..1007F; UNKNOWN
5733             0x10080,  // 10080..100FA; LINEAR_B
5734             0x100FB,  // 100FB..100FF; UNKNOWN
5735             0x10100,  // 10100..10102; COMMON
5736             0x10103,  // 10103..10106; UNKNOWN
5737             0x10107,  // 10107..10133; COMMON
5738             0x10134,  // 10134..10136; UNKNOWN
5739             0x10137,  // 10137..1013F; COMMON
5740             0x10140,  // 10140..1018E; GREEK
5741             0x1018F,  // 1018F       ; UNKNOWN
5742             0x10190,  // 10190..1019B; COMMON
5743             0x1019C,  // 1019C..1019F; UNKNOWN
5744             0x101A0,  // 101A0       ; GREEK
5745             0x101A1,  // 101A1..101CF; UNKNOWN
5746             0x101D0,  // 101D0..101FC; COMMON
5747             0x101FD,  // 101FD       ; INHERITED
5748             0x101FE,  // 101FE..1027F; UNKNOWN
5749             0x10280,  // 10280..1029C; LYCIAN
5750             0x1029D,  // 1029D..1029F; UNKNOWN
5751             0x102A0,  // 102A0..102D0; CARIAN
5752             0x102D1,  // 102D1..102DF; UNKNOWN
5753             0x102E0,  // 102E0       ; INHERITED
5754             0x102E1,  // 102E1..102FB; COMMON
5755             0x102FC,  // 102FC..102FF; UNKNOWN
5756             0x10300,  // 10300..10323; OLD_ITALIC
5757             0x10324,  // 10324..1032C; UNKNOWN
5758             0x1032D,  // 1032D..1032F; OLD_ITALIC
5759             0x10330,  // 10330..1034A; GOTHIC
5760             0x1034B,  // 1034B..1034F; UNKNOWN
5761             0x10350,  // 10350..1037A; OLD_PERMIC
5762             0x1037B,  // 1037B..1037F; UNKNOWN
5763             0x10380,  // 10380..1039D; UGARITIC
5764             0x1039E,  // 1039E       ; UNKNOWN
5765             0x1039F,  // 1039F       ; UGARITIC
5766             0x103A0,  // 103A0..103C3; OLD_PERSIAN
5767             0x103C4,  // 103C4..103C7; UNKNOWN
5768             0x103C8,  // 103C8..103D5; OLD_PERSIAN
5769             0x103D6,  // 103D6..103FF; UNKNOWN
5770             0x10400,  // 10400..1044F; DESERET
5771             0x10450,  // 10450..1047F; SHAVIAN
5772             0x10480,  // 10480..1049D; OSMANYA
5773             0x1049E,  // 1049E..1049F; UNKNOWN
5774             0x104A0,  // 104A0..104A9; OSMANYA
5775             0x104AA,  // 104AA..104AF; UNKNOWN
5776             0x104B0,  // 104B0..104D3; OSAGE
5777             0x104D4,  // 104D4..104D7; UNKNOWN
5778             0x104D8,  // 104D8..104FB; OSAGE
5779             0x104FC,  // 104FC..104FF; UNKNOWN
5780             0x10500,  // 10500..10527; ELBASAN
5781             0x10528,  // 10528..1052F; UNKNOWN
5782             0x10530,  // 10530..10563; CAUCASIAN_ALBANIAN
5783             0x10564,  // 10564..1056E; UNKNOWN
5784             0x1056F,  // 1056F       ; CAUCASIAN_ALBANIAN
5785             0x10570,  // 10570..105FF; UNKNOWN
5786             0x10600,  // 10600..10736; LINEAR_A
5787             0x10737,  // 10737..1073F; UNKNOWN
5788             0x10740,  // 10740..10755; LINEAR_A
5789             0x10756,  // 10756..1075F; UNKNOWN
5790             0x10760,  // 10760..10767; LINEAR_A
5791             0x10768,  // 10768..107FF; UNKNOWN
5792             0x10800,  // 10800..10805; CYPRIOT
5793             0x10806,  // 10806..10807; UNKNOWN
5794             0x10808,  // 10808       ; CYPRIOT
5795             0x10809,  // 10809       ; UNKNOWN
5796             0x1080A,  // 1080A..10835; CYPRIOT
5797             0x10836,  // 10836       ; UNKNOWN
5798             0x10837,  // 10837..10838; CYPRIOT
5799             0x10839,  // 10839..1083B; UNKNOWN
5800             0x1083C,  // 1083C       ; CYPRIOT
5801             0x1083D,  // 1083D..1083E; UNKNOWN
5802             0x1083F,  // 1083F       ; CYPRIOT
5803             0x10840,  // 10840..10855; IMPERIAL_ARAMAIC
5804             0x10856,  // 10856       ; UNKNOWN
5805             0x10857,  // 10857..1085F; IMPERIAL_ARAMAIC
5806             0x10860,  // 10860..1087F; PALMYRENE
5807             0x10880,  // 10880..1089E; NABATAEAN
5808             0x1089F,  // 1089F..108A6; UNKNOWN
5809             0x108A7,  // 108A7..108AF; NABATAEAN
5810             0x108B0,  // 108B0..108DF; UNKNOWN
5811             0x108E0,  // 108E0..108F2; HATRAN
5812             0x108F3,  // 108F3       ; UNKNOWN
5813             0x108F4,  // 108F4..108F5; HATRAN
5814             0x108F6,  // 108F6..108FA; UNKNOWN
5815             0x108FB,  // 108FB..108FF; HATRAN
5816             0x10900,  // 10900..1091B; PHOENICIAN
5817             0x1091C,  // 1091C..1091E; UNKNOWN
5818             0x1091F,  // 1091F       ; PHOENICIAN
5819             0x10920,  // 10920..10939; LYDIAN
5820             0x1093A,  // 1093A..1093E; UNKNOWN
5821             0x1093F,  // 1093F       ; LYDIAN
5822             0x10940,  // 10940..1097F; UNKNOWN
5823             0x10980,  // 10980..1099F; MEROITIC_HIEROGLYPHS
5824             0x109A0,  // 109A0..109B7; MEROITIC_CURSIVE
5825             0x109B8,  // 109B8..109BB; UNKNOWN
5826             0x109BC,  // 109BC..109CF; MEROITIC_CURSIVE
5827             0x109D0,  // 109D0..109D1; UNKNOWN
5828             0x109D2,  // 109D2..109FF; MEROITIC_CURSIVE
5829             0x10A00,  // 10A00..10A03; KHAROSHTHI
5830             0x10A04,  // 10A04       ; UNKNOWN
5831             0x10A05,  // 10A05..10A06; KHAROSHTHI
5832             0x10A07,  // 10A07..10A0B; UNKNOWN
5833             0x10A0C,  // 10A0C..10A13; KHAROSHTHI
5834             0x10A14,  // 10A14       ; UNKNOWN
5835             0x10A15,  // 10A15..10A17; KHAROSHTHI
5836             0x10A18,  // 10A18       ; UNKNOWN
5837             0x10A19,  // 10A19..10A35; KHAROSHTHI
5838             0x10A36,  // 10A36..10A37; UNKNOWN
5839             0x10A38,  // 10A38..10A3A; KHAROSHTHI
5840             0x10A3B,  // 10A3B..10A3E; UNKNOWN
5841             0x10A3F,  // 10A3F..10A48; KHAROSHTHI
5842             0x10A49,  // 10A49..10A4F; UNKNOWN
5843             0x10A50,  // 10A50..10A58; KHAROSHTHI
5844             0x10A59,  // 10A59..10A5F; UNKNOWN
5845             0x10A60,  // 10A60..10A7F; OLD_SOUTH_ARABIAN
5846             0x10A80,  // 10A80..10A9F; OLD_NORTH_ARABIAN
5847             0x10AA0,  // 10AA0..10ABF; UNKNOWN
5848             0x10AC0,  // 10AC0..10AE6; MANICHAEAN
5849             0x10AE7,  // 10AE7..10AEA; UNKNOWN
5850             0x10AEB,  // 10AEB..10AF6; MANICHAEAN
5851             0x10AF7,  // 10AF7..10AFF; UNKNOWN
5852             0x10B00,  // 10B00..10B35; AVESTAN
5853             0x10B36,  // 10B36..10B38; UNKNOWN
5854             0x10B39,  // 10B39..10B3F; AVESTAN
5855             0x10B40,  // 10B40..10B55; INSCRIPTIONAL_PARTHIAN
5856             0x10B56,  // 10B56..10B57; UNKNOWN
5857             0x10B58,  // 10B58..10B5F; INSCRIPTIONAL_PARTHIAN
5858             0x10B60,  // 10B60..10B72; INSCRIPTIONAL_PAHLAVI
5859             0x10B73,  // 10B73..10B77; UNKNOWN
5860             0x10B78,  // 10B78..10B7F; INSCRIPTIONAL_PAHLAVI
5861             0x10B80,  // 10B80..10B91; PSALTER_PAHLAVI
5862             0x10B92,  // 10B92..10B98; UNKNOWN
5863             0x10B99,  // 10B99..10B9C; PSALTER_PAHLAVI
5864             0x10B9D,  // 10B9D..10BA8; UNKNOWN
5865             0x10BA9,  // 10BA9..10BAF; PSALTER_PAHLAVI
5866             0x10BB0,  // 10BB0..10BFF; UNKNOWN
5867             0x10C00,  // 10C00..10C48; OLD_TURKIC
5868             0x10C49,  // 10C49..10C7F; UNKNOWN
5869             0x10C80,  // 10C80..10CB2; OLD_HUNGARIAN
5870             0x10CB3,  // 10CB3..10CBF; UNKNOWN
5871             0x10CC0,  // 10CC0..10CF2; OLD_HUNGARIAN
5872             0x10CF3,  // 10CF3..10CF9; UNKNOWN
5873             0x10CFA,  // 10CFA..10CFF; OLD_HUNGARIAN
5874             0x10D00,  // 10D00..10D27; HANIFI ROHINGYA
5875             0x10D28,  // 10D28..10D29; UNKNOWN
5876             0x10D30,  // 10D30..10D39; HANIFI ROHINGYA
5877             0x10D3A,  // 10D3A..10E5F; UNKNOWN
5878             0x10E60,  // 10E60..10E7E; ARABIC
5879             0x10E7F,  // 10E7F..10EFF; UNKNOWN
5880             0x10F00,  // 10F00..10F27; OLD SOGDIAN
5881             0x10F28,  // 10F28..10F2F; UNKNOWN
5882             0x10F30,  // 10F30..10F59; SOGDIAN
5883             0x10F5A,  // 10F5A..10FFF; UNKNOWN
5884             0x11000,  // 11000..1104D; BRAHMI
5885             0x1104E,  // 1104E..11051; UNKNOWN
5886             0x11052,  // 11052..1106F; BRAHMI
5887             0x11070,  // 11070..1107E; UNKNOWN
5888             0x1107F,  // 1107F       ; BRAHMI
5889             0x11080,  // 11080..110C1; KAITHI
5890             0x110C2,  // 110C2..110CC; UNKNOWN
5891             0x110CD,  // 110CD       ; KAITHI
5892             0x110CE,  // 110CE..110CF; UNKNOWN
5893             0x110D0,  // 110D0..110E8; SORA_SOMPENG
5894             0x110E9,  // 110E9..110EF; UNKNOWN
5895             0x110F0,  // 110F0..110F9; SORA_SOMPENG
5896             0x110FA,  // 110FA..110FF; UNKNOWN
5897             0x11100,  // 11100..11134; CHAKMA
5898             0x11135,  // 11135       ; UNKNOWN
5899             0x11136,  // 11136..11146; CHAKMA
5900             0x11147,  // 11147..1114F; UNKNOWN
5901             0x11150,  // 11150..11176; MAHAJANI
5902             0x11177,  // 11177..1117F; UNKNOWN
5903             0x11180,  // 11180..111CD; SHARADA
5904             0x111CE,  // 111CE..111CF; UNKNOWN
5905             0x111D0,  // 111D0..111DF; SHARADA
5906             0x111E0,  // 111E0       ; UNKNOWN
5907             0x111E1,  // 111E1..111F4; SINHALA
5908             0x111F5,  // 111F5..111FF; UNKNOWN
5909             0x11200,  // 11200..11211; KHOJKI
5910             0x11212,  // 11212       ; UNKNOWN
5911             0x11213,  // 11213..1123E; KHOJKI
5912             0x1123F,  // 1123F..1127F; UNKNOWN
5913             0x11280,  // 11280..11286; MULTANI
5914             0x11287,  // 11287       ; UNKNOWN
5915             0x11288,  // 11288       ; MULTANI
5916             0x11289,  // 11289       ; UNKNOWN
5917             0x1128A,  // 1128A..1128D; MULTANI
5918             0x1128E,  // 1128E       ; UNKNOWN
5919             0x1128F,  // 1128F..1129D; MULTANI
5920             0x1129E,  // 1129E       ; UNKNOWN
5921             0x1129F,  // 1129F..112A9; MULTANI
5922             0x112AA,  // 112AA..112AF; UNKNOWN
5923             0x112B0,  // 112B0..112EA; KHUDAWADI
5924             0x112EB,  // 112EB..112EF; UNKNOWN
5925             0x112F0,  // 112F0..112F9; KHUDAWADI
5926             0x112FA,  // 112FA..112FF; UNKNOWN
5927             0x11300,  // 11300..11303; GRANTHA
5928             0x11304,  // 11304       ; UNKNOWN
5929             0x11305,  // 11305..1130C; GRANTHA
5930             0x1130D,  // 1130D..1130E; UNKNOWN
5931             0x1130F,  // 1130F..11310; GRANTHA
5932             0x11311,  // 11311..11312; UNKNOWN
5933             0x11313,  // 11313..11328; GRANTHA
5934             0x11329,  // 11329       ; UNKNOWN
5935             0x1132A,  // 1132A..11330; GRANTHA
5936             0x11331,  // 11331       ; UNKNOWN
5937             0x11332,  // 11332..11333; GRANTHA
5938             0x11334,  // 11334       ; UNKNOWN
5939             0x11335,  // 11335..11339; GRANTHA
5940             0x1133A,  // 1133A       ; UNKNOWN
5941             0x1133B,  // 1133B       ; INHERITED
5942             0x1133C,  // 1133C..11344; GRANTHA
5943             0x11345,  // 11345..11346; UNKNOWN
5944             0x11347,  // 11347..11348; GRANTHA
5945             0x11349,  // 11349..1134A; UNKNOWN
5946             0x1134B,  // 1134B..1134D; GRANTHA
5947             0x1134E,  // 1134E..1134F; UNKNOWN
5948             0x11350,  // 11350       ; GRANTHA
5949             0x11351,  // 11351..11356; UNKNOWN
5950             0x11357,  // 11357       ; GRANTHA
5951             0x11358,  // 11358..1135C; UNKNOWN
5952             0x1135D,  // 1135D..11363; GRANTHA
5953             0x11364,  // 11364..11365; UNKNOWN
5954             0x11366,  // 11366..1136C; GRANTHA
5955             0x1136D,  // 1136D..1136F; UNKNOWN
5956             0x11370,  // 11370..11374; GRANTHA
5957             0x11375,  // 11375..113FF; UNKNOWN
5958             0x11400,  // 11400..11459; NEWA
5959             0x1145A,  // 1145A       ; UNKNOWN
5960             0x1145B,  // 1145B       ; NEWA
5961             0x1145C,  // 1145C       ; UNKNOWN
5962             0x1145D,  // 1145D..1145E; NEWA
5963             0x1145F,  // 1145F..1147F; UNKNOWN
5964             0x11480,  // 11480..114C7; TIRHUTA
5965             0x114C8,  // 114C8..114CF; UNKNOWN
5966             0x114D0,  // 114D0..114D9; TIRHUTA
5967             0x114DA,  // 114DA..1157F; UNKNOWN
5968             0x11580,  // 11580..115B5; SIDDHAM
5969             0x115B6,  // 115B6..115B7; UNKNOWN
5970             0x115B8,  // 115B8..115DD; SIDDHAM
5971             0x115DE,  // 115DE..115FF; UNKNOWN
5972             0x11600,  // 11600..11644; MODI
5973             0x11645,  // 11645..1164F; UNKNOWN
5974             0x11650,  // 11650..11659; MODI
5975             0x1165A,  // 1165A..1165F; UNKNOWN
5976             0x11660,  // 11660..1166C; MONGOLIAN
5977             0X1166D,  // 1166D..1167F; UNKNOWN
5978             0x11680,  // 11680..116B7; TAKRI
5979             0x116B8,  // 116B8..116BF; UNKNOWN
5980             0x116C0,  // 116C0..116C9; TAKRI
5981             0x116CA,  // 116CA..116FF; UNKNOWN
5982             0x11700,  // 11700..1171A; AHOM
5983             0x1171B,  // 1171B..1171C; UNKNOWN
5984             0x1171D,  // 1171D..1172B; AHOM
5985             0x1172C,  // 1172C..1172F; UNKNOWN
5986             0x11730,  // 11730..1173F; AHOM
5987             0x11740,  // 11740..117FF; UNKNOWN
5988             0x11800,  // 11800..1183B; DOGRA
5989             0x1183C,  // 1183C..1189F; UNKNOWN
5990             0x118A0,  // 118A0..118F2; WARANG_CITI
5991             0x118F3,  // 118F3..118FE; UNKNOWN
5992             0x118FF,  // 118FF       ; WARANG_CITI
5993             0x11900,  // 11900..119FF; UNKNOWN
5994             0x11A00,  // 11A00..11A47; ZANABAZAR_SQUARE
5995             0X11A48,  // 11A48..11A4F; UNKNOWN
5996             0x11A50,  // 11A50..11A83; SOYOMBO
5997             0x11A84,  // 11A84..11A85; UNKNOWN
5998             0x11A86,  // 11A86..11AA2; SOYOMBO
5999             0x11AA3,  // 11AA3..11ABF; UNKNOWN
6000             0x11AC0,  // 11AC0..11AF8; PAU_CIN_HAU
6001             0x11AF9,  // 11AF9..11BFF; UNKNOWN
6002             0x11C00,  // 11C00..11C08; BHAIKSUKI
6003             0x11C09,  // 11C09       ; UNKNOWN
6004             0x11C0A,  // 11C0A..11C36; BHAIKSUKI
6005             0x11C37,  // 11C37       ; UNKNOWN
6006             0x11C38,  // 11C38..11C45; BHAIKSUKI
6007             0x11C46,  // 11C46..11C49; UNKNOWN
6008             0x11C50,  // 11C50..11C6C; BHAIKSUKI
6009             0x11C6D,  // 11C6D..11C6F; UNKNOWN
6010             0x11C70,  // 11C70..11C8F; MARCHEN
6011             0x11C90,  // 11C90..11C91; UNKNOWN
6012             0x11C92,  // 11C92..11CA7; MARCHEN
6013             0x11CA8,  // 11CA8       ; UNKNOWN
6014             0x11CA9,  // 11CA9..11CB6; MARCHEN
6015             0x11CB7,  // 11CB7..11CFF; UNKNOWN
6016             0x11D00,  // 11D00..11D06; MASARAM_GONDI
6017             0x11D07,  // 11D07       ; UNKNOWN
6018             0x11D08,  // 11D08..11D09; MASARAM_GONDI
6019             0x11D0A,  // 11D0A       ; UNKNOWN
6020             0x11D0B,  // 11D0B..11D36; MASARAM_GONDI
6021             0x11D37,  // 11D37..11D39; UNKNOWN
6022             0x11D3A,  // 11D3A       ; MASARAM_GONDI
6023             0x11D3B,  // 11D3B       ; UNKNOWN
6024             0x11D3C,  // 11D3C..11D3D; MASARAM_GONDI
6025             0x11D3E,  // 11D3E       ; UNKNOWN
6026             0x11D3F,  // 11D3F..11D47; MASARAM_GONDI
6027             0x11D48,  // 11D48..11D49, UNKNOWN
6028             0x11D50,  // 11D50..11D59; MASARAM_GONDI
6029             0x11D5A,  // 11D5A..11D5F; UNKNOWN
6030             0x11D60,  // 11D60..11D68; GUNJALA GONDI
6031             0x11D69,  //             ; UNKNOWN
6032             0x11D6A,  // 11D6A..11D8E; GUNJALA GONDI
6033             0x11D8F,  //             ; UNKNOWN
6034             0x11D90,  // 11D90..11D91; GUNJALA GONDI
6035             0x11D92,  //             ; UNKNOWN
6036             0x11D93,  // 11D93..11D98; GUNJALA GONDI
6037             0x11D99,  // 11D99       ; UNKNOWN
6038             0x11DA0,  // 11DA0..11DA9; GUNJALA GONDI
6039             0x11DAA,  // 11DAA..11DFF; UNKNOWN
6040             0x11EE0,  // 11EE0..11EF8; MAKASAR
6041             0x11EF9,  // 11EF9..11FFF; UNKNOWN
6042             0x12000,  // 12000..12399; CUNEIFORM
6043             0x1239A,  // 1239A..123FF; UNKNOWN
6044             0x12400,  // 12400..1246E; CUNEIFORM
6045             0x1246F,  // 1246F       ; UNKNOWN
6046             0x12470,  // 12470..12474; CUNEIFORM
6047             0x12475,  // 12475..1247F; UNKNOWN
6048             0x12480,  // 12480..12543; CUNEIFORM
6049             0x12544,  // 12544..12FFF; UNKNOWN
6050             0x13000,  // 13000..1342E; EGYPTIAN_HIEROGLYPHS
6051             0x1342F,  // 1342F..143FF; UNKNOWN
6052             0x14400,  // 14400..14646; ANATOLIAN_HIEROGLYPHS
6053             0x14647,  // 14647..167FF; UNKNOWN
6054             0x16800,  // 16800..16A38; BAMUM
6055             0x16A39,  // 16A39..16A3F; UNKNOWN
6056             0x16A40,  // 16A40..16A5E; MRO
6057             0x16A5F,  // 16A5F       ; UNKNOWN
6058             0x16A60,  // 16A60..16A69; MRO
6059             0x16A6A,  // 16A6A..16A6D; UNKNOWN
6060             0x16A6E,  // 16A6E..16A6F; MRO
6061             0x16A70,  // 16A70..16ACF; UNKNOWN
6062             0x16AD0,  // 16AD0..16AED; BASSA_VAH
6063             0x16AEE,  // 16AEE..16AEF; UNKNOWN
6064             0x16AF0,  // 16AF0..16AF5; BASSA_VAH
6065             0x16AF6,  // 16AF6..16AFF; UNKNOWN
6066             0x16B00,  // 16B00..16B45; PAHAWH_HMONG
6067             0x16B46,  // 16B46..16B4F; UNKNOWN
6068             0x16B50,  // 16B50..16B59; PAHAWH_HMONG
6069             0x16B5A,  // 16B5A       ; UNKNOWN
6070             0x16B5B,  // 16B5B..16B61; PAHAWH_HMONG
6071             0x16B62,  // 16B62       ; UNKNOWN
6072             0x16B63,  // 16B63..16B77; PAHAWH_HMONG
6073             0x16B78,  // 16B78..16B7C; UNKNOWN
6074             0x16B7D,  // 16B7D..16B8F; PAHAWH_HMONG
6075             0x16B90,  // 16B90..16E3F; UNKNOWN
6076             0x16E40,  // 16E40..16E9A; MEDEFAIDRIN
6077             0x16E9B,  // 16E9B..16EFF; UNKNOWN
6078             0x16F00,  // 16F00..16F44; MIAO
6079             0x16F45,  // 16F45..16F4F; UNKNOWN
6080             0x16F50,  // 16F50..16F7E; MIAO
6081             0x16F7F,  // 16F7F..16F8E; UNKNOWN
6082             0x16F8F,  // 16F8F..16F9F; MIAO
6083             0x16FA0,  // 16FA0..16FDF; UNKNOWN
6084             0x16FE0,  // 16FE0       ; TANGUT
6085             0x16FE1,  // 16FE1       ; NUSHU
6086             0x16FE2,  // 16FE2..16FFF; UNKNOWN
6087             0x17000,  // 17000..187F1; TANGUT
6088             0x187F2,  // 187F2..187FF; UNKNOWN
6089             0x18800,  // 18800..18AF2; TANGUT
6090             0x18AF3,  // 18AF3..1AFFF; UNKNOWN
6091             0x1B000,  // 1B000       ; KATAKANA
6092             0x1B001,  // 1B001..1B11E; HIRAGANA
6093             0x1B11F,  // 1B11F..1B16F; UNKNOWN
6094             0x1B170,  // 1B170..1B2FB; NUSHU
6095             0x1B2FC,  // 1B2FC..1BBFF; UNKNOWN
6096             0x1BC00,  // 1BC00..1BC6A; DUPLOYAN
6097             0x1BC6B,  // 1BC6B..1BC6F; UNKNOWN
6098             0x1BC70,  // 1BC70..1BC7C; DUPLOYAN
6099             0x1BC7D,  // 1BC7D..1BC7F; UNKNOWN
6100             0x1BC80,  // 1BC80..1BC88; DUPLOYAN
6101             0x1BC89,  // 1BC89..1BC8F; UNKNOWN
6102             0x1BC90,  // 1BC90..1BC99; DUPLOYAN
6103             0x1BC9A,  // 1BC9A..1BC9B; UNKNOWN
6104             0x1BC9C,  // 1BC9C..1BC9F; DUPLOYAN
6105             0x1BCA0,  // 1BCA0..1BCA3; COMMON
6106             0x1BCA4,  // 1BCA4..1CFFF; UNKNOWN
6107             0x1D000,  // 1D000..1D0F5; COMMON
6108             0x1D0F6,  // 1D0F6..1D0FF; UNKNOWN
6109             0x1D100,  // 1D100..1D126; COMMON
6110             0x1D127,  // 1D127..1D128; UNKNOWN
6111             0x1D129,  // 1D129..1D166; COMMON
6112             0x1D167,  // 1D167..1D169; INHERITED
6113             0x1D16A,  // 1D16A..1D17A; COMMON
6114             0x1D17B,  // 1D17B..1D182; INHERITED
6115             0x1D183,  // 1D183..1D184; COMMON
6116             0x1D185,  // 1D185..1D18B; INHERITED
6117             0x1D18C,  // 1D18C..1D1A9; COMMON
6118             0x1D1AA,  // 1D1AA..1D1AD; INHERITED
6119             0x1D1AE,  // 1D1AE..1D1E8; COMMON
6120             0x1D1E9,  // 1D1E9..1D1FF; UNKNOWN
6121             0x1D200,  // 1D200..1D245; GREEK
6122             0x1D246,  // 1D246..1D2DF; UNKNOWN
6123             0x1D2E0,  // 1D2E0..1D2F3; COMMON
6124             0x1D2F4,  // 1D2F4..1D2FF; UNKNOWN
6125             0x1D300,  // 1D300..1D356; COMMON
6126             0x1D357,  // 1D357..1D35F; UNKNOWN
6127             0x1D360,  // 1D360..1D378; COMMON
6128             0x1D379,  // 1D379..1D3FF; UNKNOWN
6129             0x1D400,  // 1D400..1D454; COMMON
6130             0x1D455,  // 1D455       ; UNKNOWN
6131             0x1D456,  // 1D456..1D49C; COMMON
6132             0x1D49D,  // 1D49D       ; UNKNOWN
6133             0x1D49E,  // 1D49E..1D49F; COMMON
6134             0x1D4A0,  // 1D4A0..1D4A1; UNKNOWN
6135             0x1D4A2,  // 1D4A2       ; COMMON
6136             0x1D4A3,  // 1D4A3..1D4A4; UNKNOWN
6137             0x1D4A5,  // 1D4A5..1D4A6; COMMON
6138             0x1D4A7,  // 1D4A7..1D4A8; UNKNOWN
6139             0x1D4A9,  // 1D4A9..1D4AC; COMMON
6140             0x1D4AD,  // 1D4AD       ; UNKNOWN
6141             0x1D4AE,  // 1D4AE..1D4B9; COMMON
6142             0x1D4BA,  // 1D4BA       ; UNKNOWN
6143             0x1D4BB,  // 1D4BB       ; COMMON
6144             0x1D4BC,  // 1D4BC       ; UNKNOWN
6145             0x1D4BD,  // 1D4BD..1D4C3; COMMON
6146             0x1D4C4,  // 1D4C4       ; UNKNOWN
6147             0x1D4C5,  // 1D4C5..1D505; COMMON
6148             0x1D506,  // 1D506       ; UNKNOWN
6149             0x1D507,  // 1D507..1D50A; COMMON
6150             0x1D50B,  // 1D50B..1D50C; UNKNOWN
6151             0x1D50D,  // 1D50D..1D514; COMMON
6152             0x1D515,  // 1D515       ; UNKNOWN
6153             0x1D516,  // 1D516..1D51C; COMMON
6154             0x1D51D,  // 1D51D       ; UNKNOWN
6155             0x1D51E,  // 1D51E..1D539; COMMON
6156             0x1D53A,  // 1D53A       ; UNKNOWN
6157             0x1D53B,  // 1D53B..1D53E; COMMON
6158             0x1D53F,  // 1D53F       ; UNKNOWN
6159             0x1D540,  // 1D540..1D544; COMMON
6160             0x1D545,  // 1D545       ; UNKNOWN
6161             0x1D546,  // 1D546       ; COMMON
6162             0x1D547,  // 1D547..1D549; UNKNOWN
6163             0x1D54A,  // 1D54A..1D550; COMMON
6164             0x1D551,  // 1D551       ; UNKNOWN
6165             0x1D552,  // 1D552..1D6A5; COMMON
6166             0x1D6A6,  // 1D6A6..1D6A7; UNKNOWN
6167             0x1D6A8,  // 1D6A8..1D7CB; COMMON
6168             0x1D7CC,  // 1D7CC..1D7CD; UNKNOWN
6169             0x1D7CE,  // 1D7CE..1D7FF; COMMON
6170             0x1D800,  // 1D800..1DA8B; SIGNWRITING
6171             0x1DA8C,  // 1DA8C..1DA9A; UNKNOWN
6172             0x1DA9B,  // 1DA9B..1DA9F; SIGNWRITING
6173             0x1DAA0,  // 1DAA0       ; UNKNOWN
6174             0x1DAA1,  // 1DAA1..1DAAF; SIGNWRITING
6175             0x1DAB0,  // 1DAB0..1DFFF; UNKNOWN
6176             0x1E000,  // 1E000..1E006; GLAGOLITIC
6177             0x1E007,  // 1E007       ; UNKNOWN
6178             0x1E008,  // 1E008..1E018; GLAGOLITIC
6179             0x1E019,  // 1E019..1E01A; UNKNOWN
6180             0x1E01B,  // 1E01B..1E021; GLAGOLITIC
6181             0x1E022,  // 1E022       ; UNKNOWN
6182             0x1E023,  // 1E023..1E024; GLAGOLITIC
6183             0x1E025,  // 1E025       ; UNKNOWN
6184             0x1E026,  // 1E026..1E02A; GLAGOLITIC
6185             0x1E02B,  // 1E02B..1E7FF; UNKNOWN
6186             0x1E800,  // 1E800..1E8C4; MENDE_KIKAKUI
6187             0x1E8C5,  // 1E8C5..1E8C6; UNKNOWN
6188             0x1E8C7,  // 1E8C7..1E8D6; MENDE_KIKAKUI
6189             0x1E8D7,  // 1E8D7..1E8FF; UNKNOWN
6190             0x1E900,  // 1E900..1E94A; ADLAM
6191             0x1E94B,  // 1E94B..1E94F; UNKNOWN
6192             0x1E950,  // 1E950..1E959; ADLAM
6193             0x1E95A,  // 1E95A..1E95D; UNKNOWN
6194             0x1E95E,  // 1E95E..1E95F; ADLAM
6195             0x1E960,  // 1E960..1EC70; UNKNOWN
6196             0x1EC71,  // 1EC71..1ECB4; COMMON
6197             0x1ECB5,  // 1ECB5..1EDFF; UNKNOWN
6198             0x1EE00,  // 1EE00..1EE03; ARABIC
6199             0x1EE04,  // 1EE04       ; UNKNOWN
6200             0x1EE05,  // 1EE05..1EE1F; ARABIC
6201             0x1EE20,  // 1EE20       ; UNKNOWN
6202             0x1EE21,  // 1EE21..1EE22; ARABIC
6203             0x1EE23,  // 1EE23       ; UNKNOWN
6204             0x1EE24,  // 1EE24       ; ARABIC
6205             0x1EE25,  // 1EE25..1EE26; UNKNOWN
6206             0x1EE27,  // 1EE27       ; ARABIC
6207             0x1EE28,  // 1EE28       ; UNKNOWN
6208             0x1EE29,  // 1EE29..1EE32; ARABIC
6209             0x1EE33,  // 1EE33       ; UNKNOWN
6210             0x1EE34,  // 1EE34..1EE37; ARABIC
6211             0x1EE38,  // 1EE38       ; UNKNOWN
6212             0x1EE39,  // 1EE39       ; ARABIC
6213             0x1EE3A,  // 1EE3A       ; UNKNOWN
6214             0x1EE3B,  // 1EE3B       ; ARABIC
6215             0x1EE3C,  // 1EE3C..1EE41; UNKNOWN
6216             0x1EE42,  // 1EE42       ; ARABIC
6217             0x1EE43,  // 1EE43..1EE46; UNKNOWN
6218             0x1EE47,  // 1EE47       ; ARABIC
6219             0x1EE48,  // 1EE48       ; UNKNOWN
6220             0x1EE49,  // 1EE49       ; ARABIC
6221             0x1EE4A,  // 1EE4A       ; UNKNOWN
6222             0x1EE4B,  // 1EE4B       ; ARABIC
6223             0x1EE4C,  // 1EE4C       ; UNKNOWN
6224             0x1EE4D,  // 1EE4D..1EE4F; ARABIC
6225             0x1EE50,  // 1EE50       ; UNKNOWN
6226             0x1EE51,  // 1EE51..1EE52; ARABIC
6227             0x1EE53,  // 1EE53       ; UNKNOWN
6228             0x1EE54,  // 1EE54       ; ARABIC
6229             0x1EE55,  // 1EE55..1EE56; UNKNOWN
6230             0x1EE57,  // 1EE57       ; ARABIC
6231             0x1EE58,  // 1EE58       ; UNKNOWN
6232             0x1EE59,  // 1EE59       ; ARABIC
6233             0x1EE5A,  // 1EE5A       ; UNKNOWN
6234             0x1EE5B,  // 1EE5B       ; ARABIC
6235             0x1EE5C,  // 1EE5C       ; UNKNOWN
6236             0x1EE5D,  // 1EE5D       ; ARABIC
6237             0x1EE5E,  // 1EE5E       ; UNKNOWN
6238             0x1EE5F,  // 1EE5F       ; ARABIC
6239             0x1EE60,  // 1EE60       ; UNKNOWN
6240             0x1EE61,  // 1EE61..1EE62; ARABIC
6241             0x1EE63,  // 1EE63       ; UNKNOWN
6242             0x1EE64,  // 1EE64       ; ARABIC
6243             0x1EE65,  // 1EE65..1EE66; UNKNOWN
6244             0x1EE67,  // 1EE67..1EE6A; ARABIC
6245             0x1EE6B,  // 1EE6B       ; UNKNOWN
6246             0x1EE6C,  // 1EE6C..1EE72; ARABIC
6247             0x1EE73,  // 1EE73       ; UNKNOWN
6248             0x1EE74,  // 1EE74..1EE77; ARABIC
6249             0x1EE78,  // 1EE78       ; UNKNOWN
6250             0x1EE79,  // 1EE79..1EE7C; ARABIC
6251             0x1EE7D,  // 1EE7D       ; UNKNOWN
6252             0x1EE7E,  // 1EE7E       ; ARABIC
6253             0x1EE7F,  // 1EE7F       ; UNKNOWN
6254             0x1EE80,  // 1EE80..1EE89; ARABIC
6255             0x1EE8A,  // 1EE8A       ; UNKNOWN
6256             0x1EE8B,  // 1EE8B..1EE9B; ARABIC
6257             0x1EE9C,  // 1EE9C..1EEA0; UNKNOWN
6258             0x1EEA1,  // 1EEA1..1EEA3; ARABIC
6259             0x1EEA4,  // 1EEA4       ; UNKNOWN
6260             0x1EEA5,  // 1EEA5..1EEA9; ARABIC
6261             0x1EEAA,  // 1EEAA       ; UNKNOWN
6262             0x1EEAB,  // 1EEAB..1EEBB; ARABIC
6263             0x1EEBC,  // 1EEBC..1EEEF; UNKNOWN
6264             0x1EEF0,  // 1EEF0..1EEF1; ARABIC
6265             0x1EEF2,  // 1EEF2..1EFFF; UNKNOWN
6266             0x1F000,  // 1F000..1F02B; COMMON
6267             0x1F02C,  // 1F02C..1F02F; UNKNOWN
6268             0x1F030,  // 1F030..1F093; COMMON
6269             0x1F094,  // 1F094..1F09F; UNKNOWN
6270             0x1F0A0,  // 1F0A0..1F0AE; COMMON
6271             0x1F0AF,  // 1F0AF..1F0B0; UNKNOWN
6272             0x1F0B1,  // 1F0B1..1F0BF; COMMON
6273             0x1F0C0,  // 1F0C0       ; UNKNOWN
6274             0x1F0C1,  // 1F0C1..1F0CF; COMMON
6275             0x1F0D0,  // 1F0D0       ; UNKNOWN
6276             0x1F0D1,  // 1F0D1..1F0F5; COMMON
6277             0x1F0F6,  // 1F0F6..1F0FF; UNKNOWN
6278             0x1F100,  // 1F100..1F10C; COMMON
6279             0x1F10D,  // 1F10D..1F10F; UNKNOWN
6280             0x1F110,  // 1F110..1F16B; COMMON
6281             0x1F16C,  // 1F16C..1F16F; UNKNOWN
6282             0x1F170,  // 1F170..1F1AC; COMMON
6283             0x1F1AD,  // 1F1AD..1F1E5; UNKNOWN
6284             0x1F1E6,  // 1F1E6..1F1FF; COMMON
6285             0x1F200,  // 1F200       ; HIRAGANA
6286             0x1F201,  // 1F201..1F202; COMMON
6287             0x1F203,  // 1F203..1F20F; UNKNOWN
6288             0x1F210,  // 1F210..1F23B; COMMON
6289             0x1F23C,  // 1F23C..1F23F; UNKNOWN
6290             0x1F240,  // 1F240..1F248; COMMON
6291             0x1F249,  // 1F249..1F24F; UNKNOWN
6292             0x1F250,  // 1F250..1F251; COMMON
6293             0x1F252,  // 1F252..1F25F; UNKNOWN
6294             0x1F260,  // 1F260..1F265; COMMON
6295             0x1F266,  // 1F266..1F2FF; UNKNOWN
6296             0x1F300,  // 1F300..1F6D4; COMMON
6297             0x1F6D5,  // 1F6D5..1F6DF; UNKNOWN
6298             0x1F6E0,  // 1F6E0..1F6EC; COMMON
6299             0x1F6ED,  // 1F6ED..1F6EF; UNKNOWN
6300             0x1F6F0,  // 1F6F0..1F6F9; COMMON
6301             0x1F6FA,  // 1F6FA..1F6FF; UNKNOWN
6302             0x1F700,  // 1F700..1F773; COMMON
6303             0x1F774,  // 1F774..1F77F; UNKNOWN
6304             0x1F780,  // 1F780..1F7D8; COMMON
6305             0x1F7D9,  // 1F7D9..1F7FF; UNKNOWN
6306             0x1F800,  // 1F800..1F80B; COMMON
6307             0x1F80C,  // 1F80C..1F80F; UNKNOWN
6308             0x1F810,  // 1F810..1F847; COMMON
6309             0x1F848,  // 1F848..1F84F; UNKNOWN
6310             0x1F850,  // 1F850..1F859; COMMON
6311             0x1F85A,  // 1F85A..1F85F; UNKNOWN
6312             0x1F860,  // 1F860..1F887; COMMON
6313             0x1F888,  // 1F888..1F88F; UNKNOWN
6314             0x1F890,  // 1F890..1F8AD; COMMON
6315             0x1F8AE,  // 1F8AE..1F8FF; UNKNOWN
6316             0x1F900,  // 1F900..1F90B; COMMON
6317             0x1F90C,  // 1F90C..1F90F; UNKNOWN
6318             0x1F910,  // 1F910..1F93E; COMMON
6319             0x1F93F,  // 1F93F       ; UNKNOWN
6320             0x1F940,  // 1F940..1F970; COMMON
6321             0x1F971,  // 1F971..1F972; UNKNOWN
6322             0x1F973,  // 1F973..1F976; COMMON
6323             0x1F977,  // 1F977..1F979; UNKNOWN
6324             0x1F97A,  // 1F97A       ; COMMON
6325             0x1F97B,  // 1F97B       ; UNKNOWN
6326             0x1F97C,  // 1F97C..1F9A2; COMMON
6327             0x1F9A3,  // 1F9A3..1F9AF; UNKNOWN
6328             0x1F9B0,  // 1F9B0..1F9B9; COMMON
6329             0x1F9BA,  // 1F9BA..1F9BF; UNKNOWN
6330             0x1F9C0,  // 1F9C0..1F9C2; COMMON
6331             0x1F9C3,  // 1F9C3..1F9CF; UNKNOWN
6332             0x1F9D0,  // 1F9D0..1F9FF; COMMON
6333             0x1FA00,  // 1FA00..1FA5F; UNKNOWN
6334             0x1FA60,  // 1FA60..1FA6D; COMMON
6335             0x1FA6E,  // 1FA6E..1FFFF; UNKNOWN
6336             0x20000,  // 20000..2A6D6; HAN
6337             0x2A6D7,  // 2A6D7..2A6FF; UNKNOWN
6338             0x2A700,  // 2A700..2B734; HAN
6339             0x2B735,  // 2B735..2B73F; UNKNOWN
6340             0x2B740,  // 2B740..2B81D; HAN
6341             0x2B81E,  // 2B81E..2B81F; UNKNOWN
6342             0x2B820,  // 2B820..2CEA1; HAN
6343             0x2CEA2,  // 2CEA2..2CEAF; UNKNOWN
6344             0x2CEB0,  // 2CEB0..2EBE0; HAN
6345             0x2EBE1,  // 2EBE1..2F7FF; UNKNOWN
6346             0x2F800,  // 2F800..2FA1D; HAN
6347             0x2FA1E,  // 2FA1E..E0000; UNKNOWN
6348             0xE0001,  // E0001       ; COMMON
6349             0xE0002,  // E0002..E001F; UNKNOWN
6350             0xE0020,  // E0020..E007F; COMMON
6351             0xE0080,  // E0080..E00FF; UNKNOWN
6352             0xE0100,  // E0100..E01EF; INHERITED
6353             0xE01F0   // E01F0..10FFFF; UNKNOWN
6354         };
6355 
6356         private static final UnicodeScript[] scripts = {
6357             COMMON,                   // 0000..0040
6358             LATIN,                    // 0041..005A
6359             COMMON,                   // 005B..0060
6360             LATIN,                    // 0061..007A
6361             COMMON,                   // 007B..00A9
6362             LATIN,                    // 00AA
6363             COMMON,                   // 00AB..00B9
6364             LATIN,                    // 00BA
6365             COMMON,                   // 00BB..00BF
6366             LATIN,                    // 00C0..00D6
6367             COMMON,                   // 00D7
6368             LATIN,                    // 00D8..00F6
6369             COMMON,                   // 00F7
6370             LATIN,                    // 00F8..02B8
6371             COMMON,                   // 02B9..02DF
6372             LATIN,                    // 02E0..02E4
6373             COMMON,                   // 02E5..02E9
6374             BOPOMOFO,                 // 02EA..02EB
6375             COMMON,                   // 02EC..02FF
6376             INHERITED,                // 0300..036F
6377             GREEK,                    // 0370..0373
6378             COMMON,                   // 0374
6379             GREEK,                    // 0375..0377
6380             UNKNOWN,                  // 0378..0379
6381             GREEK,                    // 037A..037D
6382             COMMON,                   // 037E
6383             GREEK,                    // 037F
6384             UNKNOWN,                  // 0380..0383
6385             GREEK,                    // 0384
6386             COMMON,                   // 0385
6387             GREEK,                    // 0386
6388             COMMON,                   // 0387
6389             GREEK,                    // 0388..038A
6390             UNKNOWN,                  // 038B
6391             GREEK,                    // 038C
6392             UNKNOWN,                  // 038D
6393             GREEK,                    // 038E..03A1
6394             UNKNOWN,                  // 03A2
6395             GREEK,                    // 03A3..03E1
6396             COPTIC,                   // 03E2..03EF
6397             GREEK,                    // 03F0..03FF
6398             CYRILLIC,                 // 0400..0484
6399             INHERITED,                // 0485..0486
6400             CYRILLIC,                 // 0487..052F
6401             UNKNOWN,                  // 0530
6402             ARMENIAN,                 // 0531..0556
6403             UNKNOWN,                  // 0557..0558
6404             ARMENIAN,                 // 0559..0588
6405             COMMON,                   // 0589
6406             ARMENIAN,                 // 058A
6407             UNKNOWN,                  // 058B..058C
6408             ARMENIAN,                 // 058D..058F
6409             UNKNOWN,                  // 0590
6410             HEBREW,                   // 0591..05C7
6411             UNKNOWN,                  // 05C8..05CF
6412             HEBREW,                   // 05D0..05EA
6413             UNKNOWN,                  // 05EB..05EE
6414             HEBREW,                   // 05EF..05F4
6415             UNKNOWN,                  // 05F5..05FF
6416             ARABIC,                   // 0600..0604
6417             COMMON,                   // 0605
6418             ARABIC,                   // 0606..060B
6419             COMMON,                   // 060C
6420             ARABIC,                   // 060D..061A
6421             COMMON,                   // 061B
6422             ARABIC,                   // 061C
6423             UNKNOWN,                  // 061D
6424             ARABIC,                   // 061E
6425             COMMON,                   // 061F
6426             ARABIC,                   // 0620..063F
6427             COMMON,                   // 0640
6428             ARABIC,                   // 0641..064A
6429             INHERITED,                // 064B..0655
6430             ARABIC,                   // 0656..066F
6431             INHERITED,                // 0670
6432             ARABIC,                   // 0671..06DC
6433             COMMON,                   // 06DD
6434             ARABIC,                   // 06DE..06FF
6435             SYRIAC,                   // 0700..070D
6436             UNKNOWN,                  // 070E
6437             SYRIAC,                   // 070F..074A
6438             UNKNOWN,                  // 074B..074C
6439             SYRIAC,                   // 074D..074F
6440             ARABIC,                   // 0750..077F
6441             THAANA,                   // 0780..07B1
6442             UNKNOWN,                  // 07B2..07BF
6443             NKO,                      // 07C0..07FA
6444             UNKNOWN,                  // 07FB..07FC
6445             NKO,                      // 07FD..07FF
6446             SAMARITAN,                // 0800..082D
6447             UNKNOWN,                  // 082E..082F
6448             SAMARITAN,                // 0830..083E
6449             UNKNOWN,                  // 083F
6450             MANDAIC,                  // 0840..085B
6451             UNKNOWN,                  // 085C..085D
6452             MANDAIC,                  // 085E
6453             UNKNOWN,                  // 085F
6454             SYRIAC,                   // 0860..086A
6455             UNKNOWN,                  // 086B..089F
6456             ARABIC,                   // 08A0..08B4
6457             UNKNOWN,                  // 08B5
6458             ARABIC,                   // 08B6..08BD
6459             UNKNOWN,                  // 08BE..08D2
6460             ARABIC,                   // 08D3..08E1
6461             COMMON,                   // 08E2
6462             ARABIC,                   // 08E3..08FF
6463             DEVANAGARI,               // 0900..0950
6464             INHERITED,                // 0951..0952
6465             DEVANAGARI,               // 0953..0963
6466             COMMON,                   // 0964..0965
6467             DEVANAGARI,               // 0966..097F
6468             BENGALI,                  // 0980..0983
6469             UNKNOWN,                  // 0984
6470             BENGALI,                  // 0985..098C
6471             UNKNOWN,                  // 098D..098E
6472             BENGALI,                  // 098F..0990
6473             UNKNOWN,                  // 0991..0992
6474             BENGALI,                  // 0993..09A8
6475             UNKNOWN,                  // 09A9
6476             BENGALI,                  // 09AA..09B0
6477             UNKNOWN,                  // 09B1
6478             BENGALI,                  // 09B2
6479             UNKNOWN,                  // 09B3..09B5
6480             BENGALI,                  // 09B6..09B9
6481             UNKNOWN,                  // 09BA..09BB
6482             BENGALI,                  // 09BC..09C4
6483             UNKNOWN,                  // 09C5..09C6
6484             BENGALI,                  // 09C7..09C8
6485             UNKNOWN,                  // 09C9..09CA
6486             BENGALI,                  // 09CB..09CE
6487             UNKNOWN,                  // 09CF..09D6
6488             BENGALI,                  // 09D7
6489             UNKNOWN,                  // 09D8..09DB
6490             BENGALI,                  // 09DC..09DD
6491             UNKNOWN,                  // 09DE
6492             BENGALI,                  // 09DF..09E3
6493             UNKNOWN,                  // 09E4..09E5
6494             BENGALI,                  // 09E6..09FE
6495             UNKNOWN,                  // 09FF..0A00
6496             GURMUKHI,                 // 0A01..0A03
6497             UNKNOWN,                  // 0A04
6498             GURMUKHI,                 // 0A05..0A0A
6499             UNKNOWN,                  // 0A0B..0A0E
6500             GURMUKHI,                 // 0A0F..0A10
6501             UNKNOWN,                  // 0A11..0A12
6502             GURMUKHI,                 // 0A13..0A28
6503             UNKNOWN,                  // 0A29
6504             GURMUKHI,                 // 0A2A..0A30
6505             UNKNOWN,                  // 0A31
6506             GURMUKHI,                 // 0A32..0A33
6507             UNKNOWN,                  // 0A34
6508             GURMUKHI,                 // 0A35..0A36
6509             UNKNOWN,                  // 0A37
6510             GURMUKHI,                 // 0A38..0A39
6511             UNKNOWN,                  // 0A3A..0A3B
6512             GURMUKHI,                 // 0A3C
6513             UNKNOWN,                  // 0A3D
6514             GURMUKHI,                 // 0A3E..0A42
6515             UNKNOWN,                  // 0A43..0A46
6516             GURMUKHI,                 // 0A47..0A48
6517             UNKNOWN,                  // 0A49..0A4A
6518             GURMUKHI,                 // 0A4B..0A4D
6519             UNKNOWN,                  // 0A4E..0A50
6520             GURMUKHI,                 // 0A51
6521             UNKNOWN,                  // 0A52..0A58
6522             GURMUKHI,                 // 0A59..0A5C
6523             UNKNOWN,                  // 0A5D
6524             GURMUKHI,                 // 0A5E
6525             UNKNOWN,                  // 0A5F..0A65
6526             GURMUKHI,                 // 0A66..0A76
6527             UNKNOWN,                  // 0A77..0A80
6528             GUJARATI,                 // 0A81..0A83
6529             UNKNOWN,                  // 0A84
6530             GUJARATI,                 // 0A85..0A8D
6531             UNKNOWN,                  // 0A8E
6532             GUJARATI,                 // 0A8F..0A91
6533             UNKNOWN,                  // 0A92
6534             GUJARATI,                 // 0A93..0AA8
6535             UNKNOWN,                  // 0AA9
6536             GUJARATI,                 // 0AAA..0AB0
6537             UNKNOWN,                  // 0AB1
6538             GUJARATI,                 // 0AB2..0AB3
6539             UNKNOWN,                  // 0AB4
6540             GUJARATI,                 // 0AB5..0AB9
6541             UNKNOWN,                  // 0ABA..0ABB
6542             GUJARATI,                 // 0ABC..0AC5
6543             UNKNOWN,                  // 0AC6
6544             GUJARATI,                 // 0AC7..0AC9
6545             UNKNOWN,                  // 0ACA
6546             GUJARATI,                 // 0ACB..0ACD
6547             UNKNOWN,                  // 0ACE..0ACF
6548             GUJARATI,                 // 0AD0
6549             UNKNOWN,                  // 0AD1..0ADF
6550             GUJARATI,                 // 0AE0..0AE3
6551             UNKNOWN,                  // 0AE4..0AE5
6552             GUJARATI,                 // 0AE6..0AF1
6553             UNKNOWN,                  // 0AF2..0AF8
6554             GUJARATI,                 // 0AF9..0AFF
6555             UNKNOWN,                  // 0B00
6556             ORIYA,                    // 0B01..0B03
6557             UNKNOWN,                  // 0B04
6558             ORIYA,                    // 0B05..0B0C
6559             UNKNOWN,                  // 0B0D..0B0E
6560             ORIYA,                    // 0B0F..0B10
6561             UNKNOWN,                  // 0B11..0B12
6562             ORIYA,                    // 0B13..0B28
6563             UNKNOWN,                  // 0B29
6564             ORIYA,                    // 0B2A..0B30
6565             UNKNOWN,                  // 0B31
6566             ORIYA,                    // 0B32..0B33
6567             UNKNOWN,                  // 0B34
6568             ORIYA,                    // 0B35..0B39
6569             UNKNOWN,                  // 0B3A..0B3B
6570             ORIYA,                    // 0B3C..0B44
6571             UNKNOWN,                  // 0B45..0B46
6572             ORIYA,                    // 0B47..0B48
6573             UNKNOWN,                  // 0B49..0B4A
6574             ORIYA,                    // 0B4B..0B4D
6575             UNKNOWN,                  // 0B4E..0B55
6576             ORIYA,                    // 0B56..0B57
6577             UNKNOWN,                  // 0B58..0B5B
6578             ORIYA,                    // 0B5C..0B5D
6579             UNKNOWN,                  // 0B5E
6580             ORIYA,                    // 0B5F..0B63
6581             UNKNOWN,                  // 0B64..0B65
6582             ORIYA,                    // 0B66..0B77
6583             UNKNOWN,                  // 0B78..0B81
6584             TAMIL,                    // 0B82..0B83
6585             UNKNOWN,                  // 0B84
6586             TAMIL,                    // 0B85..0B8A
6587             UNKNOWN,                  // 0B8B..0B8D
6588             TAMIL,                    // 0B8E..0B90
6589             UNKNOWN,                  // 0B91
6590             TAMIL,                    // 0B92..0B95
6591             UNKNOWN,                  // 0B96..0B98
6592             TAMIL,                    // 0B99..0B9A
6593             UNKNOWN,                  // 0B9B
6594             TAMIL,                    // 0B9C
6595             UNKNOWN,                  // 0B9D
6596             TAMIL,                    // 0B9E..0B9F
6597             UNKNOWN,                  // 0BA0..0BA2
6598             TAMIL,                    // 0BA3..0BA4
6599             UNKNOWN,                  // 0BA5..0BA7
6600             TAMIL,                    // 0BA8..0BAA
6601             UNKNOWN,                  // 0BAB..0BAD
6602             TAMIL,                    // 0BAE..0BB9
6603             UNKNOWN,                  // 0BBA..0BBD
6604             TAMIL,                    // 0BBE..0BC2
6605             UNKNOWN,                  // 0BC3..0BC5
6606             TAMIL,                    // 0BC6..0BC8
6607             UNKNOWN,                  // 0BC9
6608             TAMIL,                    // 0BCA..0BCD
6609             UNKNOWN,                  // 0BCE..0BCF
6610             TAMIL,                    // 0BD0
6611             UNKNOWN,                  // 0BD1..0BD6
6612             TAMIL,                    // 0BD7
6613             UNKNOWN,                  // 0BD8..0BE5
6614             TAMIL,                    // 0BE6..0BFA
6615             UNKNOWN,                  // 0BFB..0BFF
6616             TELUGU,                   // 0C00..0C0C
6617             UNKNOWN,                  // 0C0D
6618             TELUGU,                   // 0C0E..0C10
6619             UNKNOWN,                  // 0C11
6620             TELUGU,                   // 0C12..0C28
6621             UNKNOWN,                  // 0C29
6622             TELUGU,                   // 0C2A..0C39
6623             UNKNOWN,                  // 0C3A..0C3C
6624             TELUGU,                   // 0C3D..0C44
6625             UNKNOWN,                  // 0C45
6626             TELUGU,                   // 0C46..0C48
6627             UNKNOWN,                  // 0C49
6628             TELUGU,                   // 0C4A..0C4D
6629             UNKNOWN,                  // 0C4E..0C54
6630             TELUGU,                   // 0C55..0C56
6631             UNKNOWN,                  // 0C57
6632             TELUGU,                   // 0C58..0C5A
6633             UNKNOWN,                  // 0C5B..0C5F
6634             TELUGU,                   // 0C60..0C63
6635             UNKNOWN,                  // 0C64..0C65
6636             TELUGU,                   // 0C66..0C6F
6637             UNKNOWN,                  // 0C70..0C77
6638             TELUGU,                   // 0C78..0C7F
6639             KANNADA,                  // 0C80..0C8C
6640             UNKNOWN,                  // 0C8D
6641             KANNADA,                  // 0C8E..0C90
6642             UNKNOWN,                  // 0C91
6643             KANNADA,                  // 0C92..0CA8
6644             UNKNOWN,                  // 0CA9
6645             KANNADA,                  // 0CAA..0CB3
6646             UNKNOWN,                  // 0CB4
6647             KANNADA,                  // 0CB5..0CB9
6648             UNKNOWN,                  // 0CBA..0CBB
6649             KANNADA,                  // 0CBC..0CC4
6650             UNKNOWN,                  // 0CC5
6651             KANNADA,                  // 0CC6..0CC8
6652             UNKNOWN,                  // 0CC9
6653             KANNADA,                  // 0CCA..0CCD
6654             UNKNOWN,                  // 0CCE..0CD4
6655             KANNADA,                  // 0CD5..0CD6
6656             UNKNOWN,                  // 0CD7..0CDD
6657             KANNADA,                  // 0CDE
6658             UNKNOWN,                  // 0CDF
6659             KANNADA,                  // 0CE0..0CE3
6660             UNKNOWN,                  // 0CE4..0CE5
6661             KANNADA,                  // 0CE6..0CEF
6662             UNKNOWN,                  // 0CF0
6663             KANNADA,                  // 0CF1..0CF2
6664             UNKNOWN,                  // 0CF3..0CFF
6665             MALAYALAM,                // 0D00..0D03
6666             UNKNOWN,                  // 0D04
6667             MALAYALAM,                // 0D05..0D0C
6668             UNKNOWN,                  // 0D0D
6669             MALAYALAM,                // 0D0E..0D10
6670             UNKNOWN,                  // 0D11
6671             MALAYALAM,                // 0D12..0D44
6672             UNKNOWN,                  // 0D45
6673             MALAYALAM,                // 0D46..0D48
6674             UNKNOWN,                  // 0D49
6675             MALAYALAM,                // 0D4A..0D4F
6676             UNKNOWN,                  // 0D50..0D53
6677             MALAYALAM,                // 0D54..0D63
6678             UNKNOWN,                  // 0D64..0D65
6679             MALAYALAM,                // 0D66..0D7F
6680             UNKNOWN,                  // 0D80..0D81
6681             SINHALA,                  // 0D82..0D83
6682             UNKNOWN,                  // 0D84
6683             SINHALA,                  // 0D85..0D96
6684             UNKNOWN,                  // 0D97..0D99
6685             SINHALA,                  // 0D9A..0DB1
6686             UNKNOWN,                  // 0DB2
6687             SINHALA,                  // 0DB3..0DBB
6688             UNKNOWN,                  // 0DBC
6689             SINHALA,                  // 0DBD
6690             UNKNOWN,                  // 0DBE..0DBF
6691             SINHALA,                  // 0DC0..0DC6
6692             UNKNOWN,                  // 0DC7..0DC9
6693             SINHALA,                  // 0DCA
6694             UNKNOWN,                  // 0DCB..0DCE
6695             SINHALA,                  // 0DCF..0DD4
6696             UNKNOWN,                  // 0DD5
6697             SINHALA,                  // 0DD6
6698             UNKNOWN,                  // 0DD7
6699             SINHALA,                  // 0DD8..0DDF
6700             UNKNOWN,                  // 0DE0..0DE5
6701             SINHALA,                  // 0DE6..0DEF
6702             UNKNOWN,                  // 0DF0..0DF1
6703             SINHALA,                  // 0DF2..0DF4
6704             UNKNOWN,                  // 0DF5..0E00
6705             THAI,                     // 0E01..0E3A
6706             UNKNOWN,                  // 0E3B..0E3E
6707             COMMON,                   // 0E3F
6708             THAI,                     // 0E40..0E5B
6709             UNKNOWN,                  // 0E5C..0E80
6710             LAO,                      // 0E81..0E82
6711             UNKNOWN,                  // 0E83
6712             LAO,                      // 0E84
6713             UNKNOWN,                  // 0E85..0E86
6714             LAO,                      // 0E87..0E88
6715             UNKNOWN,                  // 0E89
6716             LAO,                      // 0E8A
6717             UNKNOWN,                  // 0E8B..0E8C
6718             LAO,                      // 0E8D
6719             UNKNOWN,                  // 0E8E..0E93
6720             LAO,                      // 0E94..0E97
6721             UNKNOWN,                  // 0E98
6722             LAO,                      // 0E99..0E9F
6723             UNKNOWN,                  // 0EA0
6724             LAO,                      // 0EA1..0EA3
6725             UNKNOWN,                  // 0EA4
6726             LAO,                      // 0EA5
6727             UNKNOWN,                  // 0EA6
6728             LAO,                      // 0EA7
6729             UNKNOWN,                  // 0EA8..0EA9
6730             LAO,                      // 0EAA..0EAB
6731             UNKNOWN,                  // 0EAC
6732             LAO,                      // 0EAD..0EB9
6733             UNKNOWN,                  // 0EBA
6734             LAO,                      // 0EBB..0EBD
6735             UNKNOWN,                  // 0EBE..0EBF
6736             LAO,                      // 0EC0..0EC4
6737             UNKNOWN,                  // 0EC5
6738             LAO,                      // 0EC6
6739             UNKNOWN,                  // 0EC7
6740             LAO,                      // 0EC8..0ECD
6741             UNKNOWN,                  // 0ECE..0ECF
6742             LAO,                      // 0ED0..0ED9
6743             UNKNOWN,                  // 0EDA..0EDB
6744             LAO,                      // 0EDC..0EDF
6745             UNKNOWN,                  // 0EE0..0EFF
6746             TIBETAN,                  // 0F00..0F47
6747             UNKNOWN,                  // 0F48
6748             TIBETAN,                  // 0F49..0F6C
6749             UNKNOWN,                  // 0F6D..0F70
6750             TIBETAN,                  // 0F71..0F97
6751             UNKNOWN,                  // 0F98
6752             TIBETAN,                  // 0F99..0FBC
6753             UNKNOWN,                  // 0FBD
6754             TIBETAN,                  // 0FBE..0FCC
6755             UNKNOWN,                  // 0FCD
6756             TIBETAN,                  // 0FCE..0FD4
6757             COMMON,                   // 0FD5..0FD8
6758             TIBETAN,                  // 0FD9..0FDA
6759             UNKNOWN,                  // 0FDB..FFF
6760             MYANMAR,                  // 1000..109F
6761             GEORGIAN,                 // 10A0..10C5
6762             UNKNOWN,                  // 10C6
6763             GEORGIAN,                 // 10C7
6764             UNKNOWN,                  // 10C8..10CC
6765             GEORGIAN,                 // 10CD
6766             UNKNOWN,                  // 10CE..10CF
6767             GEORGIAN,                 // 10D0..10FA
6768             COMMON,                   // 10FB
6769             GEORGIAN,                 // 10FC..10FF
6770             HANGUL,                   // 1100..11FF
6771             ETHIOPIC,                 // 1200..1248
6772             UNKNOWN,                  // 1249
6773             ETHIOPIC,                 // 124A..124D
6774             UNKNOWN,                  // 124E..124F
6775             ETHIOPIC,                 // 1250..1256
6776             UNKNOWN,                  // 1257
6777             ETHIOPIC,                 // 1258
6778             UNKNOWN,                  // 1259
6779             ETHIOPIC,                 // 125A..125D
6780             UNKNOWN,                  // 125E..125F
6781             ETHIOPIC,                 // 1260..1288
6782             UNKNOWN,                  // 1289
6783             ETHIOPIC,                 // 128A..128D
6784             UNKNOWN,                  // 128E..128F
6785             ETHIOPIC,                 // 1290..12B0
6786             UNKNOWN,                  // 12B1
6787             ETHIOPIC,                 // 12B2..12B5
6788             UNKNOWN,                  // 12B6..12B7
6789             ETHIOPIC,                 // 12B8..12BE
6790             UNKNOWN,                  // 12BF
6791             ETHIOPIC,                 // 12C0
6792             UNKNOWN,                  // 12C1
6793             ETHIOPIC,                 // 12C2..12C5
6794             UNKNOWN,                  // 12C6..12C7
6795             ETHIOPIC,                 // 12C8..12D6
6796             UNKNOWN,                  // 12D7
6797             ETHIOPIC,                 // 12D8..1310
6798             UNKNOWN,                  // 1311
6799             ETHIOPIC,                 // 1312..1315
6800             UNKNOWN,                  // 1316..1317
6801             ETHIOPIC,                 // 1318..135A
6802             UNKNOWN,                  // 135B..135C
6803             ETHIOPIC,                 // 135D..137C
6804             UNKNOWN,                  // 137D..137F
6805             ETHIOPIC,                 // 1380..1399
6806             UNKNOWN,                  // 139A..139F
6807             CHEROKEE,                 // 13A0..13F5
6808             UNKNOWN,                  // 13F6..13F7
6809             CHEROKEE,                 // 13F8..13FD
6810             UNKNOWN,                  // 13FE..13FF
6811             CANADIAN_ABORIGINAL,      // 1400..167F
6812             OGHAM,                    // 1680..169C
6813             UNKNOWN,                  // 169D..169F
6814             RUNIC,                    // 16A0..16EA
6815             COMMON,                   // 16EB..16ED
6816             RUNIC,                    // 16EE..16F8
6817             UNKNOWN,                  // 16F9..16FF
6818             TAGALOG,                  // 1700..170C
6819             UNKNOWN,                  // 170D
6820             TAGALOG,                  // 170E..1714
6821             UNKNOWN,                  // 1715..171F
6822             HANUNOO,                  // 1720..1734
6823             COMMON,                   // 1735..1736
6824             UNKNOWN,                  // 1737..173F
6825             BUHID,                    // 1740..1753
6826             UNKNOWN,                  // 1754..175F
6827             TAGBANWA,                 // 1760..176C
6828             UNKNOWN,                  // 176D
6829             TAGBANWA,                 // 176E..1770
6830             UNKNOWN,                  // 1771
6831             TAGBANWA,                 // 1772..1773
6832             UNKNOWN,                  // 1774..177F
6833             KHMER,                    // 1780..17DD
6834             UNKNOWN,                  // 17DE..17DF
6835             KHMER,                    // 17E0..17E9
6836             UNKNOWN,                  // 17EA..17EF
6837             KHMER,                    // 17F0..17F9
6838             UNKNOWN,                  // 17FA..17FF
6839             MONGOLIAN,                // 1800..1801
6840             COMMON,                   // 1802..1803
6841             MONGOLIAN,                // 1804
6842             COMMON,                   // 1805
6843             MONGOLIAN,                // 1806..180E
6844             UNKNOWN,                  // 180F
6845             MONGOLIAN,                // 1810..1819
6846             UNKNOWN,                  // 181A..181F
6847             MONGOLIAN,                // 1820..1878
6848             UNKNOWN,                  // 1879..187F
6849             MONGOLIAN,                // 1880..18AA
6850             UNKNOWN,                  // 18AB..18AF
6851             CANADIAN_ABORIGINAL,      // 18B0..18F5
6852             UNKNOWN,                  // 18F6..18FF
6853             LIMBU,                    // 1900..191E
6854             UNKNOWN,                  // 191F
6855             LIMBU,                    // 1920..192B
6856             UNKNOWN,                  // 192C..192F
6857             LIMBU,                    // 1930..193B
6858             UNKNOWN,                  // 193C..193F
6859             LIMBU,                    // 1940
6860             UNKNOWN,                  // 1941..1943
6861             LIMBU,                    // 1944..194F
6862             TAI_LE,                   // 1950..196D
6863             UNKNOWN,                  // 196E..196F
6864             TAI_LE,                   // 1970..1974
6865             UNKNOWN,                  // 1975..197F
6866             NEW_TAI_LUE,              // 1980..19AB
6867             UNKNOWN,                  // 19AC..19AF
6868             NEW_TAI_LUE,              // 19B0..19C9
6869             UNKNOWN,                  // 19CA..19CF
6870             NEW_TAI_LUE,              // 19D0..19DA
6871             UNKNOWN,                  // 19DB..19DD
6872             NEW_TAI_LUE,              // 19DE..19DF
6873             KHMER,                    // 19E0..19FF
6874             BUGINESE,                 // 1A00..1A1B
6875             UNKNOWN,                  // 1A1C..1A1D
6876             BUGINESE,                 // 1A1E..1A1F
6877             TAI_THAM,                 // 1A20..1A5E
6878             UNKNOWN,                  // 1A5F
6879             TAI_THAM,                 // 1A60..1A7C
6880             UNKNOWN,                  // 1A7D..1A7E
6881             TAI_THAM,                 // 1A7F..1A89
6882             UNKNOWN,                  // 1A8A..1A8F
6883             TAI_THAM,                 // 1A90..1A99
6884             UNKNOWN,                  // 1A9A..1A9F
6885             TAI_THAM,                 // 1AA0..1AAD
6886             UNKNOWN,                  // 1AAE..1AAF
6887             INHERITED,                // 1AB0..1ABE
6888             UNKNOWN,                  // 1ABF..1AFF
6889             BALINESE,                 // 1B00..1B4B
6890             UNKNOWN,                  // 1B4C..1B4F
6891             BALINESE,                 // 1B50..1B7C
6892             UNKNOWN,                  // 1B7D..1B7F
6893             SUNDANESE,                // 1B80..1BBF
6894             BATAK,                    // 1BC0..1BF3
6895             UNKNOWN,                  // 1BF4..1BFB
6896             BATAK,                    // 1BFC..1BFF
6897             LEPCHA,                   // 1C00..1C37
6898             UNKNOWN,                  // 1C38..1C3A
6899             LEPCHA,                   // 1C3B..1C49
6900             UNKNOWN,                  // 1C4A..1C4C
6901             LEPCHA,                   // 1C4D..1C4F
6902             OL_CHIKI,                 // 1C50..1C7F
6903             CYRILLIC,                 // 1C80..1C88
6904             UNKNOWN,                  // 1C89
6905             GEORGIAN,                 // 1C90..1CBA
6906             UNKNOWN,                  // 1CBB..1CBC
6907             GEORGIAN,                 // 1CBD..1CBF
6908             SUNDANESE,                // 1CC0..1CC7
6909             UNKNOWN,                  // 1CC8..1CCF
6910             INHERITED,                // 1CD0..1CD2
6911             COMMON,                   // 1CD3
6912             INHERITED,                // 1CD4..1CE0
6913             COMMON,                   // 1CE1
6914             INHERITED,                // 1CE2..1CE8
6915             COMMON,                   // 1CE9..1CEC
6916             INHERITED,                // 1CED
6917             COMMON,                   // 1CEE..1CF3
6918             INHERITED,                // 1CF4
6919             COMMON,                   // 1CF5..1CF7
6920             INHERITED,                // 1CF8..1CF9
6921             UNKNOWN,                  // 1CFA..1CFF
6922             LATIN,                    // 1D00..1D25
6923             GREEK,                    // 1D26..1D2A
6924             CYRILLIC,                 // 1D2B
6925             LATIN,                    // 1D2C..1D5C
6926             GREEK,                    // 1D5D..1D61
6927             LATIN,                    // 1D62..1D65
6928             GREEK,                    // 1D66..1D6A
6929             LATIN,                    // 1D6B..1D77
6930             CYRILLIC,                 // 1D78
6931             LATIN,                    // 1D79..1DBE
6932             GREEK,                    // 1DBF
6933             INHERITED,                // 1DC0..1DF9
6934             UNKNOWN,                  // 1DFA
6935             INHERITED,                // 1DFB..1DFF
6936             LATIN,                    // 1E00..1EFF
6937             GREEK,                    // 1F00..1F15
6938             UNKNOWN,                  // 1F16..1F17
6939             GREEK,                    // 1F18..1F1D
6940             UNKNOWN,                  // 1F1E..1F1F
6941             GREEK,                    // 1F20..1F45
6942             UNKNOWN,                  // 1F46..1F47
6943             GREEK,                    // 1F48..1F4D
6944             UNKNOWN,                  // 1F4E..1F4F
6945             GREEK,                    // 1F50..1F57
6946             UNKNOWN,                  // 1F58
6947             GREEK,                    // 1F59
6948             UNKNOWN,                  // 1F5A
6949             GREEK,                    // 1F5B
6950             UNKNOWN,                  // 1F5C
6951             GREEK,                    // 1F5D
6952             UNKNOWN,                  // 1F5E
6953             GREEK,                    // 1F5F..1F7D
6954             UNKNOWN,                  // 1F7E..1F7F
6955             GREEK,                    // 1F80..1FB4
6956             UNKNOWN,                  // 1FB5
6957             GREEK,                    // 1FB6..1FC4
6958             UNKNOWN,                  // 1FC5
6959             GREEK,                    // 1FC6..1FD3
6960             UNKNOWN,                  // 1FD4..1FD5
6961             GREEK,                    // 1FD6..1FDB
6962             UNKNOWN,                  // 1FDC
6963             GREEK,                    // 1FDD..1FEF
6964             UNKNOWN,                  // 1FF0..1FF1
6965             GREEK,                    // 1FF2..1FF4
6966             UNKNOWN,                  // 1FF5
6967             GREEK,                    // 1FF6..1FFE
6968             UNKNOWN,                  // 1FFF
6969             COMMON,                   // 2000..200B
6970             INHERITED,                // 200C..200D
6971             COMMON,                   // 200E..2064
6972             UNKNOWN,                  // 2065
6973             COMMON,                   // 2066..2070
6974             LATIN,                    // 2071
6975             UNKNOWN,                  // 2072..2073
6976             COMMON,                   // 2074..207E
6977             LATIN,                    // 207F
6978             COMMON,                   // 2080..208E
6979             UNKNOWN,                  // 208F
6980             LATIN,                    // 2090..209C
6981             UNKNOWN,                  // 209D..209F
6982             COMMON,                   // 20A0..20BF
6983             UNKNOWN,                  // 20C0..20CF
6984             INHERITED,                // 20D0..20F0
6985             UNKNOWN,                  // 20F1..20FF
6986             COMMON,                   // 2100..2125
6987             GREEK,                    // 2126
6988             COMMON,                   // 2127..2129
6989             LATIN,                    // 212A..212B
6990             COMMON,                   // 212C..2131
6991             LATIN,                    // 2132
6992             COMMON,                   // 2133..214D
6993             LATIN,                    // 214E
6994             COMMON,                   // 214F..215F
6995             LATIN,                    // 2160..2188
6996             COMMON,                   // 2189..218B
6997             UNKNOWN,                  // 218C..218F
6998             COMMON,                   // 2190..2426
6999             UNKNOWN,                  // 2427..243F
7000             COMMON,                   // 2440..244A
7001             UNKNOWN,                  // 244B..245F
7002             COMMON,                   // 2460..27FF
7003             BRAILLE,                  // 2800..28FF
7004             COMMON,                   // 2900..2B73
7005             UNKNOWN,                  // 2B74..2B75
7006             COMMON,                   // 2B76..2B95
7007             UNKNOWN,                  // 2B96..2B97
7008             COMMON,                   // 2B98..2BC8
7009             UNKNOWN,                  // 2BC9
7010             COMMON,                   // 2BCA..2BFE
7011             UNKNOWN,                  // 0x2BFF
7012             GLAGOLITIC,               // 2C00..2C2E
7013             UNKNOWN,                  // 2C2F
7014             GLAGOLITIC,               // 2C30..2C5E
7015             UNKNOWN,                  // 2C5F
7016             LATIN,                    // 2C60..2C7F
7017             COPTIC,                   // 2C80..2CF3
7018             UNKNOWN,                  // 2CF4..2CF8
7019             COPTIC,                   // 2CF9..2CFF
7020             GEORGIAN,                 // 2D00..2D25
7021             UNKNOWN,                  // 2D26
7022             GEORGIAN,                 // 2D27
7023             UNKNOWN,                  // 2D28..2D2C
7024             GEORGIAN,                 // 2D2D
7025             UNKNOWN,                  // 2D2E..2D2F
7026             TIFINAGH,                 // 2D30..2D67
7027             UNKNOWN,                  // 2D68..2D6E
7028             TIFINAGH,                 // 2D6F..2D70
7029             UNKNOWN,                  // 2D71..2D7E
7030             TIFINAGH,                 // 2D7F
7031             ETHIOPIC,                 // 2D80..2D96
7032             UNKNOWN,                  // 2D97..2D9F
7033             ETHIOPIC,                 // 2DA0..2DA6
7034             UNKNOWN,                  // 2DA7
7035             ETHIOPIC,                 // 2DA8..2DAE
7036             UNKNOWN,                  // 2DAF
7037             ETHIOPIC,                 // 2DB0..2DB6
7038             UNKNOWN,                  // 2DB7
7039             ETHIOPIC,                 // 2DB8..2DBE
7040             UNKNOWN,                  // 2DBF
7041             ETHIOPIC,                 // 2DC0..2DC6
7042             UNKNOWN,                  // 2DC7
7043             ETHIOPIC,                 // 2DC8..2DCE
7044             UNKNOWN,                  // 2DCF
7045             ETHIOPIC,                 // 2DD0..2DD6
7046             UNKNOWN,                  // 2DD7
7047             ETHIOPIC,                 // 2DD8..2DDE
7048             UNKNOWN,                  // 2DDF
7049             CYRILLIC,                 // 2DE0..2DFF
7050             COMMON,                   // 2E00..2E4E
7051             UNKNOWN,                  // 2E4F..2E7F
7052             HAN,                      // 2E80..2E99
7053             UNKNOWN,                  // 2E9A
7054             HAN,                      // 2E9B..2EF3
7055             UNKNOWN,                  // 2EF4..2EFF
7056             HAN,                      // 2F00..2FD5
7057             UNKNOWN,                  // 2FD6..2FEF
7058             COMMON,                   // 2FF0..2FFB
7059             UNKNOWN,                  // 2FFC..2FFF
7060             COMMON,                   // 3000..3004
7061             HAN,                      // 3005
7062             COMMON,                   // 3006
7063             HAN,                      // 3007
7064             COMMON,                   // 3008..3020
7065             HAN,                      // 3021..3029
7066             INHERITED,                // 302A..302D
7067             HANGUL,                   // 302E..302F
7068             COMMON,                   // 3030..3037
7069             HAN,                      // 3038..303B
7070             COMMON,                   // 303C..303F
7071             UNKNOWN,                  // 3040
7072             HIRAGANA,                 // 3041..3096
7073             UNKNOWN,                  // 3097..3098
7074             INHERITED,                // 3099..309A
7075             COMMON,                   // 309B..309C
7076             HIRAGANA,                 // 309D..309F
7077             COMMON,                   // 30A0
7078             KATAKANA,                 // 30A1..30FA
7079             COMMON,                   // 30FB..30FC
7080             KATAKANA,                 // 30FD..30FF
7081             UNKNOWN,                  // 3100..3104
7082             BOPOMOFO,                 // 3105..312F
7083             UNKNOWN,                  // 3130
7084             HANGUL,                   // 3131..318E
7085             UNKNOWN,                  // 318F
7086             COMMON,                   // 3190..319F
7087             BOPOMOFO,                 // 31A0..31BA
7088             UNKNOWN,                  // 31BB..31BF
7089             COMMON,                   // 31C0..31E3
7090             UNKNOWN,                  // 31E4..31EF
7091             KATAKANA,                 // 31F0..31FF
7092             HANGUL,                   // 3200..321E
7093             UNKNOWN,                  // 321F
7094             COMMON,                   // 3220..325F
7095             HANGUL,                   // 3260..327E
7096             COMMON,                   // 327F..32CF
7097             KATAKANA,                 // 32D0..32FE
7098             COMMON,                   // 32FF
7099             KATAKANA,                 // 3300..3357
7100             COMMON,                   // 3358..33FF
7101             HAN,                      // 3400..4DB5
7102             UNKNOWN,                  // 4DB6..4DBF
7103             COMMON,                   // 4DC0..4DFF
7104             HAN,                      // 4E00..9FEF
7105             UNKNOWN,                  // 9FF0..9FFF
7106             YI,                       // A000..A48C
7107             UNKNOWN,                  // A48D..A48F
7108             YI,                       // A490..A4C6
7109             UNKNOWN,                  // A4C7..A4CF
7110             LISU,                     // A4D0..A4FF
7111             VAI,                      // A500..A62B
7112             UNKNOWN,                  // A62C..A63F
7113             CYRILLIC,                 // A640..A69F
7114             BAMUM,                    // A6A0..A6F7
7115             UNKNOWN,                  // A6F8..A6FF
7116             COMMON,                   // A700..A721
7117             LATIN,                    // A722..A787
7118             COMMON,                   // A788..A78A
7119             LATIN,                    // A78B..A7B9
7120             UNKNOWN,                  // A7C0..A7F6
7121             LATIN,                    // A7F7..A7FF
7122             SYLOTI_NAGRI,             // A800..A82B
7123             UNKNOWN,                  // A82C..A82F
7124             COMMON,                   // A830..A839
7125             UNKNOWN,                  // A83A..A83F
7126             PHAGS_PA,                 // A840..A877
7127             UNKNOWN,                  // A878..A87F
7128             SAURASHTRA,               // A880..A8C5
7129             UNKNOWN,                  // A8C6..A8CD
7130             SAURASHTRA,               // A8CE..A8D9
7131             UNKNOWN,                  // A8DA..A8DF
7132             DEVANAGARI,               // A8E0..A8FF
7133             KAYAH_LI,                 // A900..A92D
7134             COMMON,                   // A92E
7135             KAYAH_LI,                 // A92F
7136             REJANG,                   // A930..A953
7137             UNKNOWN,                  // A954..A95E
7138             REJANG,                   // A95F
7139             HANGUL,                   // A960..A97C
7140             UNKNOWN,                  // A97D..A97F
7141             JAVANESE,                 // A980..A9CD
7142             UNKNOWN,                  // A9CE
7143             COMMON,                   // A9CF
7144             JAVANESE,                 // A9D0..A9D9
7145             UNKNOWN,                  // A9DA..A9DD
7146             JAVANESE,                 // A9DE..A9DF
7147             MYANMAR,                  // A9E0..A9FE
7148             UNKNOWN,                  // A9FF
7149             CHAM,                     // AA00..AA36
7150             UNKNOWN,                  // AA37..AA3F
7151             CHAM,                     // AA40..AA4D
7152             UNKNOWN,                  // AA4E..AA4F
7153             CHAM,                     // AA50..AA59
7154             UNKNOWN,                  // AA5A..AA5B
7155             CHAM,                     // AA5C..AA5F
7156             MYANMAR,                  // AA60..AA7F
7157             TAI_VIET,                 // AA80..AAC2
7158             UNKNOWN,                  // AAC3..AADA
7159             TAI_VIET,                 // AADB..AADF
7160             MEETEI_MAYEK,             // AAE0..AAF6
7161             UNKNOWN,                  // AAF7..AB00
7162             ETHIOPIC,                 // AB01..AB06
7163             UNKNOWN,                  // AB07..AB08
7164             ETHIOPIC,                 // AB09..AB0E
7165             UNKNOWN,                  // AB0F..AB10
7166             ETHIOPIC,                 // AB11..AB16
7167             UNKNOWN,                  // AB17..AB1F
7168             ETHIOPIC,                 // AB20..AB26
7169             UNKNOWN,                  // AB27
7170             ETHIOPIC,                 // AB28..AB2E
7171             UNKNOWN,                  // AB2F
7172             LATIN,                    // AB30..AB5A
7173             COMMON,                   // AB5B
7174             LATIN,                    // AB5C..AB64
7175             GREEK,                    // AB65
7176             UNKNOWN,                  // AB66..AB6F
7177             CHEROKEE,                 // AB70..ABBF
7178             MEETEI_MAYEK,             // ABC0..ABED
7179             UNKNOWN,                  // ABEE..ABEF
7180             MEETEI_MAYEK,             // ABF0..ABF9
7181             UNKNOWN,                  // ABFA..ABFF
7182             HANGUL,                   // AC00..D7A3
7183             UNKNOWN,                  // D7A4..D7AF
7184             HANGUL,                   // D7B0..D7C6
7185             UNKNOWN,                  // D7C7..D7CA
7186             HANGUL,                   // D7CB..D7FB
7187             UNKNOWN,                  // D7FC..F8FF
7188             HAN,                      // F900..FA6D
7189             UNKNOWN,                  // FA6E..FA6F
7190             HAN,                      // FA70..FAD9
7191             UNKNOWN,                  // FADA..FAFF
7192             LATIN,                    // FB00..FB06
7193             UNKNOWN,                  // FB07..FB12
7194             ARMENIAN,                 // FB13..FB17
7195             UNKNOWN,                  // FB18..FB1C
7196             HEBREW,                   // FB1D..FB36
7197             UNKNOWN,                  // FB37
7198             HEBREW,                   // FB38..FB3C
7199             UNKNOWN,                  // FB3D
7200             HEBREW,                   // FB3E
7201             UNKNOWN,                  // FB3F
7202             HEBREW,                   // FB40..FB41
7203             UNKNOWN,                  // FB42
7204             HEBREW,                   // FB43..FB44
7205             UNKNOWN,                  // FB45
7206             HEBREW,                   // FB46..FB4F
7207             ARABIC,                   // FB50..FBC1
7208             UNKNOWN,                  // FBC2..FBD2
7209             ARABIC,                   // FBD3..FD3D
7210             COMMON,                   // FD3E..FD3F
7211             UNKNOWN,                  // FD40..FD4F
7212             ARABIC,                   // FD50..FD8F
7213             UNKNOWN,                  // FD90..FD91
7214             ARABIC,                   // FD92..FDC7
7215             UNKNOWN,                  // FDC8..FDEF
7216             ARABIC,                   // FDF0..FDFD
7217             UNKNOWN,                  // FDFE..FDFF
7218             INHERITED,                // FE00..FE0F
7219             COMMON,                   // FE10..FE19
7220             UNKNOWN,                  // FE1A..FE1F
7221             INHERITED,                // FE20..FE2D
7222             CYRILLIC,                 // FE2E..FE2F
7223             COMMON,                   // FE30..FE52
7224             UNKNOWN,                  // FE53
7225             COMMON,                   // FE54..FE66
7226             UNKNOWN,                  // FE67
7227             COMMON,                   // FE68..FE6B
7228             UNKNOWN,                  // FE6C..FE6F
7229             ARABIC,                   // FE70..FE74
7230             UNKNOWN,                  // FE75
7231             ARABIC,                   // FE76..FEFC
7232             UNKNOWN,                  // FEFD..FEFE
7233             COMMON,                   // FEFF
7234             UNKNOWN,                  // FF00
7235             COMMON,                   // FF01..FF20
7236             LATIN,                    // FF21..FF3A
7237             COMMON,                   // FF3B..FF40
7238             LATIN,                    // FF41..FF5A
7239             COMMON,                   // FF5B..FF65
7240             KATAKANA,                 // FF66..FF6F
7241             COMMON,                   // FF70
7242             KATAKANA,                 // FF71..FF9D
7243             COMMON,                   // FF9E..FF9F
7244             HANGUL,                   // FFA0..FFBE
7245             UNKNOWN,                  // FFBF..FFC1
7246             HANGUL,                   // FFC2..FFC7
7247             UNKNOWN,                  // FFC8..FFC9
7248             HANGUL,                   // FFCA..FFCF
7249             UNKNOWN,                  // FFD0..FFD1
7250             HANGUL,                   // FFD2..FFD7
7251             UNKNOWN,                  // FFD8..FFD9
7252             HANGUL,                   // FFDA..FFDC
7253             UNKNOWN,                  // FFDD..FFDF
7254             COMMON,                   // FFE0..FFE6
7255             UNKNOWN,                  // FFE7
7256             COMMON,                   // FFE8..FFEE
7257             UNKNOWN,                  // FFEF..FFF8
7258             COMMON,                   // FFF9..FFFD
7259             UNKNOWN,                  // FFFE..FFFF
7260             LINEAR_B,                 // 10000..1000B
7261             UNKNOWN,                  // 1000C
7262             LINEAR_B,                 // 1000D..10026
7263             UNKNOWN,                  // 10027
7264             LINEAR_B,                 // 10028..1003A
7265             UNKNOWN,                  // 1003B
7266             LINEAR_B,                 // 1003C..1003D
7267             UNKNOWN,                  // 1003E
7268             LINEAR_B,                 // 1003F..1004D
7269             UNKNOWN,                  // 1004E..1004F
7270             LINEAR_B,                 // 10050..1005D
7271             UNKNOWN,                  // 1005E..1007F
7272             LINEAR_B,                 // 10080..100FA
7273             UNKNOWN,                  // 100FB..100FF
7274             COMMON,                   // 10100..10102
7275             UNKNOWN,                  // 10103..10106
7276             COMMON,                   // 10107..10133
7277             UNKNOWN,                  // 10134..10136
7278             COMMON,                   // 10137..1013F
7279             GREEK,                    // 10140..1018E
7280             UNKNOWN,                  // 1018F
7281             COMMON,                   // 10190..1019B
7282             UNKNOWN,                  // 1019C..1019F
7283             GREEK,                    // 101A0
7284             UNKNOWN,                  // 101A1..101CF
7285             COMMON,                   // 101D0..101FC
7286             INHERITED,                // 101FD
7287             UNKNOWN,                  // 101FE..1027F
7288             LYCIAN,                   // 10280..1029C
7289             UNKNOWN,                  // 1029D..1029F
7290             CARIAN,                   // 102A0..102D0
7291             UNKNOWN,                  // 102D1..102DF
7292             INHERITED,                // 102E0
7293             COMMON,                   // 102E1..102FB
7294             UNKNOWN,                  // 102FC..102FF
7295             OLD_ITALIC,               // 10300..10323
7296             UNKNOWN,                  // 10324..1032C
7297             OLD_ITALIC,               // 1032D..1032F
7298             GOTHIC,                   // 10330..1034A
7299             UNKNOWN,                  // 1034B..1034F
7300             OLD_PERMIC,               // 10350..1037A
7301             UNKNOWN,                  // 1037B..1037F
7302             UGARITIC,                 // 10380..1039D
7303             UNKNOWN,                  // 1039E
7304             UGARITIC,                 // 1039F
7305             OLD_PERSIAN,              // 103A0..103C3
7306             UNKNOWN,                  // 103C4..103C7
7307             OLD_PERSIAN,              // 103C8..103D5
7308             UNKNOWN,                  // 103D6..103FF
7309             DESERET,                  // 10400..1044F
7310             SHAVIAN,                  // 10450..1047F
7311             OSMANYA,                  // 10480..1049D
7312             UNKNOWN,                  // 1049E..1049F
7313             OSMANYA,                  // 104A0..104A9
7314             UNKNOWN,                  // 104AA..104AF
7315             OSAGE,                    // 104B0..104D3;
7316             UNKNOWN,                  // 104D4..104D7;
7317             OSAGE,                    // 104D8..104FB;
7318             UNKNOWN,                  // 104FC..104FF;
7319             ELBASAN,                  // 10500..10527
7320             UNKNOWN,                  // 10528..1052F
7321             CAUCASIAN_ALBANIAN,       // 10530..10563
7322             UNKNOWN,                  // 10564..1056E
7323             CAUCASIAN_ALBANIAN,       // 1056F
7324             UNKNOWN,                  // 10570..105FF
7325             LINEAR_A,                 // 10600..10736
7326             UNKNOWN,                  // 10737..1073F
7327             LINEAR_A,                 // 10740..10755
7328             UNKNOWN,                  // 10756..1075F
7329             LINEAR_A,                 // 10760..10767
7330             UNKNOWN,                  // 10768..107FF
7331             CYPRIOT,                  // 10800..10805
7332             UNKNOWN,                  // 10806..10807
7333             CYPRIOT,                  // 10808
7334             UNKNOWN,                  // 10809
7335             CYPRIOT,                  // 1080A..10835
7336             UNKNOWN,                  // 10836
7337             CYPRIOT,                  // 10837..10838
7338             UNKNOWN,                  // 10839..1083B
7339             CYPRIOT,                  // 1083C
7340             UNKNOWN,                  // 1083D..1083E
7341             CYPRIOT,                  // 1083F
7342             IMPERIAL_ARAMAIC,         // 10840..10855
7343             UNKNOWN,                  // 10856
7344             IMPERIAL_ARAMAIC,         // 10857..1085F
7345             PALMYRENE,                // 10860..1087F
7346             NABATAEAN,                // 10880..1089E
7347             UNKNOWN,                  // 1089F..108A6
7348             NABATAEAN,                // 108A7..108AF
7349             UNKNOWN,                  // 108B0..108DF
7350             HATRAN,                   // 108E0..108F2
7351             UNKNOWN,                  // 108F3
7352             HATRAN,                   // 108F4..108F5
7353             UNKNOWN,                  // 108F6..108FA
7354             HATRAN,                   // 108FB..108FF
7355             PHOENICIAN,               // 10900..1091B
7356             UNKNOWN,                  // 1091C..1091E
7357             PHOENICIAN,               // 1091F
7358             LYDIAN,                   // 10920..10939
7359             UNKNOWN,                  // 1093A..1093E
7360             LYDIAN,                   // 1093F
7361             UNKNOWN,                  // 10940..1097F
7362             MEROITIC_HIEROGLYPHS,     // 10980..1099F
7363             MEROITIC_CURSIVE,         // 109A0..109B7
7364             UNKNOWN,                  // 109B8..109BB
7365             MEROITIC_CURSIVE,         // 109BC..109CF
7366             UNKNOWN,                  // 109D0..109D1
7367             MEROITIC_CURSIVE,         // 109D2..109FF
7368             KHAROSHTHI,               // 10A00..10A03
7369             UNKNOWN,                  // 10A04
7370             KHAROSHTHI,               // 10A05..10A06
7371             UNKNOWN,                  // 10A07..10A0B
7372             KHAROSHTHI,               // 10A0C..10A13
7373             UNKNOWN,                  // 10A14
7374             KHAROSHTHI,               // 10A15..10A17
7375             UNKNOWN,                  // 10A18
7376             KHAROSHTHI,               // 10A19..10A35
7377             UNKNOWN,                  // 10A36..10A37
7378             KHAROSHTHI,               // 10A38..10A3A
7379             UNKNOWN,                  // 10A3B..10A3E
7380             KHAROSHTHI,               // 10A3F..10A48
7381             UNKNOWN,                  // 10A49..10A4F
7382             KHAROSHTHI,               // 10A50..10A58
7383             UNKNOWN,                  // 10A59..10A5F
7384             OLD_SOUTH_ARABIAN,        // 10A60..10A7F
7385             OLD_NORTH_ARABIAN,        // 10A80..10A9F
7386             UNKNOWN,                  // 10AA0..10ABF
7387             MANICHAEAN,               // 10AC0..10AE6
7388             UNKNOWN,                  // 10AE7..10AEA
7389             MANICHAEAN,               // 10AEB..10AF6
7390             UNKNOWN,                  // 10AF7..10AFF
7391             AVESTAN,                  // 10B00..10B35
7392             UNKNOWN,                  // 10B36..10B38
7393             AVESTAN,                  // 10B39..10B3F
7394             INSCRIPTIONAL_PARTHIAN,   // 10B40..10B55
7395             UNKNOWN,                  // 10B56..10B57
7396             INSCRIPTIONAL_PARTHIAN,   // 10B58..10B5F
7397             INSCRIPTIONAL_PAHLAVI,    // 10B60..10B72
7398             UNKNOWN,                  // 10B73..10B77
7399             INSCRIPTIONAL_PAHLAVI,    // 10B78..10B7F
7400             PSALTER_PAHLAVI,          // 10B80..10B91
7401             UNKNOWN,                  // 10B92..10B98
7402             PSALTER_PAHLAVI,          // 10B99..10B9C
7403             UNKNOWN,                  // 10B9D..10BA8
7404             PSALTER_PAHLAVI,          // 10BA9..10BAF
7405             UNKNOWN,                  // 10BB0..10BFF
7406             OLD_TURKIC,               // 10C00..10C48
7407             UNKNOWN,                  // 10C49..10C7F
7408             OLD_HUNGARIAN,            // 10C80..10CB2
7409             UNKNOWN,                  // 10CB3..10CBF
7410             OLD_HUNGARIAN,            // 10CC0..10CF2
7411             UNKNOWN,                  // 10CF3..10CF9
7412             OLD_HUNGARIAN,            // 10CFA..10CFF
7413             HANIFI_ROHINGYA,          // 10D00..10D27
7414             UNKNOWN,                  // 10D28..10D29
7415             HANIFI_ROHINGYA,          // 10D30..10D39
7416             UNKNOWN,                  // 10D3A..10E5F
7417             ARABIC,                   // 10E60..10E7E
7418             UNKNOWN,                  // 10E7F..10EFF
7419             OLD_SOGDIAN,              // 10F00..10F27
7420             UNKNOWN,                  // 10F28..10F2F
7421             SOGDIAN,                  // 10F30..10F59
7422             UNKNOWN,                  // 10F5A..10FFF
7423             BRAHMI,                   // 11000..1104D
7424             UNKNOWN,                  // 1104E..11051
7425             BRAHMI,                   // 11052..1106F
7426             UNKNOWN,                  // 11070..1107E
7427             BRAHMI,                   // 1107F
7428             KAITHI,                   // 11080..110C1
7429             UNKNOWN,                  // 110C2..110CC
7430             KAITHI,                   // 110CD
7431             UNKNOWN,                  // 110CE..110CF
7432             SORA_SOMPENG,             // 110D0..110E8
7433             UNKNOWN,                  // 110E9..110EF
7434             SORA_SOMPENG,             // 110F0..110F9
7435             UNKNOWN,                  // 110FA..110FF
7436             CHAKMA,                   // 11100..11134
7437             UNKNOWN,                  // 11135
7438             CHAKMA,                   // 11136..11146
7439             UNKNOWN,                  // 11147..1114F
7440             MAHAJANI,                 // 11150..11176
7441             UNKNOWN,                  // 11177..1117F
7442             SHARADA,                  // 11180..111CD
7443             UNKNOWN,                  // 111CE..111CF
7444             SHARADA,                  // 111D0..111DF
7445             UNKNOWN,                  // 111E0
7446             SINHALA,                  // 111E1..111F4
7447             UNKNOWN,                  // 111F5..111FF
7448             KHOJKI,                   // 11200..11211
7449             UNKNOWN,                  // 11212
7450             KHOJKI,                   // 11213..1123E
7451             UNKNOWN,                  // 1123F..1127F
7452             MULTANI,                  // 11280..11286
7453             UNKNOWN,                  // 11287
7454             MULTANI,                  // 11288
7455             UNKNOWN,                  // 11289
7456             MULTANI,                  // 1128A..1128D
7457             UNKNOWN,                  // 1128E
7458             MULTANI,                  // 1128F..1129D
7459             UNKNOWN,                  // 1129E
7460             MULTANI,                  // 1129F..112A9
7461             UNKNOWN,                  // 112AA..112AF
7462             KHUDAWADI,                // 112B0..112EA
7463             UNKNOWN,                  // 112EB..112EF
7464             KHUDAWADI,                // 112F0..112F9
7465             UNKNOWN,                  // 112FA..112FF
7466             GRANTHA,                  // 11300..11303
7467             UNKNOWN,                  // 11304
7468             GRANTHA,                  // 11305..1130C
7469             UNKNOWN,                  // 1130D..1130E
7470             GRANTHA,                  // 1130F..11310
7471             UNKNOWN,                  // 11311..11312
7472             GRANTHA,                  // 11313..11328
7473             UNKNOWN,                  // 11329
7474             GRANTHA,                  // 1132A..11330
7475             UNKNOWN,                  // 11331
7476             GRANTHA,                  // 11332..11333
7477             UNKNOWN,                  // 11334
7478             GRANTHA,                  // 11335..11339
7479             UNKNOWN,                  // 1133A
7480             INHERITED,                // 1133B
7481             GRANTHA,                  // 1133C..11344
7482             UNKNOWN,                  // 11345..11346
7483             GRANTHA,                  // 11347..11348
7484             UNKNOWN,                  // 11349..1134A
7485             GRANTHA,                  // 1134B..1134D
7486             UNKNOWN,                  // 1134E..1134F
7487             GRANTHA,                  // 11350
7488             UNKNOWN,                  // 11351..11356
7489             GRANTHA,                  // 11357
7490             UNKNOWN,                  // 11358..1135C
7491             GRANTHA,                  // 1135D..11363
7492             UNKNOWN,                  // 11364..11365
7493             GRANTHA,                  // 11366..1136C
7494             UNKNOWN,                  // 1136D..1136F
7495             GRANTHA,                  // 11370..11374
7496             UNKNOWN,                  // 11375..113FF
7497             NEWA,                     // 11400..11459
7498             UNKNOWN,                  // 1145A
7499             NEWA,                     // 1145B
7500             UNKNOWN,                  // 1145C
7501             NEWA,                     // 1145D..1145E
7502             UNKNOWN,                  // 1145F..1147F
7503             TIRHUTA,                  // 11480..114C7
7504             UNKNOWN,                  // 114C8..114CF
7505             TIRHUTA,                  // 114D0..114D9
7506             UNKNOWN,                  // 114DA..1157F
7507             SIDDHAM,                  // 11580..115B5
7508             UNKNOWN,                  // 115B6..115B7
7509             SIDDHAM,                  // 115B8..115DD
7510             UNKNOWN,                  // 115DE..115FF
7511             MODI,                     // 11600..11644
7512             UNKNOWN,                  // 11645..1164F
7513             MODI,                     // 11650..11659
7514             UNKNOWN,                  // 1165A..1165F
7515             MONGOLIAN,                // 11660..1166C
7516             UNKNOWN,                  // 1166D..1167F
7517             TAKRI,                    // 11680..116B7
7518             UNKNOWN,                  // 116B8..116BF
7519             TAKRI,                    // 116C0..116C9
7520             UNKNOWN,                  // 116CA..116FF
7521             AHOM,                     // 11700..1171A
7522             UNKNOWN,                  // 1171B..1171C
7523             AHOM,                     // 1171D..1172B
7524             UNKNOWN,                  // 1172C..1172F
7525             AHOM,                     // 11730..1173F
7526             UNKNOWN,                  // 11740..117FF
7527             DOGRA,                    // 11800..1183B
7528             UNKNOWN,                  // 1183C..1189F
7529             WARANG_CITI,              // 118A0..118F2
7530             UNKNOWN,                  // 118F3..118FE
7531             WARANG_CITI,              // 118FF
7532             UNKNOWN,                  // 11900..119FF
7533             ZANABAZAR_SQUARE,         // 11A00..11A47
7534             UNKNOWN,                  // 11A48..11A4F
7535             SOYOMBO,                  // 11A50..11A83
7536             UNKNOWN,                  // 11A84..11A85
7537             SOYOMBO,                  // 11A86..11AA2
7538             UNKNOWN,                  // 11AA3..11ABF
7539             PAU_CIN_HAU,              // 11AC0..11AF8
7540             UNKNOWN,                  // 11AF9..11BFF
7541             BHAIKSUKI,                // 11C00..11C08
7542             UNKNOWN,                  // 11C09
7543             BHAIKSUKI,                // 11C0A..11C36
7544             UNKNOWN,                  // 11C37
7545             BHAIKSUKI,                // 11C38..11C45
7546             UNKNOWN,                  // 11C46..11C49
7547             BHAIKSUKI,                // 11C50..11C6C
7548             UNKNOWN,                  // 11C6D..11C6F
7549             MARCHEN,                  // 11C70..11C8F
7550             UNKNOWN,                  // 11C90..11C91
7551             MARCHEN,                  // 11C92..11CA7
7552             UNKNOWN,                  // 11CA8
7553             MARCHEN,                  // 11CA9..11CB6
7554             UNKNOWN,                  // 11CB7..11CFF
7555             MASARAM_GONDI,            // 11D00..11D06
7556             UNKNOWN,                  // 11D07
7557             MASARAM_GONDI,            // 11D08..11D09
7558             UNKNOWN,                  // 11D0A
7559             MASARAM_GONDI,            // 11D0B..11D36
7560             UNKNOWN,                  // 11D37..11D39
7561             MASARAM_GONDI,            // 11D3A
7562             UNKNOWN,                  // 11D3B
7563             MASARAM_GONDI,            // 11D3C..11D3D
7564             UNKNOWN,                  // 11D3E
7565             MASARAM_GONDI,            // 11D3F..11D47
7566             UNKNOWN,                  // 11D48..11D49
7567             MASARAM_GONDI,            // 11D50..11D59
7568             UNKNOWN,                  // 11D5A..11D5F
7569             GUNJALA_GONDI,            // 11D60..11D68
7570             UNKNOWN,                  // 11D69
7571             GUNJALA_GONDI,            // 11D6A..11D8E
7572             UNKNOWN,                  // 11D8F
7573             GUNJALA_GONDI,            // 11D90..11D91
7574             UNKNOWN,                  // 11D92
7575             GUNJALA_GONDI,            // 11D93..11D98
7576             UNKNOWN,                  // 11D99
7577             GUNJALA_GONDI,            // 11DA0..11DA9
7578             UNKNOWN,                  // 11DAA..11DFF
7579             MAKASAR,                  // 11EE0..11EF8
7580             UNKNOWN,                  // 11EF9..11FFF
7581             CUNEIFORM,                // 12000..12399
7582             UNKNOWN,                  // 1239A..123FF
7583             CUNEIFORM,                // 12400..1246E
7584             UNKNOWN,                  // 1246F
7585             CUNEIFORM,                // 12470..12474
7586             UNKNOWN,                  // 12475..1247F
7587             CUNEIFORM,                // 12480..12543
7588             UNKNOWN,                  // 12544..12FFF
7589             EGYPTIAN_HIEROGLYPHS,     // 13000..1342E
7590             UNKNOWN,                  // 1342F..143FF
7591             ANATOLIAN_HIEROGLYPHS,    // 14400..14646
7592             UNKNOWN,                  // 14647..167FF
7593             BAMUM,                    // 16800..16A38
7594             UNKNOWN,                  // 16A39..16A3F
7595             MRO,                      // 16A40..16A5E
7596             UNKNOWN,                  // 16A5F
7597             MRO,                      // 16A60..16A69
7598             UNKNOWN,                  // 16A6A..16A6D
7599             MRO,                      // 16A6E..16A6F
7600             UNKNOWN,                  // 16A70..16ACF
7601             BASSA_VAH,                // 16AD0..16AED
7602             UNKNOWN,                  // 16AEE..16AEF
7603             BASSA_VAH,                // 16AF0..16AF5
7604             UNKNOWN,                  // 16AF6..16AFF
7605             PAHAWH_HMONG,             // 16B00..16B45
7606             UNKNOWN,                  // 16B46..16B4F
7607             PAHAWH_HMONG,             // 16B50..16B59
7608             UNKNOWN,                  // 16B5A
7609             PAHAWH_HMONG,             // 16B5B..16B61
7610             UNKNOWN,                  // 16B62
7611             PAHAWH_HMONG,             // 16B63..16B77
7612             UNKNOWN,                  // 16B78..16B7C
7613             PAHAWH_HMONG,             // 16B7D..16B8F
7614             UNKNOWN,                  // 16B90..16E3F
7615             MEDEFAIDRIN,              // 16E40..16E9A
7616             UNKNOWN,                  // 16E9B..16EFF
7617             MIAO,                     // 16F00..16F44
7618             UNKNOWN,                  // 16F45..16F4F
7619             MIAO,                     // 16F50..16F7E
7620             UNKNOWN,                  // 16F7F..16F8E
7621             MIAO,                     // 16F8F..16F9F
7622             UNKNOWN,                  // 16FA0..16FDF
7623             TANGUT,                   // 16FE0
7624             NUSHU,                    // 16FE1
7625             UNKNOWN,                  // 16FE2..16FFF
7626             TANGUT,                   // 17000..187F1
7627             UNKNOWN,                  // 187F2..187FF
7628             TANGUT,                   // 18800..18AF2
7629             UNKNOWN,                  // 18AF3..1AFFF
7630             KATAKANA,                 // 1B000
7631             HIRAGANA,                 // 1B001..1B11E
7632             UNKNOWN,                  // 1B11F..1B16F
7633             NUSHU,                    // 1B170..1B2FB
7634             UNKNOWN,                  // 1B2FC..1BBFF
7635             DUPLOYAN,                 // 1BC00..1BC6A
7636             UNKNOWN,                  // 1BC6B..1BC6F
7637             DUPLOYAN,                 // 1BC70..1BC7C
7638             UNKNOWN,                  // 1BC7D..1BC7F
7639             DUPLOYAN,                 // 1BC80..1BC88
7640             UNKNOWN,                  // 1BC89..1BC8F
7641             DUPLOYAN,                 // 1BC90..1BC99
7642             UNKNOWN,                  // 1BC9A..1BC9B
7643             DUPLOYAN,                 // 1BC9C..1BC9F
7644             COMMON,                   // 1BCA0..1BCA3
7645             UNKNOWN,                  // 1BCA4..1CFFF
7646             COMMON,                   // 1D000..1D0F5
7647             UNKNOWN,                  // 1D0F6..1D0FF
7648             COMMON,                   // 1D100..1D126
7649             UNKNOWN,                  // 1D127..1D128
7650             COMMON,                   // 1D129..1D166
7651             INHERITED,                // 1D167..1D169
7652             COMMON,                   // 1D16A..1D17A
7653             INHERITED,                // 1D17B..1D182
7654             COMMON,                   // 1D183..1D184
7655             INHERITED,                // 1D185..1D18B
7656             COMMON,                   // 1D18C..1D1A9
7657             INHERITED,                // 1D1AA..1D1AD
7658             COMMON,                   // 1D1AE..1D1E8
7659             UNKNOWN,                  // 1D1E9..1D1FF
7660             GREEK,                    // 1D200..1D245
7661             UNKNOWN,                  // 1D246..1D2DF
7662             COMMON,                   // 1D2E0..1D2F3
7663             UNKNOWN,                  // 1D2F4..1D2FF
7664             COMMON,                   // 1D300..1D356
7665             UNKNOWN,                  // 1D357..1D35F
7666             COMMON,                   // 1D360..1D378
7667             UNKNOWN,                  // 1D379..1D3FF
7668             COMMON,                   // 1D400..1D454
7669             UNKNOWN,                  // 1D455
7670             COMMON,                   // 1D456..1D49C
7671             UNKNOWN,                  // 1D49D
7672             COMMON,                   // 1D49E..1D49F
7673             UNKNOWN,                  // 1D4A0..1D4A1
7674             COMMON,                   // 1D4A2
7675             UNKNOWN,                  // 1D4A3..1D4A4
7676             COMMON,                   // 1D4A5..1D4A6
7677             UNKNOWN,                  // 1D4A7..1D4A8
7678             COMMON,                   // 1D4A9..1D4AC
7679             UNKNOWN,                  // 1D4AD
7680             COMMON,                   // 1D4AE..1D4B9
7681             UNKNOWN,                  // 1D4BA
7682             COMMON,                   // 1D4BB
7683             UNKNOWN,                  // 1D4BC
7684             COMMON,                   // 1D4BD..1D4C3
7685             UNKNOWN,                  // 1D4C4
7686             COMMON,                   // 1D4C5..1D505
7687             UNKNOWN,                  // 1D506
7688             COMMON,                   // 1D507..1D50A
7689             UNKNOWN,                  // 1D50B..1D50C
7690             COMMON,                   // 1D50D..1D514
7691             UNKNOWN,                  // 1D515
7692             COMMON,                   // 1D516..1D51C
7693             UNKNOWN,                  // 1D51D
7694             COMMON,                   // 1D51E..1D539
7695             UNKNOWN,                  // 1D53A
7696             COMMON,                   // 1D53B..1D53E
7697             UNKNOWN,                  // 1D53F
7698             COMMON,                   // 1D540..1D544
7699             UNKNOWN,                  // 1D545
7700             COMMON,                   // 1D546
7701             UNKNOWN,                  // 1D547..1D549
7702             COMMON,                   // 1D54A..1D550
7703             UNKNOWN,                  // 1D551
7704             COMMON,                   // 1D552..1D6A5
7705             UNKNOWN,                  // 1D6A6..1D6A7
7706             COMMON,                   // 1D6A8..1D7CB
7707             UNKNOWN,                  // 1D7CC..1D7CD
7708             COMMON,                   // 1D7CE..1D7FF
7709             SIGNWRITING,              // 1D800..1DA8B
7710             UNKNOWN,                  // 1DA8C..1DA9A
7711             SIGNWRITING,              // 1DA9B..1DA9F
7712             UNKNOWN,                  // 1DAA0
7713             SIGNWRITING,              // 1DAA1..1DAAF
7714             UNKNOWN,                  // 1DAB0..1DFFF
7715             GLAGOLITIC,               // 1E000..1E006
7716             UNKNOWN,                  // 1E007
7717             GLAGOLITIC,               // 1E008..1E018
7718             UNKNOWN,                  // 1E019..1E01A
7719             GLAGOLITIC,               // 1E01B..1E021
7720             UNKNOWN,                  // 1E022
7721             GLAGOLITIC,               // 1E023..1E024
7722             UNKNOWN,                  // 1E025
7723             GLAGOLITIC,               // 1E026..1E02A
7724             UNKNOWN,                  // 1E02B..1E7FF
7725             MENDE_KIKAKUI,            // 1E800..1E8C4
7726             UNKNOWN,                  // 1E8C5..1E8C6
7727             MENDE_KIKAKUI,            // 1E8C7..1E8D6
7728             UNKNOWN,                  // 1E8D7..1E8FF
7729             ADLAM,                    // 1E900..1E94A
7730             UNKNOWN,                  // 1E94B..1E94F
7731             ADLAM,                    // 1E950..1E959
7732             UNKNOWN,                  // 1E95A..1E95D
7733             ADLAM,                    // 1E95E..1E95F
7734             UNKNOWN,                  // 1E960..1EC70
7735             COMMON,                   // 1EC71..1ECB4
7736             UNKNOWN,                  // 1ECB5..1EDFF
7737             ARABIC,                   // 1EE00..1EE03
7738             UNKNOWN,                  // 1EE04
7739             ARABIC,                   // 1EE05..1EE1F
7740             UNKNOWN,                  // 1EE20
7741             ARABIC,                   // 1EE21..1EE22
7742             UNKNOWN,                  // 1EE23
7743             ARABIC,                   // 1EE24
7744             UNKNOWN,                  // 1EE25..1EE26
7745             ARABIC,                   // 1EE27
7746             UNKNOWN,                  // 1EE28
7747             ARABIC,                   // 1EE29..1EE32
7748             UNKNOWN,                  // 1EE33
7749             ARABIC,                   // 1EE34..1EE37
7750             UNKNOWN,                  // 1EE38
7751             ARABIC,                   // 1EE39
7752             UNKNOWN,                  // 1EE3A
7753             ARABIC,                   // 1EE3B
7754             UNKNOWN,                  // 1EE3C..1EE41
7755             ARABIC,                   // 1EE42
7756             UNKNOWN,                  // 1EE43..1EE46
7757             ARABIC,                   // 1EE47
7758             UNKNOWN,                  // 1EE48
7759             ARABIC,                   // 1EE49
7760             UNKNOWN,                  // 1EE4A
7761             ARABIC,                   // 1EE4B
7762             UNKNOWN,                  // 1EE4C
7763             ARABIC,                   // 1EE4D..1EE4F
7764             UNKNOWN,                  // 1EE50
7765             ARABIC,                   // 1EE51..1EE52
7766             UNKNOWN,                  // 1EE53
7767             ARABIC,                   // 1EE54
7768             UNKNOWN,                  // 1EE55..1EE56
7769             ARABIC,                   // 1EE57
7770             UNKNOWN,                  // 1EE58
7771             ARABIC,                   // 1EE59
7772             UNKNOWN,                  // 1EE5A
7773             ARABIC,                   // 1EE5B
7774             UNKNOWN,                  // 1EE5C
7775             ARABIC,                   // 1EE5D
7776             UNKNOWN,                  // 1EE5E
7777             ARABIC,                   // 1EE5F
7778             UNKNOWN,                  // 1EE60
7779             ARABIC,                   // 1EE61..1EE62
7780             UNKNOWN,                  // 1EE63
7781             ARABIC,                   // 1EE64
7782             UNKNOWN,                  // 1EE65..1EE66
7783             ARABIC,                   // 1EE67..1EE6A
7784             UNKNOWN,                  // 1EE6B
7785             ARABIC,                   // 1EE6C..1EE72
7786             UNKNOWN,                  // 1EE73
7787             ARABIC,                   // 1EE74..1EE77
7788             UNKNOWN,                  // 1EE78
7789             ARABIC,                   // 1EE79..1EE7C
7790             UNKNOWN,                  // 1EE7D
7791             ARABIC,                   // 1EE7E
7792             UNKNOWN,                  // 1EE7F
7793             ARABIC,                   // 1EE80..1EE89
7794             UNKNOWN,                  // 1EE8A
7795             ARABIC,                   // 1EE8B..1EE9B
7796             UNKNOWN,                  // 1EE9C..1EEA0
7797             ARABIC,                   // 1EEA1..1EEA3
7798             UNKNOWN,                  // 1EEA4
7799             ARABIC,                   // 1EEA5..1EEA9
7800             UNKNOWN,                  // 1EEAA
7801             ARABIC,                   // 1EEAB..1EEBB
7802             UNKNOWN,                  // 1EEBC..1EEEF
7803             ARABIC,                   // 1EEF0..1EEF1
7804             UNKNOWN,                  // 1EEF2..1EFFF
7805             COMMON,                   // 1F000..1F02B
7806             UNKNOWN,                  // 1F02C..1F02F
7807             COMMON,                   // 1F030..1F093
7808             UNKNOWN,                  // 1F094..1F09F
7809             COMMON,                   // 1F0A0..1F0AE
7810             UNKNOWN,                  // 1F0AF..1F0B0
7811             COMMON,                   // 1F0B1..1F0BF
7812             UNKNOWN,                  // 1F0C0
7813             COMMON,                   // 1F0C1..1F0CF
7814             UNKNOWN,                  // 1F0D0
7815             COMMON,                   // 1F0D1..1F0F5
7816             UNKNOWN,                  // 1F0F6..1F0FF
7817             COMMON,                   // 1F100..1F10C
7818             UNKNOWN,                  // 1F10D..1F10F
7819             COMMON,                   // 1F110..1F16B
7820             UNKNOWN,                  // 1F16C..1F16F
7821             COMMON,                   // 1F170..1F1AC
7822             UNKNOWN,                  // 1F1AD..1F1E5
7823             COMMON,                   // 1F1E6..1F1FF
7824             HIRAGANA,                 // 1F200
7825             COMMON,                   // 1F201..1F202
7826             UNKNOWN,                  // 1F203..1F20F
7827             COMMON,                   // 1F210..1F23B
7828             UNKNOWN,                  // 1F23C..1F23F
7829             COMMON,                   // 1F240..1F248
7830             UNKNOWN,                  // 1F249..1F24F
7831             COMMON,                   // 1F250..1F251
7832             UNKNOWN,                  // 1F252..1F25F
7833             COMMON,                   // 1F260..1F265
7834             UNKNOWN,                  // 1F266..1F2FF
7835             COMMON,                   // 1F300..1F6D4
7836             UNKNOWN,                  // 1F6D5..1F6DF
7837             COMMON,                   // 1F6E0..1F6EC
7838             UNKNOWN,                  // 1F6ED..1F6EF
7839             COMMON,                   // 1F6F0..1F6F9
7840             UNKNOWN,                  // 1F6FA..1F6FF
7841             COMMON,                   // 1F700..1F773
7842             UNKNOWN,                  // 1F774..1F77F
7843             COMMON,                   // 1F780..1F7D8
7844             UNKNOWN,                  // 1F7D9..1F7FF
7845             COMMON,                   // 1F800..1F80B
7846             UNKNOWN,                  // 1F80C..1F80F
7847             COMMON,                   // 1F810..1F847
7848             UNKNOWN,                  // 1F848..1F84F
7849             COMMON,                   // 1F850..1F859
7850             UNKNOWN,                  // 1F85A..1F85F
7851             COMMON,                   // 1F860..1F887
7852             UNKNOWN,                  // 1F888..1F88F
7853             COMMON,                   // 1F890..1F8AD
7854             UNKNOWN,                  // 1F8AE..1F8FF
7855             COMMON,                   // 1F900..1F90B
7856             UNKNOWN,                  // 1F90C..1F90F
7857             COMMON,                   // 1F910..1F93E
7858             UNKNOWN,                  // 1F93F
7859             COMMON,                   // 1F940..1F970
7860             UNKNOWN,                  // 1F971..1F972
7861             COMMON,                   // 1F973..1F976
7862             UNKNOWN,                  // 1F977..1F979
7863             COMMON,                   // 1F97A
7864             UNKNOWN,                  // 1F97B
7865             COMMON,                   // 1F97C..1F9A2
7866             UNKNOWN,                  // 1F9A3..1F9AF
7867             COMMON,                   // 1F9B0..1F9B9
7868             UNKNOWN,                  // 1F9BA..1F9BF
7869             COMMON,                   // 1F9C0..1F9C2
7870             UNKNOWN,                  // 1F9C3..1F9CF
7871             COMMON,                   // 1F9D0..1F9FF
7872             UNKNOWN,                  // 1FA00..1FA5F
7873             COMMON,                   // 1FA60..1FA6D
7874             UNKNOWN,                  // 1FA6E..1FFFF
7875             HAN,                      // 20000..2A6D6
7876             UNKNOWN,                  // 2A6D7..2A6FF
7877             HAN,                      // 2A700..2B734
7878             UNKNOWN,                  // 2B735..2B73F
7879             HAN,                      // 2B740..2B81D
7880             UNKNOWN,                  // 2B81E..2B81F
7881             HAN,                      // 2B820..2CEA1
7882             UNKNOWN,                  // 2CEA2..2CEAF
7883             HAN,                      // 2CEB0..2EBE0
7884             UNKNOWN,                  // 2EBE1..2F7FF
7885             HAN,                      // 2F800..2FA1D
7886             UNKNOWN,                  // 2FA1E..E0000
7887             COMMON,                   // E0001
7888             UNKNOWN,                  // E0002..E001F
7889             COMMON,                   // E0020..E007F
7890             UNKNOWN,                  // E0080..E00FF
7891             INHERITED,                // E0100..E01EF
7892             UNKNOWN                   // E01F0..10FFFF
7893         };
7894 
7895         private static HashMap<String, Character.UnicodeScript> aliases;
7896         static {
7897             aliases = new HashMap<>((int)(149 / 0.75f + 1.0f));
7898             aliases.put("ADLM", ADLAM);
7899             aliases.put("AGHB", CAUCASIAN_ALBANIAN);
7900             aliases.put("AHOM", AHOM);
7901             aliases.put("ARAB", ARABIC);
7902             aliases.put("ARMI", IMPERIAL_ARAMAIC);
7903             aliases.put("ARMN", ARMENIAN);
7904             aliases.put("AVST", AVESTAN);
7905             aliases.put("BALI", BALINESE);
7906             aliases.put("BAMU", BAMUM);
7907             aliases.put("BASS", BASSA_VAH);
7908             aliases.put("BATK", BATAK);
7909             aliases.put("BENG", BENGALI);
7910             aliases.put("BHKS", BHAIKSUKI);
7911             aliases.put("BOPO", BOPOMOFO);
7912             aliases.put("BRAH", BRAHMI);
7913             aliases.put("BRAI", BRAILLE);
7914             aliases.put("BUGI", BUGINESE);
7915             aliases.put("BUHD", BUHID);
7916             aliases.put("CAKM", CHAKMA);
7917             aliases.put("CANS", CANADIAN_ABORIGINAL);
7918             aliases.put("CARI", CARIAN);
7919             aliases.put("CHAM", CHAM);
7920             aliases.put("CHER", CHEROKEE);
7921             aliases.put("COPT", COPTIC);
7922             aliases.put("CPRT", CYPRIOT);
7923             aliases.put("CYRL", CYRILLIC);
7924             aliases.put("DEVA", DEVANAGARI);
7925             aliases.put("DOGR", DOGRA);
7926             aliases.put("DSRT", DESERET);
7927             aliases.put("DUPL", DUPLOYAN);
7928             aliases.put("EGYP", EGYPTIAN_HIEROGLYPHS);
7929             aliases.put("ELBA", ELBASAN);
7930             aliases.put("ETHI", ETHIOPIC);
7931             aliases.put("GEOR", GEORGIAN);
7932             aliases.put("GLAG", GLAGOLITIC);
7933             aliases.put("GONM", MASARAM_GONDI);
7934             aliases.put("GOTH", GOTHIC);
7935             aliases.put("GONG", GUNJALA_GONDI);
7936             aliases.put("GRAN", GRANTHA);
7937             aliases.put("GREK", GREEK);
7938             aliases.put("GUJR", GUJARATI);
7939             aliases.put("GURU", GURMUKHI);
7940             aliases.put("HANG", HANGUL);
7941             aliases.put("HANI", HAN);
7942             aliases.put("HANO", HANUNOO);
7943             aliases.put("HATR", HATRAN);
7944             aliases.put("HEBR", HEBREW);
7945             aliases.put("HIRA", HIRAGANA);
7946             aliases.put("HLUW", ANATOLIAN_HIEROGLYPHS);
7947             aliases.put("HMNG", PAHAWH_HMONG);
7948             // it appears we don't have the KATAKANA_OR_HIRAGANA
7949             //aliases.put("HRKT", KATAKANA_OR_HIRAGANA);
7950             aliases.put("HUNG", OLD_HUNGARIAN);
7951             aliases.put("ITAL", OLD_ITALIC);
7952             aliases.put("JAVA", JAVANESE);
7953             aliases.put("KALI", KAYAH_LI);
7954             aliases.put("KANA", KATAKANA);
7955             aliases.put("KHAR", KHAROSHTHI);
7956             aliases.put("KHMR", KHMER);
7957             aliases.put("KHOJ", KHOJKI);
7958             aliases.put("KNDA", KANNADA);
7959             aliases.put("KTHI", KAITHI);
7960             aliases.put("LANA", TAI_THAM);
7961             aliases.put("LAOO", LAO);
7962             aliases.put("LATN", LATIN);
7963             aliases.put("LEPC", LEPCHA);
7964             aliases.put("LIMB", LIMBU);
7965             aliases.put("LINA", LINEAR_A);
7966             aliases.put("LINB", LINEAR_B);
7967             aliases.put("LISU", LISU);
7968             aliases.put("LYCI", LYCIAN);
7969             aliases.put("LYDI", LYDIAN);
7970             aliases.put("MAHJ", MAHAJANI);
7971             aliases.put("MAKA", MAKASAR);
7972             aliases.put("MARC", MARCHEN);
7973             aliases.put("MAND", MANDAIC);
7974             aliases.put("MANI", MANICHAEAN);
7975             aliases.put("MEDF", MEDEFAIDRIN);
7976             aliases.put("MEND", MENDE_KIKAKUI);
7977             aliases.put("MERC", MEROITIC_CURSIVE);
7978             aliases.put("MERO", MEROITIC_HIEROGLYPHS);
7979             aliases.put("MLYM", MALAYALAM);
7980             aliases.put("MODI", MODI);
7981             aliases.put("MONG", MONGOLIAN);
7982             aliases.put("MROO", MRO);
7983             aliases.put("MTEI", MEETEI_MAYEK);
7984             aliases.put("MULT", MULTANI);
7985             aliases.put("MYMR", MYANMAR);
7986             aliases.put("NARB", OLD_NORTH_ARABIAN);
7987             aliases.put("NBAT", NABATAEAN);
7988             aliases.put("NEWA", NEWA);
7989             aliases.put("NKOO", NKO);
7990             aliases.put("NSHU", NUSHU);
7991             aliases.put("OGAM", OGHAM);
7992             aliases.put("OLCK", OL_CHIKI);
7993             aliases.put("ORKH", OLD_TURKIC);
7994             aliases.put("ORYA", ORIYA);
7995             aliases.put("OSGE", OSAGE);
7996             aliases.put("OSMA", OSMANYA);
7997             aliases.put("PALM", PALMYRENE);
7998             aliases.put("PAUC", PAU_CIN_HAU);
7999             aliases.put("PERM", OLD_PERMIC);
8000             aliases.put("PHAG", PHAGS_PA);
8001             aliases.put("PHLI", INSCRIPTIONAL_PAHLAVI);
8002             aliases.put("PHLP", PSALTER_PAHLAVI);
8003             aliases.put("PHNX", PHOENICIAN);
8004             aliases.put("PLRD", MIAO);
8005             aliases.put("PRTI", INSCRIPTIONAL_PARTHIAN);
8006             aliases.put("RJNG", REJANG);
8007             aliases.put("ROHG", HANIFI_ROHINGYA);
8008             aliases.put("RUNR", RUNIC);
8009             aliases.put("SAMR", SAMARITAN);
8010             aliases.put("SARB", OLD_SOUTH_ARABIAN);
8011             aliases.put("SAUR", SAURASHTRA);
8012             aliases.put("SGNW", SIGNWRITING);
8013             aliases.put("SHAW", SHAVIAN);
8014             aliases.put("SHRD", SHARADA);
8015             aliases.put("SIDD", SIDDHAM);
8016             aliases.put("SIND", KHUDAWADI);
8017             aliases.put("SINH", SINHALA);
8018             aliases.put("SOGD", SOGDIAN);
8019             aliases.put("SOGO", OLD_SOGDIAN);
8020             aliases.put("SORA", SORA_SOMPENG);
8021             aliases.put("SOYO", SOYOMBO);
8022             aliases.put("SUND", SUNDANESE);
8023             aliases.put("SYLO", SYLOTI_NAGRI);
8024             aliases.put("SYRC", SYRIAC);
8025             aliases.put("TAGB", TAGBANWA);
8026             aliases.put("TAKR", TAKRI);
8027             aliases.put("TALE", TAI_LE);
8028             aliases.put("TALU", NEW_TAI_LUE);
8029             aliases.put("TAML", TAMIL);
8030             aliases.put("TANG", TANGUT);
8031             aliases.put("TAVT", TAI_VIET);
8032             aliases.put("TELU", TELUGU);
8033             aliases.put("TFNG", TIFINAGH);
8034             aliases.put("TGLG", TAGALOG);
8035             aliases.put("THAA", THAANA);
8036             aliases.put("THAI", THAI);
8037             aliases.put("TIBT", TIBETAN);
8038             aliases.put("TIRH", TIRHUTA);
8039             aliases.put("UGAR", UGARITIC);
8040             aliases.put("VAII", VAI);
8041             aliases.put("WARA", WARANG_CITI);
8042             aliases.put("XPEO", OLD_PERSIAN);
8043             aliases.put("XSUX", CUNEIFORM);
8044             aliases.put("YIII", YI);
8045             aliases.put("ZANB", ZANABAZAR_SQUARE);
8046             aliases.put("ZINH", INHERITED);
8047             aliases.put("ZYYY", COMMON);
8048             aliases.put("ZZZZ", UNKNOWN);
8049         }
8050 
8051         /**
8052          * Returns the enum constant representing the Unicode script of which
8053          * the given character (Unicode code point) is assigned to.
8054          *
8055          * @param   codePoint the character (Unicode code point) in question.
8056          * @return  The {@code UnicodeScript} constant representing the
8057          *          Unicode script of which this character is assigned to.
8058          *
8059          * @throws  IllegalArgumentException if the specified
8060          * {@code codePoint} is an invalid Unicode code point.
8061          * @see Character#isValidCodePoint(int)
8062          *
8063          */
8064         public static UnicodeScript of(int codePoint) {
8065             if (!isValidCodePoint(codePoint))
8066                 throw new IllegalArgumentException(
8067                     String.format("Not a valid Unicode code point: 0x%X", codePoint));
8068             int type = getType(codePoint);
8069             // leave SURROGATE and PRIVATE_USE for table lookup
8070             if (type == UNASSIGNED)
8071                 return UNKNOWN;
8072             int index = Arrays.binarySearch(scriptStarts, codePoint);
8073             if (index < 0)
8074                 index = -index - 2;
8075             return scripts[index];
8076         }
8077 
8078         /**
8079          * Returns the UnicodeScript constant with the given Unicode script
8080          * name or the script name alias. Script names and their aliases are
8081          * determined by The Unicode Standard. The files {@code Scripts<version>.txt}
8082          * and {@code PropertyValueAliases<version>.txt} define script names
8083          * and the script name aliases for a particular version of the
8084          * standard. The {@link Character} class specifies the version of
8085          * the standard that it supports.
8086          * <p>
8087          * Character case is ignored for all of the valid script names.
8088          * The en_US locale's case mapping rules are used to provide
8089          * case-insensitive string comparisons for script name validation.
8090          *
8091          * @param scriptName A {@code UnicodeScript} name.
8092          * @return The {@code UnicodeScript} constant identified
8093          *         by {@code scriptName}
8094          * @throws IllegalArgumentException if {@code scriptName} is an
8095          *         invalid name
8096          * @throws NullPointerException if {@code scriptName} is null
8097          */
8098         public static final UnicodeScript forName(String scriptName) {
8099             scriptName = scriptName.toUpperCase(Locale.ENGLISH);
8100                                  //.replace(' ', '_'));
8101             UnicodeScript sc = aliases.get(scriptName);
8102             if (sc != null)
8103                 return sc;
8104             return valueOf(scriptName);
8105         }
8106     }
8107 
8108     /**
8109      * The value of the {@code Character}.
8110      *
8111      * @serial
8112      */
8113     private final char value;
8114 
8115     /** use serialVersionUID from JDK 1.0.2 for interoperability */
8116     private static final long serialVersionUID = 3786198910865385080L;
8117 
8118     /**
8119      * Constructs a newly allocated {@code Character} object that
8120      * represents the specified {@code char} value.
8121      *
8122      * @param  value   the value to be represented by the
8123      *                  {@code Character} object.
8124      *
8125      * @deprecated
8126      * It is rarely appropriate to use this constructor. The static factory
8127      * {@link #valueOf(char)} is generally a better choice, as it is
8128      * likely to yield significantly better space and time performance.
8129      */
8130     @Deprecated(since="9")
8131     public Character(char value) {
8132         this.value = value;
8133     }
8134 
8135     private static class CharacterCache {
8136         private CharacterCache(){}
8137 
8138         static final Character[] cache;
8139         static Character[] archivedCache;
8140 
8141         static {
8142             int size = 127 + 1;
8143 
8144             // Load and use the archived cache if it exists
8145             VM.initializeFromArchive(CharacterCache.class);
8146             if (archivedCache == null || archivedCache.length != size) {
8147                 Character[] c = new Character[size];
8148                 for (int i = 0; i < size; i++) {
8149                     c[i] = new Character((char) i);
8150                 }
8151                 archivedCache = c;
8152             }
8153             cache = archivedCache;
8154         }
8155     }
8156 
8157     /**
8158      * Returns a {@code Character} instance representing the specified
8159      * {@code char} value.
8160      * If a new {@code Character} instance is not required, this method
8161      * should generally be used in preference to the constructor
8162      * {@link #Character(char)}, as this method is likely to yield
8163      * significantly better space and time performance by caching
8164      * frequently requested values.
8165      *
8166      * This method will always cache values in the range {@code
8167      * '\u005Cu0000'} to {@code '\u005Cu007F'}, inclusive, and may
8168      * cache other values outside of this range.
8169      *
8170      * @param  c a char value.
8171      * @return a {@code Character} instance representing {@code c}.
8172      * @since  1.5
8173      */
8174     @HotSpotIntrinsicCandidate
8175     public static Character valueOf(char c) {
8176         if (c <= 127) { // must cache
8177             return CharacterCache.cache[(int)c];
8178         }
8179         return new Character(c);
8180     }
8181 
8182     /**
8183      * Returns the value of this {@code Character} object.
8184      * @return  the primitive {@code char} value represented by
8185      *          this object.
8186      */
8187     @HotSpotIntrinsicCandidate
8188     public char charValue() {
8189         return value;
8190     }
8191 
8192     /**
8193      * Returns a hash code for this {@code Character}; equal to the result
8194      * of invoking {@code charValue()}.
8195      *
8196      * @return a hash code value for this {@code Character}
8197      */
8198     @Override
8199     public int hashCode() {
8200         return Character.hashCode(value);
8201     }
8202 
8203     /**
8204      * Returns a hash code for a {@code char} value; compatible with
8205      * {@code Character.hashCode()}.
8206      *
8207      * @since 1.8
8208      *
8209      * @param value The {@code char} for which to return a hash code.
8210      * @return a hash code value for a {@code char} value.
8211      */
8212     public static int hashCode(char value) {
8213         return (int)value;
8214     }
8215 
8216     /**
8217      * Compares this object against the specified object.
8218      * The result is {@code true} if and only if the argument is not
8219      * {@code null} and is a {@code Character} object that
8220      * represents the same {@code char} value as this object.
8221      *
8222      * @param   obj   the object to compare with.
8223      * @return  {@code true} if the objects are the same;
8224      *          {@code false} otherwise.
8225      */
8226     public boolean equals(Object obj) {
8227         if (obj instanceof Character) {
8228             return value == ((Character)obj).charValue();
8229         }
8230         return false;
8231     }
8232 
8233     /**
8234      * Returns a {@code String} object representing this
8235      * {@code Character}'s value.  The result is a string of
8236      * length 1 whose sole component is the primitive
8237      * {@code char} value represented by this
8238      * {@code Character} object.
8239      *
8240      * @return  a string representation of this object.
8241      */
8242     public String toString() {
8243         char buf[] = {value};
8244         return String.valueOf(buf);
8245     }
8246 
8247     /**
8248      * Returns a {@code String} object representing the
8249      * specified {@code char}.  The result is a string of length
8250      * 1 consisting solely of the specified {@code char}.
8251      *
8252      * @apiNote This method cannot handle <a
8253      * href="#supplementary"> supplementary characters</a>. To support
8254      * all Unicode characters, including supplementary characters, use
8255      * the {@link #toString(int)} method.
8256      *
8257      * @param c the {@code char} to be converted
8258      * @return the string representation of the specified {@code char}
8259      * @since 1.4
8260      */
8261     public static String toString(char c) {
8262         return String.valueOf(c);
8263     }
8264 
8265     /**
8266      * Returns a {@code String} object representing the
8267      * specified character (Unicode code point).  The result is a string of
8268      * length 1 or 2, consisting solely of the specified {@code codePoint}.
8269      *
8270      * @param codePoint the {@code codePoint} to be converted
8271      * @return the string representation of the specified {@code codePoint}
8272      * @throws IllegalArgumentException if the specified
8273      *      {@code codePoint} is not a {@linkplain #isValidCodePoint
8274      *      valid Unicode code point}.
8275      * @since 11
8276      */
8277     public static String toString(int codePoint) {
8278         return String.valueOfCodePoint(codePoint);
8279     }
8280 
8281     /**
8282      * Determines whether the specified code point is a valid
8283      * <a href="http://www.unicode.org/glossary/#code_point">
8284      * Unicode code point value</a>.
8285      *
8286      * @param  codePoint the Unicode code point to be tested
8287      * @return {@code true} if the specified code point value is between
8288      *         {@link #MIN_CODE_POINT} and
8289      *         {@link #MAX_CODE_POINT} inclusive;
8290      *         {@code false} otherwise.
8291      * @since  1.5
8292      */
8293     public static boolean isValidCodePoint(int codePoint) {
8294         // Optimized form of:
8295         //     codePoint >= MIN_CODE_POINT && codePoint <= MAX_CODE_POINT
8296         int plane = codePoint >>> 16;
8297         return plane < ((MAX_CODE_POINT + 1) >>> 16);
8298     }
8299 
8300     /**
8301      * Determines whether the specified character (Unicode code point)
8302      * is in the <a href="#BMP">Basic Multilingual Plane (BMP)</a>.
8303      * Such code points can be represented using a single {@code char}.
8304      *
8305      * @param  codePoint the character (Unicode code point) to be tested
8306      * @return {@code true} if the specified code point is between
8307      *         {@link #MIN_VALUE} and {@link #MAX_VALUE} inclusive;
8308      *         {@code false} otherwise.
8309      * @since  1.7
8310      */
8311     public static boolean isBmpCodePoint(int codePoint) {
8312         return codePoint >>> 16 == 0;
8313         // Optimized form of:
8314         //     codePoint >= MIN_VALUE && codePoint <= MAX_VALUE
8315         // We consistently use logical shift (>>>) to facilitate
8316         // additional runtime optimizations.
8317     }
8318 
8319     /**
8320      * Determines whether the specified character (Unicode code point)
8321      * is in the <a href="#supplementary">supplementary character</a> range.
8322      *
8323      * @param  codePoint the character (Unicode code point) to be tested
8324      * @return {@code true} if the specified code point is between
8325      *         {@link #MIN_SUPPLEMENTARY_CODE_POINT} and
8326      *         {@link #MAX_CODE_POINT} inclusive;
8327      *         {@code false} otherwise.
8328      * @since  1.5
8329      */
8330     public static boolean isSupplementaryCodePoint(int codePoint) {
8331         return codePoint >= MIN_SUPPLEMENTARY_CODE_POINT
8332             && codePoint <  MAX_CODE_POINT + 1;
8333     }
8334 
8335     /**
8336      * Determines if the given {@code char} value is a
8337      * <a href="http://www.unicode.org/glossary/#high_surrogate_code_unit">
8338      * Unicode high-surrogate code unit</a>
8339      * (also known as <i>leading-surrogate code unit</i>).
8340      *
8341      * <p>Such values do not represent characters by themselves,
8342      * but are used in the representation of
8343      * <a href="#supplementary">supplementary characters</a>
8344      * in the UTF-16 encoding.
8345      *
8346      * @param  ch the {@code char} value to be tested.
8347      * @return {@code true} if the {@code char} value is between
8348      *         {@link #MIN_HIGH_SURROGATE} and
8349      *         {@link #MAX_HIGH_SURROGATE} inclusive;
8350      *         {@code false} otherwise.
8351      * @see    Character#isLowSurrogate(char)
8352      * @see    Character.UnicodeBlock#of(int)
8353      * @since  1.5
8354      */
8355     public static boolean isHighSurrogate(char ch) {
8356         // Help VM constant-fold; MAX_HIGH_SURROGATE + 1 == MIN_LOW_SURROGATE
8357         return ch >= MIN_HIGH_SURROGATE && ch < (MAX_HIGH_SURROGATE + 1);
8358     }
8359 
8360     /**
8361      * Determines if the given {@code char} value is a
8362      * <a href="http://www.unicode.org/glossary/#low_surrogate_code_unit">
8363      * Unicode low-surrogate code unit</a>
8364      * (also known as <i>trailing-surrogate code unit</i>).
8365      *
8366      * <p>Such values do not represent characters by themselves,
8367      * but are used in the representation of
8368      * <a href="#supplementary">supplementary characters</a>
8369      * in the UTF-16 encoding.
8370      *
8371      * @param  ch the {@code char} value to be tested.
8372      * @return {@code true} if the {@code char} value is between
8373      *         {@link #MIN_LOW_SURROGATE} and
8374      *         {@link #MAX_LOW_SURROGATE} inclusive;
8375      *         {@code false} otherwise.
8376      * @see    Character#isHighSurrogate(char)
8377      * @since  1.5
8378      */
8379     public static boolean isLowSurrogate(char ch) {
8380         return ch >= MIN_LOW_SURROGATE && ch < (MAX_LOW_SURROGATE + 1);
8381     }
8382 
8383     /**
8384      * Determines if the given {@code char} value is a Unicode
8385      * <i>surrogate code unit</i>.
8386      *
8387      * <p>Such values do not represent characters by themselves,
8388      * but are used in the representation of
8389      * <a href="#supplementary">supplementary characters</a>
8390      * in the UTF-16 encoding.
8391      *
8392      * <p>A char value is a surrogate code unit if and only if it is either
8393      * a {@linkplain #isLowSurrogate(char) low-surrogate code unit} or
8394      * a {@linkplain #isHighSurrogate(char) high-surrogate code unit}.
8395      *
8396      * @param  ch the {@code char} value to be tested.
8397      * @return {@code true} if the {@code char} value is between
8398      *         {@link #MIN_SURROGATE} and
8399      *         {@link #MAX_SURROGATE} inclusive;
8400      *         {@code false} otherwise.
8401      * @since  1.7
8402      */
8403     public static boolean isSurrogate(char ch) {
8404         return ch >= MIN_SURROGATE && ch < (MAX_SURROGATE + 1);
8405     }
8406 
8407     /**
8408      * Determines whether the specified pair of {@code char}
8409      * values is a valid
8410      * <a href="http://www.unicode.org/glossary/#surrogate_pair">
8411      * Unicode surrogate pair</a>.
8412 
8413      * <p>This method is equivalent to the expression:
8414      * <blockquote><pre>{@code
8415      * isHighSurrogate(high) && isLowSurrogate(low)
8416      * }</pre></blockquote>
8417      *
8418      * @param  high the high-surrogate code value to be tested
8419      * @param  low the low-surrogate code value to be tested
8420      * @return {@code true} if the specified high and
8421      * low-surrogate code values represent a valid surrogate pair;
8422      * {@code false} otherwise.
8423      * @since  1.5
8424      */
8425     public static boolean isSurrogatePair(char high, char low) {
8426         return isHighSurrogate(high) && isLowSurrogate(low);
8427     }
8428 
8429     /**
8430      * Determines the number of {@code char} values needed to
8431      * represent the specified character (Unicode code point). If the
8432      * specified character is equal to or greater than 0x10000, then
8433      * the method returns 2. Otherwise, the method returns 1.
8434      *
8435      * <p>This method doesn't validate the specified character to be a
8436      * valid Unicode code point. The caller must validate the
8437      * character value using {@link #isValidCodePoint(int) isValidCodePoint}
8438      * if necessary.
8439      *
8440      * @param   codePoint the character (Unicode code point) to be tested.
8441      * @return  2 if the character is a valid supplementary character; 1 otherwise.
8442      * @see     Character#isSupplementaryCodePoint(int)
8443      * @since   1.5
8444      */
8445     public static int charCount(int codePoint) {
8446         return codePoint >= MIN_SUPPLEMENTARY_CODE_POINT ? 2 : 1;
8447     }
8448 
8449     /**
8450      * Converts the specified surrogate pair to its supplementary code
8451      * point value. This method does not validate the specified
8452      * surrogate pair. The caller must validate it using {@link
8453      * #isSurrogatePair(char, char) isSurrogatePair} if necessary.
8454      *
8455      * @param  high the high-surrogate code unit
8456      * @param  low the low-surrogate code unit
8457      * @return the supplementary code point composed from the
8458      *         specified surrogate pair.
8459      * @since  1.5
8460      */
8461     public static int toCodePoint(char high, char low) {
8462         // Optimized form of:
8463         // return ((high - MIN_HIGH_SURROGATE) << 10)
8464         //         + (low - MIN_LOW_SURROGATE)
8465         //         + MIN_SUPPLEMENTARY_CODE_POINT;
8466         return ((high << 10) + low) + (MIN_SUPPLEMENTARY_CODE_POINT
8467                                        - (MIN_HIGH_SURROGATE << 10)
8468                                        - MIN_LOW_SURROGATE);
8469     }
8470 
8471     /**
8472      * Returns the code point at the given index of the
8473      * {@code CharSequence}. If the {@code char} value at
8474      * the given index in the {@code CharSequence} is in the
8475      * high-surrogate range, the following index is less than the
8476      * length of the {@code CharSequence}, and the
8477      * {@code char} value at the following index is in the
8478      * low-surrogate range, then the supplementary code point
8479      * corresponding to this surrogate pair is returned. Otherwise,
8480      * the {@code char} value at the given index is returned.
8481      *
8482      * @param seq a sequence of {@code char} values (Unicode code
8483      * units)
8484      * @param index the index to the {@code char} values (Unicode
8485      * code units) in {@code seq} to be converted
8486      * @return the Unicode code point at the given index
8487      * @throws NullPointerException if {@code seq} is null.
8488      * @throws IndexOutOfBoundsException if the value
8489      * {@code index} is negative or not less than
8490      * {@link CharSequence#length() seq.length()}.
8491      * @since  1.5
8492      */
8493     public static int codePointAt(CharSequence seq, int index) {
8494         char c1 = seq.charAt(index);
8495         if (isHighSurrogate(c1) && ++index < seq.length()) {
8496             char c2 = seq.charAt(index);
8497             if (isLowSurrogate(c2)) {
8498                 return toCodePoint(c1, c2);
8499             }
8500         }
8501         return c1;
8502     }
8503 
8504     /**
8505      * Returns the code point at the given index of the
8506      * {@code char} array. If the {@code char} value at
8507      * the given index in the {@code char} array is in the
8508      * high-surrogate range, the following index is less than the
8509      * length of the {@code char} array, and the
8510      * {@code char} value at the following index is in the
8511      * low-surrogate range, then the supplementary code point
8512      * corresponding to this surrogate pair is returned. Otherwise,
8513      * the {@code char} value at the given index is returned.
8514      *
8515      * @param a the {@code char} array
8516      * @param index the index to the {@code char} values (Unicode
8517      * code units) in the {@code char} array to be converted
8518      * @return the Unicode code point at the given index
8519      * @throws NullPointerException if {@code a} is null.
8520      * @throws IndexOutOfBoundsException if the value
8521      * {@code index} is negative or not less than
8522      * the length of the {@code char} array.
8523      * @since  1.5
8524      */
8525     public static int codePointAt(char[] a, int index) {
8526         return codePointAtImpl(a, index, a.length);
8527     }
8528 
8529     /**
8530      * Returns the code point at the given index of the
8531      * {@code char} array, where only array elements with
8532      * {@code index} less than {@code limit} can be used. If
8533      * the {@code char} value at the given index in the
8534      * {@code char} array is in the high-surrogate range, the
8535      * following index is less than the {@code limit}, and the
8536      * {@code char} value at the following index is in the
8537      * low-surrogate range, then the supplementary code point
8538      * corresponding to this surrogate pair is returned. Otherwise,
8539      * the {@code char} value at the given index is returned.
8540      *
8541      * @param a the {@code char} array
8542      * @param index the index to the {@code char} values (Unicode
8543      * code units) in the {@code char} array to be converted
8544      * @param limit the index after the last array element that
8545      * can be used in the {@code char} array
8546      * @return the Unicode code point at the given index
8547      * @throws NullPointerException if {@code a} is null.
8548      * @throws IndexOutOfBoundsException if the {@code index}
8549      * argument is negative or not less than the {@code limit}
8550      * argument, or if the {@code limit} argument is negative or
8551      * greater than the length of the {@code char} array.
8552      * @since  1.5
8553      */
8554     public static int codePointAt(char[] a, int index, int limit) {
8555         if (index >= limit || limit < 0 || limit > a.length) {
8556             throw new IndexOutOfBoundsException();
8557         }
8558         return codePointAtImpl(a, index, limit);
8559     }
8560 
8561     // throws ArrayIndexOutOfBoundsException if index out of bounds
8562     static int codePointAtImpl(char[] a, int index, int limit) {
8563         char c1 = a[index];
8564         if (isHighSurrogate(c1) && ++index < limit) {
8565             char c2 = a[index];
8566             if (isLowSurrogate(c2)) {
8567                 return toCodePoint(c1, c2);
8568             }
8569         }
8570         return c1;
8571     }
8572 
8573     /**
8574      * Returns the code point preceding the given index of the
8575      * {@code CharSequence}. If the {@code char} value at
8576      * {@code (index - 1)} in the {@code CharSequence} is in
8577      * the low-surrogate range, {@code (index - 2)} is not
8578      * negative, and the {@code char} value at {@code (index - 2)}
8579      * in the {@code CharSequence} is in the
8580      * high-surrogate range, then the supplementary code point
8581      * corresponding to this surrogate pair is returned. Otherwise,
8582      * the {@code char} value at {@code (index - 1)} is
8583      * returned.
8584      *
8585      * @param seq the {@code CharSequence} instance
8586      * @param index the index following the code point that should be returned
8587      * @return the Unicode code point value before the given index.
8588      * @throws NullPointerException if {@code seq} is null.
8589      * @throws IndexOutOfBoundsException if the {@code index}
8590      * argument is less than 1 or greater than {@link
8591      * CharSequence#length() seq.length()}.
8592      * @since  1.5
8593      */
8594     public static int codePointBefore(CharSequence seq, int index) {
8595         char c2 = seq.charAt(--index);
8596         if (isLowSurrogate(c2) && index > 0) {
8597             char c1 = seq.charAt(--index);
8598             if (isHighSurrogate(c1)) {
8599                 return toCodePoint(c1, c2);
8600             }
8601         }
8602         return c2;
8603     }
8604 
8605     /**
8606      * Returns the code point preceding the given index of the
8607      * {@code char} array. If the {@code char} value at
8608      * {@code (index - 1)} in the {@code char} array is in
8609      * the low-surrogate range, {@code (index - 2)} is not
8610      * negative, and the {@code char} value at {@code (index - 2)}
8611      * in the {@code char} array is in the
8612      * high-surrogate range, then the supplementary code point
8613      * corresponding to this surrogate pair is returned. Otherwise,
8614      * the {@code char} value at {@code (index - 1)} is
8615      * returned.
8616      *
8617      * @param a the {@code char} array
8618      * @param index the index following the code point that should be returned
8619      * @return the Unicode code point value before the given index.
8620      * @throws NullPointerException if {@code a} is null.
8621      * @throws IndexOutOfBoundsException if the {@code index}
8622      * argument is less than 1 or greater than the length of the
8623      * {@code char} array
8624      * @since  1.5
8625      */
8626     public static int codePointBefore(char[] a, int index) {
8627         return codePointBeforeImpl(a, index, 0);
8628     }
8629 
8630     /**
8631      * Returns the code point preceding the given index of the
8632      * {@code char} array, where only array elements with
8633      * {@code index} greater than or equal to {@code start}
8634      * can be used. If the {@code char} value at {@code (index - 1)}
8635      * in the {@code char} array is in the
8636      * low-surrogate range, {@code (index - 2)} is not less than
8637      * {@code start}, and the {@code char} value at
8638      * {@code (index - 2)} in the {@code char} array is in
8639      * the high-surrogate range, then the supplementary code point
8640      * corresponding to this surrogate pair is returned. Otherwise,
8641      * the {@code char} value at {@code (index - 1)} is
8642      * returned.
8643      *
8644      * @param a the {@code char} array
8645      * @param index the index following the code point that should be returned
8646      * @param start the index of the first array element in the
8647      * {@code char} array
8648      * @return the Unicode code point value before the given index.
8649      * @throws NullPointerException if {@code a} is null.
8650      * @throws IndexOutOfBoundsException if the {@code index}
8651      * argument is not greater than the {@code start} argument or
8652      * is greater than the length of the {@code char} array, or
8653      * if the {@code start} argument is negative or not less than
8654      * the length of the {@code char} array.
8655      * @since  1.5
8656      */
8657     public static int codePointBefore(char[] a, int index, int start) {
8658         if (index <= start || start < 0 || start >= a.length) {
8659             throw new IndexOutOfBoundsException();
8660         }
8661         return codePointBeforeImpl(a, index, start);
8662     }
8663 
8664     // throws ArrayIndexOutOfBoundsException if index-1 out of bounds
8665     static int codePointBeforeImpl(char[] a, int index, int start) {
8666         char c2 = a[--index];
8667         if (isLowSurrogate(c2) && index > start) {
8668             char c1 = a[--index];
8669             if (isHighSurrogate(c1)) {
8670                 return toCodePoint(c1, c2);
8671             }
8672         }
8673         return c2;
8674     }
8675 
8676     /**
8677      * Returns the leading surrogate (a
8678      * <a href="http://www.unicode.org/glossary/#high_surrogate_code_unit">
8679      * high surrogate code unit</a>) of the
8680      * <a href="http://www.unicode.org/glossary/#surrogate_pair">
8681      * surrogate pair</a>
8682      * representing the specified supplementary character (Unicode
8683      * code point) in the UTF-16 encoding.  If the specified character
8684      * is not a
8685      * <a href="Character.html#supplementary">supplementary character</a>,
8686      * an unspecified {@code char} is returned.
8687      *
8688      * <p>If
8689      * {@link #isSupplementaryCodePoint isSupplementaryCodePoint(x)}
8690      * is {@code true}, then
8691      * {@link #isHighSurrogate isHighSurrogate}{@code (highSurrogate(x))} and
8692      * {@link #toCodePoint toCodePoint}{@code (highSurrogate(x), }{@link #lowSurrogate lowSurrogate}{@code (x)) == x}
8693      * are also always {@code true}.
8694      *
8695      * @param   codePoint a supplementary character (Unicode code point)
8696      * @return  the leading surrogate code unit used to represent the
8697      *          character in the UTF-16 encoding
8698      * @since   1.7
8699      */
8700     public static char highSurrogate(int codePoint) {
8701         return (char) ((codePoint >>> 10)
8702             + (MIN_HIGH_SURROGATE - (MIN_SUPPLEMENTARY_CODE_POINT >>> 10)));
8703     }
8704 
8705     /**
8706      * Returns the trailing surrogate (a
8707      * <a href="http://www.unicode.org/glossary/#low_surrogate_code_unit">
8708      * low surrogate code unit</a>) of the
8709      * <a href="http://www.unicode.org/glossary/#surrogate_pair">
8710      * surrogate pair</a>
8711      * representing the specified supplementary character (Unicode
8712      * code point) in the UTF-16 encoding.  If the specified character
8713      * is not a
8714      * <a href="Character.html#supplementary">supplementary character</a>,
8715      * an unspecified {@code char} is returned.
8716      *
8717      * <p>If
8718      * {@link #isSupplementaryCodePoint isSupplementaryCodePoint(x)}
8719      * is {@code true}, then
8720      * {@link #isLowSurrogate isLowSurrogate}{@code (lowSurrogate(x))} and
8721      * {@link #toCodePoint toCodePoint}{@code (}{@link #highSurrogate highSurrogate}{@code (x), lowSurrogate(x)) == x}
8722      * are also always {@code true}.
8723      *
8724      * @param   codePoint a supplementary character (Unicode code point)
8725      * @return  the trailing surrogate code unit used to represent the
8726      *          character in the UTF-16 encoding
8727      * @since   1.7
8728      */
8729     public static char lowSurrogate(int codePoint) {
8730         return (char) ((codePoint & 0x3ff) + MIN_LOW_SURROGATE);
8731     }
8732 
8733     /**
8734      * Converts the specified character (Unicode code point) to its
8735      * UTF-16 representation. If the specified code point is a BMP
8736      * (Basic Multilingual Plane or Plane 0) value, the same value is
8737      * stored in {@code dst[dstIndex]}, and 1 is returned. If the
8738      * specified code point is a supplementary character, its
8739      * surrogate values are stored in {@code dst[dstIndex]}
8740      * (high-surrogate) and {@code dst[dstIndex+1]}
8741      * (low-surrogate), and 2 is returned.
8742      *
8743      * @param  codePoint the character (Unicode code point) to be converted.
8744      * @param  dst an array of {@code char} in which the
8745      * {@code codePoint}'s UTF-16 value is stored.
8746      * @param dstIndex the start index into the {@code dst}
8747      * array where the converted value is stored.
8748      * @return 1 if the code point is a BMP code point, 2 if the
8749      * code point is a supplementary code point.
8750      * @throws IllegalArgumentException if the specified
8751      * {@code codePoint} is not a valid Unicode code point.
8752      * @throws NullPointerException if the specified {@code dst} is null.
8753      * @throws IndexOutOfBoundsException if {@code dstIndex}
8754      * is negative or not less than {@code dst.length}, or if
8755      * {@code dst} at {@code dstIndex} doesn't have enough
8756      * array element(s) to store the resulting {@code char}
8757      * value(s). (If {@code dstIndex} is equal to
8758      * {@code dst.length-1} and the specified
8759      * {@code codePoint} is a supplementary character, the
8760      * high-surrogate value is not stored in
8761      * {@code dst[dstIndex]}.)
8762      * @since  1.5
8763      */
8764     public static int toChars(int codePoint, char[] dst, int dstIndex) {
8765         if (isBmpCodePoint(codePoint)) {
8766             dst[dstIndex] = (char) codePoint;
8767             return 1;
8768         } else if (isValidCodePoint(codePoint)) {
8769             toSurrogates(codePoint, dst, dstIndex);
8770             return 2;
8771         } else {
8772             throw new IllegalArgumentException(
8773                 String.format("Not a valid Unicode code point: 0x%X", codePoint));
8774         }
8775     }
8776 
8777     /**
8778      * Converts the specified character (Unicode code point) to its
8779      * UTF-16 representation stored in a {@code char} array. If
8780      * the specified code point is a BMP (Basic Multilingual Plane or
8781      * Plane 0) value, the resulting {@code char} array has
8782      * the same value as {@code codePoint}. If the specified code
8783      * point is a supplementary code point, the resulting
8784      * {@code char} array has the corresponding surrogate pair.
8785      *
8786      * @param  codePoint a Unicode code point
8787      * @return a {@code char} array having
8788      *         {@code codePoint}'s UTF-16 representation.
8789      * @throws IllegalArgumentException if the specified
8790      * {@code codePoint} is not a valid Unicode code point.
8791      * @since  1.5
8792      */
8793     public static char[] toChars(int codePoint) {
8794         if (isBmpCodePoint(codePoint)) {
8795             return new char[] { (char) codePoint };
8796         } else if (isValidCodePoint(codePoint)) {
8797             char[] result = new char[2];
8798             toSurrogates(codePoint, result, 0);
8799             return result;
8800         } else {
8801             throw new IllegalArgumentException(
8802                 String.format("Not a valid Unicode code point: 0x%X", codePoint));
8803         }
8804     }
8805 
8806     static void toSurrogates(int codePoint, char[] dst, int index) {
8807         // We write elements "backwards" to guarantee all-or-nothing
8808         dst[index+1] = lowSurrogate(codePoint);
8809         dst[index] = highSurrogate(codePoint);
8810     }
8811 
8812     /**
8813      * Returns the number of Unicode code points in the text range of
8814      * the specified char sequence. The text range begins at the
8815      * specified {@code beginIndex} and extends to the
8816      * {@code char} at index {@code endIndex - 1}. Thus the
8817      * length (in {@code char}s) of the text range is
8818      * {@code endIndex-beginIndex}. Unpaired surrogates within
8819      * the text range count as one code point each.
8820      *
8821      * @param seq the char sequence
8822      * @param beginIndex the index to the first {@code char} of
8823      * the text range.
8824      * @param endIndex the index after the last {@code char} of
8825      * the text range.
8826      * @return the number of Unicode code points in the specified text
8827      * range
8828      * @throws NullPointerException if {@code seq} is null.
8829      * @throws IndexOutOfBoundsException if the
8830      * {@code beginIndex} is negative, or {@code endIndex}
8831      * is larger than the length of the given sequence, or
8832      * {@code beginIndex} is larger than {@code endIndex}.
8833      * @since  1.5
8834      */
8835     public static int codePointCount(CharSequence seq, int beginIndex, int endIndex) {
8836         int length = seq.length();
8837         if (beginIndex < 0 || endIndex > length || beginIndex > endIndex) {
8838             throw new IndexOutOfBoundsException();
8839         }
8840         int n = endIndex - beginIndex;
8841         for (int i = beginIndex; i < endIndex; ) {
8842             if (isHighSurrogate(seq.charAt(i++)) && i < endIndex &&
8843                 isLowSurrogate(seq.charAt(i))) {
8844                 n--;
8845                 i++;
8846             }
8847         }
8848         return n;
8849     }
8850 
8851     /**
8852      * Returns the number of Unicode code points in a subarray of the
8853      * {@code char} array argument. The {@code offset}
8854      * argument is the index of the first {@code char} of the
8855      * subarray and the {@code count} argument specifies the
8856      * length of the subarray in {@code char}s. Unpaired
8857      * surrogates within the subarray count as one code point each.
8858      *
8859      * @param a the {@code char} array
8860      * @param offset the index of the first {@code char} in the
8861      * given {@code char} array
8862      * @param count the length of the subarray in {@code char}s
8863      * @return the number of Unicode code points in the specified subarray
8864      * @throws NullPointerException if {@code a} is null.
8865      * @throws IndexOutOfBoundsException if {@code offset} or
8866      * {@code count} is negative, or if {@code offset +
8867      * count} is larger than the length of the given array.
8868      * @since  1.5
8869      */
8870     public static int codePointCount(char[] a, int offset, int count) {
8871         if (count > a.length - offset || offset < 0 || count < 0) {
8872             throw new IndexOutOfBoundsException();
8873         }
8874         return codePointCountImpl(a, offset, count);
8875     }
8876 
8877     static int codePointCountImpl(char[] a, int offset, int count) {
8878         int endIndex = offset + count;
8879         int n = count;
8880         for (int i = offset; i < endIndex; ) {
8881             if (isHighSurrogate(a[i++]) && i < endIndex &&
8882                 isLowSurrogate(a[i])) {
8883                 n--;
8884                 i++;
8885             }
8886         }
8887         return n;
8888     }
8889 
8890     /**
8891      * Returns the index within the given char sequence that is offset
8892      * from the given {@code index} by {@code codePointOffset}
8893      * code points. Unpaired surrogates within the text range given by
8894      * {@code index} and {@code codePointOffset} count as
8895      * one code point each.
8896      *
8897      * @param seq the char sequence
8898      * @param index the index to be offset
8899      * @param codePointOffset the offset in code points
8900      * @return the index within the char sequence
8901      * @throws NullPointerException if {@code seq} is null.
8902      * @throws IndexOutOfBoundsException if {@code index}
8903      *   is negative or larger then the length of the char sequence,
8904      *   or if {@code codePointOffset} is positive and the
8905      *   subsequence starting with {@code index} has fewer than
8906      *   {@code codePointOffset} code points, or if
8907      *   {@code codePointOffset} is negative and the subsequence
8908      *   before {@code index} has fewer than the absolute value
8909      *   of {@code codePointOffset} code points.
8910      * @since 1.5
8911      */
8912     public static int offsetByCodePoints(CharSequence seq, int index,
8913                                          int codePointOffset) {
8914         int length = seq.length();
8915         if (index < 0 || index > length) {
8916             throw new IndexOutOfBoundsException();
8917         }
8918 
8919         int x = index;
8920         if (codePointOffset >= 0) {
8921             int i;
8922             for (i = 0; x < length && i < codePointOffset; i++) {
8923                 if (isHighSurrogate(seq.charAt(x++)) && x < length &&
8924                     isLowSurrogate(seq.charAt(x))) {
8925                     x++;
8926                 }
8927             }
8928             if (i < codePointOffset) {
8929                 throw new IndexOutOfBoundsException();
8930             }
8931         } else {
8932             int i;
8933             for (i = codePointOffset; x > 0 && i < 0; i++) {
8934                 if (isLowSurrogate(seq.charAt(--x)) && x > 0 &&
8935                     isHighSurrogate(seq.charAt(x-1))) {
8936                     x--;
8937                 }
8938             }
8939             if (i < 0) {
8940                 throw new IndexOutOfBoundsException();
8941             }
8942         }
8943         return x;
8944     }
8945 
8946     /**
8947      * Returns the index within the given {@code char} subarray
8948      * that is offset from the given {@code index} by
8949      * {@code codePointOffset} code points. The
8950      * {@code start} and {@code count} arguments specify a
8951      * subarray of the {@code char} array. Unpaired surrogates
8952      * within the text range given by {@code index} and
8953      * {@code codePointOffset} count as one code point each.
8954      *
8955      * @param a the {@code char} array
8956      * @param start the index of the first {@code char} of the
8957      * subarray
8958      * @param count the length of the subarray in {@code char}s
8959      * @param index the index to be offset
8960      * @param codePointOffset the offset in code points
8961      * @return the index within the subarray
8962      * @throws NullPointerException if {@code a} is null.
8963      * @throws IndexOutOfBoundsException
8964      *   if {@code start} or {@code count} is negative,
8965      *   or if {@code start + count} is larger than the length of
8966      *   the given array,
8967      *   or if {@code index} is less than {@code start} or
8968      *   larger then {@code start + count},
8969      *   or if {@code codePointOffset} is positive and the text range
8970      *   starting with {@code index} and ending with {@code start + count - 1}
8971      *   has fewer than {@code codePointOffset} code
8972      *   points,
8973      *   or if {@code codePointOffset} is negative and the text range
8974      *   starting with {@code start} and ending with {@code index - 1}
8975      *   has fewer than the absolute value of
8976      *   {@code codePointOffset} code points.
8977      * @since 1.5
8978      */
8979     public static int offsetByCodePoints(char[] a, int start, int count,
8980                                          int index, int codePointOffset) {
8981         if (count > a.length-start || start < 0 || count < 0
8982             || index < start || index > start+count) {
8983             throw new IndexOutOfBoundsException();
8984         }
8985         return offsetByCodePointsImpl(a, start, count, index, codePointOffset);
8986     }
8987 
8988     static int offsetByCodePointsImpl(char[]a, int start, int count,
8989                                       int index, int codePointOffset) {
8990         int x = index;
8991         if (codePointOffset >= 0) {
8992             int limit = start + count;
8993             int i;
8994             for (i = 0; x < limit && i < codePointOffset; i++) {
8995                 if (isHighSurrogate(a[x++]) && x < limit &&
8996                     isLowSurrogate(a[x])) {
8997                     x++;
8998                 }
8999             }
9000             if (i < codePointOffset) {
9001                 throw new IndexOutOfBoundsException();
9002             }
9003         } else {
9004             int i;
9005             for (i = codePointOffset; x > start && i < 0; i++) {
9006                 if (isLowSurrogate(a[--x]) && x > start &&
9007                     isHighSurrogate(a[x-1])) {
9008                     x--;
9009                 }
9010             }
9011             if (i < 0) {
9012                 throw new IndexOutOfBoundsException();
9013             }
9014         }
9015         return x;
9016     }
9017 
9018     /**
9019      * Determines if the specified character is a lowercase character.
9020      * <p>
9021      * A character is lowercase if its general category type, provided
9022      * by {@code Character.getType(ch)}, is
9023      * {@code LOWERCASE_LETTER}, or it has contributory property
9024      * Other_Lowercase as defined by the Unicode Standard.
9025      * <p>
9026      * The following are examples of lowercase characters:
9027      * <blockquote><pre>
9028      * 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
9029      * '\u00DF' '\u00E0' '\u00E1' '\u00E2' '\u00E3' '\u00E4' '\u00E5' '\u00E6'
9030      * '\u00E7' '\u00E8' '\u00E9' '\u00EA' '\u00EB' '\u00EC' '\u00ED' '\u00EE'
9031      * '\u00EF' '\u00F0' '\u00F1' '\u00F2' '\u00F3' '\u00F4' '\u00F5' '\u00F6'
9032      * '\u00F8' '\u00F9' '\u00FA' '\u00FB' '\u00FC' '\u00FD' '\u00FE' '\u00FF'
9033      * </pre></blockquote>
9034      * <p> Many other Unicode characters are lowercase too.
9035      *
9036      * <p><b>Note:</b> This method cannot handle <a
9037      * href="#supplementary"> supplementary characters</a>. To support
9038      * all Unicode characters, including supplementary characters, use
9039      * the {@link #isLowerCase(int)} method.
9040      *
9041      * @param   ch   the character to be tested.
9042      * @return  {@code true} if the character is lowercase;
9043      *          {@code false} otherwise.
9044      * @see     Character#isLowerCase(char)
9045      * @see     Character#isTitleCase(char)
9046      * @see     Character#toLowerCase(char)
9047      * @see     Character#getType(char)
9048      */
9049     public static boolean isLowerCase(char ch) {
9050         return isLowerCase((int)ch);
9051     }
9052 
9053     /**
9054      * Determines if the specified character (Unicode code point) is a
9055      * lowercase character.
9056      * <p>
9057      * A character is lowercase if its general category type, provided
9058      * by {@link Character#getType getType(codePoint)}, is
9059      * {@code LOWERCASE_LETTER}, or it has contributory property
9060      * Other_Lowercase as defined by the Unicode Standard.
9061      * <p>
9062      * The following are examples of lowercase characters:
9063      * <blockquote><pre>
9064      * 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
9065      * '\u00DF' '\u00E0' '\u00E1' '\u00E2' '\u00E3' '\u00E4' '\u00E5' '\u00E6'
9066      * '\u00E7' '\u00E8' '\u00E9' '\u00EA' '\u00EB' '\u00EC' '\u00ED' '\u00EE'
9067      * '\u00EF' '\u00F0' '\u00F1' '\u00F2' '\u00F3' '\u00F4' '\u00F5' '\u00F6'
9068      * '\u00F8' '\u00F9' '\u00FA' '\u00FB' '\u00FC' '\u00FD' '\u00FE' '\u00FF'
9069      * </pre></blockquote>
9070      * <p> Many other Unicode characters are lowercase too.
9071      *
9072      * @param   codePoint the character (Unicode code point) to be tested.
9073      * @return  {@code true} if the character is lowercase;
9074      *          {@code false} otherwise.
9075      * @see     Character#isLowerCase(int)
9076      * @see     Character#isTitleCase(int)
9077      * @see     Character#toLowerCase(int)
9078      * @see     Character#getType(int)
9079      * @since   1.5
9080      */
9081     public static boolean isLowerCase(int codePoint) {
9082         return CharacterData.of(codePoint).isLowerCase(codePoint) ||
9083                CharacterData.of(codePoint).isOtherLowercase(codePoint);
9084     }
9085 
9086     /**
9087      * Determines if the specified character is an uppercase character.
9088      * <p>
9089      * A character is uppercase if its general category type, provided by
9090      * {@code Character.getType(ch)}, is {@code UPPERCASE_LETTER}.
9091      * or it has contributory property Other_Uppercase as defined by the Unicode Standard.
9092      * <p>
9093      * The following are examples of uppercase characters:
9094      * <blockquote><pre>
9095      * 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
9096      * '\u00C0' '\u00C1' '\u00C2' '\u00C3' '\u00C4' '\u00C5' '\u00C6' '\u00C7'
9097      * '\u00C8' '\u00C9' '\u00CA' '\u00CB' '\u00CC' '\u00CD' '\u00CE' '\u00CF'
9098      * '\u00D0' '\u00D1' '\u00D2' '\u00D3' '\u00D4' '\u00D5' '\u00D6' '\u00D8'
9099      * '\u00D9' '\u00DA' '\u00DB' '\u00DC' '\u00DD' '\u00DE'
9100      * </pre></blockquote>
9101      * <p> Many other Unicode characters are uppercase too.
9102      *
9103      * <p><b>Note:</b> This method cannot handle <a
9104      * href="#supplementary"> supplementary characters</a>. To support
9105      * all Unicode characters, including supplementary characters, use
9106      * the {@link #isUpperCase(int)} method.
9107      *
9108      * @param   ch   the character to be tested.
9109      * @return  {@code true} if the character is uppercase;
9110      *          {@code false} otherwise.
9111      * @see     Character#isLowerCase(char)
9112      * @see     Character#isTitleCase(char)
9113      * @see     Character#toUpperCase(char)
9114      * @see     Character#getType(char)
9115      * @since   1.0
9116      */
9117     public static boolean isUpperCase(char ch) {
9118         return isUpperCase((int)ch);
9119     }
9120 
9121     /**
9122      * Determines if the specified character (Unicode code point) is an uppercase character.
9123      * <p>
9124      * A character is uppercase if its general category type, provided by
9125      * {@link Character#getType(int) getType(codePoint)}, is {@code UPPERCASE_LETTER},
9126      * or it has contributory property Other_Uppercase as defined by the Unicode Standard.
9127      * <p>
9128      * The following are examples of uppercase characters:
9129      * <blockquote><pre>
9130      * 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
9131      * '\u00C0' '\u00C1' '\u00C2' '\u00C3' '\u00C4' '\u00C5' '\u00C6' '\u00C7'
9132      * '\u00C8' '\u00C9' '\u00CA' '\u00CB' '\u00CC' '\u00CD' '\u00CE' '\u00CF'
9133      * '\u00D0' '\u00D1' '\u00D2' '\u00D3' '\u00D4' '\u00D5' '\u00D6' '\u00D8'
9134      * '\u00D9' '\u00DA' '\u00DB' '\u00DC' '\u00DD' '\u00DE'
9135      * </pre></blockquote>
9136      * <p> Many other Unicode characters are uppercase too.
9137      *
9138      * @param   codePoint the character (Unicode code point) to be tested.
9139      * @return  {@code true} if the character is uppercase;
9140      *          {@code false} otherwise.
9141      * @see     Character#isLowerCase(int)
9142      * @see     Character#isTitleCase(int)
9143      * @see     Character#toUpperCase(int)
9144      * @see     Character#getType(int)
9145      * @since   1.5
9146      */
9147     public static boolean isUpperCase(int codePoint) {
9148         return CharacterData.of(codePoint).isUpperCase(codePoint) ||
9149                CharacterData.of(codePoint).isOtherUppercase(codePoint);
9150     }
9151 
9152     /**
9153      * Determines if the specified character is a titlecase character.
9154      * <p>
9155      * A character is a titlecase character if its general
9156      * category type, provided by {@code Character.getType(ch)},
9157      * is {@code TITLECASE_LETTER}.
9158      * <p>
9159      * Some characters look like pairs of Latin letters. For example, there
9160      * is an uppercase letter that looks like "LJ" and has a corresponding
9161      * lowercase letter that looks like "lj". A third form, which looks like "Lj",
9162      * is the appropriate form to use when rendering a word in lowercase
9163      * with initial capitals, as for a book title.
9164      * <p>
9165      * These are some of the Unicode characters for which this method returns
9166      * {@code true}:
9167      * <ul>
9168      * <li>{@code LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}
9169      * <li>{@code LATIN CAPITAL LETTER L WITH SMALL LETTER J}
9170      * <li>{@code LATIN CAPITAL LETTER N WITH SMALL LETTER J}
9171      * <li>{@code LATIN CAPITAL LETTER D WITH SMALL LETTER Z}
9172      * </ul>
9173      * <p> Many other Unicode characters are titlecase too.
9174      *
9175      * <p><b>Note:</b> This method cannot handle <a
9176      * href="#supplementary"> supplementary characters</a>. To support
9177      * all Unicode characters, including supplementary characters, use
9178      * the {@link #isTitleCase(int)} method.
9179      *
9180      * @param   ch   the character to be tested.
9181      * @return  {@code true} if the character is titlecase;
9182      *          {@code false} otherwise.
9183      * @see     Character#isLowerCase(char)
9184      * @see     Character#isUpperCase(char)
9185      * @see     Character#toTitleCase(char)
9186      * @see     Character#getType(char)
9187      * @since   1.0.2
9188      */
9189     public static boolean isTitleCase(char ch) {
9190         return isTitleCase((int)ch);
9191     }
9192 
9193     /**
9194      * Determines if the specified character (Unicode code point) is a titlecase character.
9195      * <p>
9196      * A character is a titlecase character if its general
9197      * category type, provided by {@link Character#getType(int) getType(codePoint)},
9198      * is {@code TITLECASE_LETTER}.
9199      * <p>
9200      * Some characters look like pairs of Latin letters. For example, there
9201      * is an uppercase letter that looks like "LJ" and has a corresponding
9202      * lowercase letter that looks like "lj". A third form, which looks like "Lj",
9203      * is the appropriate form to use when rendering a word in lowercase
9204      * with initial capitals, as for a book title.
9205      * <p>
9206      * These are some of the Unicode characters for which this method returns
9207      * {@code true}:
9208      * <ul>
9209      * <li>{@code LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}
9210      * <li>{@code LATIN CAPITAL LETTER L WITH SMALL LETTER J}
9211      * <li>{@code LATIN CAPITAL LETTER N WITH SMALL LETTER J}
9212      * <li>{@code LATIN CAPITAL LETTER D WITH SMALL LETTER Z}
9213      * </ul>
9214      * <p> Many other Unicode characters are titlecase too.
9215      *
9216      * @param   codePoint the character (Unicode code point) to be tested.
9217      * @return  {@code true} if the character is titlecase;
9218      *          {@code false} otherwise.
9219      * @see     Character#isLowerCase(int)
9220      * @see     Character#isUpperCase(int)
9221      * @see     Character#toTitleCase(int)
9222      * @see     Character#getType(int)
9223      * @since   1.5
9224      */
9225     public static boolean isTitleCase(int codePoint) {
9226         return getType(codePoint) == Character.TITLECASE_LETTER;
9227     }
9228 
9229     /**
9230      * Determines if the specified character is a digit.
9231      * <p>
9232      * A character is a digit if its general category type, provided
9233      * by {@code Character.getType(ch)}, is
9234      * {@code DECIMAL_DIGIT_NUMBER}.
9235      * <p>
9236      * Some Unicode character ranges that contain digits:
9237      * <ul>
9238      * <li>{@code '\u005Cu0030'} through {@code '\u005Cu0039'},
9239      *     ISO-LATIN-1 digits ({@code '0'} through {@code '9'})
9240      * <li>{@code '\u005Cu0660'} through {@code '\u005Cu0669'},
9241      *     Arabic-Indic digits
9242      * <li>{@code '\u005Cu06F0'} through {@code '\u005Cu06F9'},
9243      *     Extended Arabic-Indic digits
9244      * <li>{@code '\u005Cu0966'} through {@code '\u005Cu096F'},
9245      *     Devanagari digits
9246      * <li>{@code '\u005CuFF10'} through {@code '\u005CuFF19'},
9247      *     Fullwidth digits
9248      * </ul>
9249      *
9250      * Many other character ranges contain digits as well.
9251      *
9252      * <p><b>Note:</b> This method cannot handle <a
9253      * href="#supplementary"> supplementary characters</a>. To support
9254      * all Unicode characters, including supplementary characters, use
9255      * the {@link #isDigit(int)} method.
9256      *
9257      * @param   ch   the character to be tested.
9258      * @return  {@code true} if the character is a digit;
9259      *          {@code false} otherwise.
9260      * @see     Character#digit(char, int)
9261      * @see     Character#forDigit(int, int)
9262      * @see     Character#getType(char)
9263      */
9264     public static boolean isDigit(char ch) {
9265         return isDigit((int)ch);
9266     }
9267 
9268     /**
9269      * Determines if the specified character (Unicode code point) is a digit.
9270      * <p>
9271      * A character is a digit if its general category type, provided
9272      * by {@link Character#getType(int) getType(codePoint)}, is
9273      * {@code DECIMAL_DIGIT_NUMBER}.
9274      * <p>
9275      * Some Unicode character ranges that contain digits:
9276      * <ul>
9277      * <li>{@code '\u005Cu0030'} through {@code '\u005Cu0039'},
9278      *     ISO-LATIN-1 digits ({@code '0'} through {@code '9'})
9279      * <li>{@code '\u005Cu0660'} through {@code '\u005Cu0669'},
9280      *     Arabic-Indic digits
9281      * <li>{@code '\u005Cu06F0'} through {@code '\u005Cu06F9'},
9282      *     Extended Arabic-Indic digits
9283      * <li>{@code '\u005Cu0966'} through {@code '\u005Cu096F'},
9284      *     Devanagari digits
9285      * <li>{@code '\u005CuFF10'} through {@code '\u005CuFF19'},
9286      *     Fullwidth digits
9287      * </ul>
9288      *
9289      * Many other character ranges contain digits as well.
9290      *
9291      * @param   codePoint the character (Unicode code point) to be tested.
9292      * @return  {@code true} if the character is a digit;
9293      *          {@code false} otherwise.
9294      * @see     Character#forDigit(int, int)
9295      * @see     Character#getType(int)
9296      * @since   1.5
9297      */
9298     public static boolean isDigit(int codePoint) {
9299         return CharacterData.of(codePoint).isDigit(codePoint);
9300     }
9301 
9302     /**
9303      * Determines if a character is defined in Unicode.
9304      * <p>
9305      * A character is defined if at least one of the following is true:
9306      * <ul>
9307      * <li>It has an entry in the UnicodeData file.
9308      * <li>It has a value in a range defined by the UnicodeData file.
9309      * </ul>
9310      *
9311      * <p><b>Note:</b> This method cannot handle <a
9312      * href="#supplementary"> supplementary characters</a>. To support
9313      * all Unicode characters, including supplementary characters, use
9314      * the {@link #isDefined(int)} method.
9315      *
9316      * @param   ch   the character to be tested
9317      * @return  {@code true} if the character has a defined meaning
9318      *          in Unicode; {@code false} otherwise.
9319      * @see     Character#isDigit(char)
9320      * @see     Character#isLetter(char)
9321      * @see     Character#isLetterOrDigit(char)
9322      * @see     Character#isLowerCase(char)
9323      * @see     Character#isTitleCase(char)
9324      * @see     Character#isUpperCase(char)
9325      * @since   1.0.2
9326      */
9327     public static boolean isDefined(char ch) {
9328         return isDefined((int)ch);
9329     }
9330 
9331     /**
9332      * Determines if a character (Unicode code point) is defined in Unicode.
9333      * <p>
9334      * A character is defined if at least one of the following is true:
9335      * <ul>
9336      * <li>It has an entry in the UnicodeData file.
9337      * <li>It has a value in a range defined by the UnicodeData file.
9338      * </ul>
9339      *
9340      * @param   codePoint the character (Unicode code point) to be tested.
9341      * @return  {@code true} if the character has a defined meaning
9342      *          in Unicode; {@code false} otherwise.
9343      * @see     Character#isDigit(int)
9344      * @see     Character#isLetter(int)
9345      * @see     Character#isLetterOrDigit(int)
9346      * @see     Character#isLowerCase(int)
9347      * @see     Character#isTitleCase(int)
9348      * @see     Character#isUpperCase(int)
9349      * @since   1.5
9350      */
9351     public static boolean isDefined(int codePoint) {
9352         return getType(codePoint) != Character.UNASSIGNED;
9353     }
9354 
9355     /**
9356      * Determines if the specified character is a letter.
9357      * <p>
9358      * A character is considered to be a letter if its general
9359      * category type, provided by {@code Character.getType(ch)},
9360      * is any of the following:
9361      * <ul>
9362      * <li> {@code UPPERCASE_LETTER}
9363      * <li> {@code LOWERCASE_LETTER}
9364      * <li> {@code TITLECASE_LETTER}
9365      * <li> {@code MODIFIER_LETTER}
9366      * <li> {@code OTHER_LETTER}
9367      * </ul>
9368      *
9369      * Not all letters have case. Many characters are
9370      * letters but are neither uppercase nor lowercase nor titlecase.
9371      *
9372      * <p><b>Note:</b> This method cannot handle <a
9373      * href="#supplementary"> supplementary characters</a>. To support
9374      * all Unicode characters, including supplementary characters, use
9375      * the {@link #isLetter(int)} method.
9376      *
9377      * @param   ch   the character to be tested.
9378      * @return  {@code true} if the character is a letter;
9379      *          {@code false} otherwise.
9380      * @see     Character#isDigit(char)
9381      * @see     Character#isJavaIdentifierStart(char)
9382      * @see     Character#isJavaLetter(char)
9383      * @see     Character#isJavaLetterOrDigit(char)
9384      * @see     Character#isLetterOrDigit(char)
9385      * @see     Character#isLowerCase(char)
9386      * @see     Character#isTitleCase(char)
9387      * @see     Character#isUnicodeIdentifierStart(char)
9388      * @see     Character#isUpperCase(char)
9389      */
9390     public static boolean isLetter(char ch) {
9391         return isLetter((int)ch);
9392     }
9393 
9394     /**
9395      * Determines if the specified character (Unicode code point) is a letter.
9396      * <p>
9397      * A character is considered to be a letter if its general
9398      * category type, provided by {@link Character#getType(int) getType(codePoint)},
9399      * is any of the following:
9400      * <ul>
9401      * <li> {@code UPPERCASE_LETTER}
9402      * <li> {@code LOWERCASE_LETTER}
9403      * <li> {@code TITLECASE_LETTER}
9404      * <li> {@code MODIFIER_LETTER}
9405      * <li> {@code OTHER_LETTER}
9406      * </ul>
9407      *
9408      * Not all letters have case. Many characters are
9409      * letters but are neither uppercase nor lowercase nor titlecase.
9410      *
9411      * @param   codePoint the character (Unicode code point) to be tested.
9412      * @return  {@code true} if the character is a letter;
9413      *          {@code false} otherwise.
9414      * @see     Character#isDigit(int)
9415      * @see     Character#isJavaIdentifierStart(int)
9416      * @see     Character#isLetterOrDigit(int)
9417      * @see     Character#isLowerCase(int)
9418      * @see     Character#isTitleCase(int)
9419      * @see     Character#isUnicodeIdentifierStart(int)
9420      * @see     Character#isUpperCase(int)
9421      * @since   1.5
9422      */
9423     public static boolean isLetter(int codePoint) {
9424         return ((((1 << Character.UPPERCASE_LETTER) |
9425             (1 << Character.LOWERCASE_LETTER) |
9426             (1 << Character.TITLECASE_LETTER) |
9427             (1 << Character.MODIFIER_LETTER) |
9428             (1 << Character.OTHER_LETTER)) >> getType(codePoint)) & 1)
9429             != 0;
9430     }
9431 
9432     /**
9433      * Determines if the specified character is a letter or digit.
9434      * <p>
9435      * A character is considered to be a letter or digit if either
9436      * {@code Character.isLetter(char ch)} or
9437      * {@code Character.isDigit(char ch)} returns
9438      * {@code true} for the character.
9439      *
9440      * <p><b>Note:</b> This method cannot handle <a
9441      * href="#supplementary"> supplementary characters</a>. To support
9442      * all Unicode characters, including supplementary characters, use
9443      * the {@link #isLetterOrDigit(int)} method.
9444      *
9445      * @param   ch   the character to be tested.
9446      * @return  {@code true} if the character is a letter or digit;
9447      *          {@code false} otherwise.
9448      * @see     Character#isDigit(char)
9449      * @see     Character#isJavaIdentifierPart(char)
9450      * @see     Character#isJavaLetter(char)
9451      * @see     Character#isJavaLetterOrDigit(char)
9452      * @see     Character#isLetter(char)
9453      * @see     Character#isUnicodeIdentifierPart(char)
9454      * @since   1.0.2
9455      */
9456     public static boolean isLetterOrDigit(char ch) {
9457         return isLetterOrDigit((int)ch);
9458     }
9459 
9460     /**
9461      * Determines if the specified character (Unicode code point) is a letter or digit.
9462      * <p>
9463      * A character is considered to be a letter or digit if either
9464      * {@link #isLetter(int) isLetter(codePoint)} or
9465      * {@link #isDigit(int) isDigit(codePoint)} returns
9466      * {@code true} for the character.
9467      *
9468      * @param   codePoint the character (Unicode code point) to be tested.
9469      * @return  {@code true} if the character is a letter or digit;
9470      *          {@code false} otherwise.
9471      * @see     Character#isDigit(int)
9472      * @see     Character#isJavaIdentifierPart(int)
9473      * @see     Character#isLetter(int)
9474      * @see     Character#isUnicodeIdentifierPart(int)
9475      * @since   1.5
9476      */
9477     public static boolean isLetterOrDigit(int codePoint) {
9478         return ((((1 << Character.UPPERCASE_LETTER) |
9479             (1 << Character.LOWERCASE_LETTER) |
9480             (1 << Character.TITLECASE_LETTER) |
9481             (1 << Character.MODIFIER_LETTER) |
9482             (1 << Character.OTHER_LETTER) |
9483             (1 << Character.DECIMAL_DIGIT_NUMBER)) >> getType(codePoint)) & 1)
9484             != 0;
9485     }
9486 
9487     /**
9488      * Determines if the specified character is permissible as the first
9489      * character in a Java identifier.
9490      * <p>
9491      * A character may start a Java identifier if and only if
9492      * one of the following is true:
9493      * <ul>
9494      * <li> {@link #isLetter(char) isLetter(ch)} returns {@code true}
9495      * <li> {@link #getType(char) getType(ch)} returns {@code LETTER_NUMBER}
9496      * <li> {@code ch} is a currency symbol (such as {@code '$'})
9497      * <li> {@code ch} is a connecting punctuation character (such as {@code '_'}).
9498      * </ul>
9499      *
9500      * @param   ch the character to be tested.
9501      * @return  {@code true} if the character may start a Java
9502      *          identifier; {@code false} otherwise.
9503      * @see     Character#isJavaLetterOrDigit(char)
9504      * @see     Character#isJavaIdentifierStart(char)
9505      * @see     Character#isJavaIdentifierPart(char)
9506      * @see     Character#isLetter(char)
9507      * @see     Character#isLetterOrDigit(char)
9508      * @see     Character#isUnicodeIdentifierStart(char)
9509      * @since   1.0.2
9510      * @deprecated Replaced by isJavaIdentifierStart(char).
9511      */
9512     @Deprecated(since="1.1")
9513     public static boolean isJavaLetter(char ch) {
9514         return isJavaIdentifierStart(ch);
9515     }
9516 
9517     /**
9518      * Determines if the specified character may be part of a Java
9519      * identifier as other than the first character.
9520      * <p>
9521      * A character may be part of a Java identifier if and only if any
9522      * of the following are true:
9523      * <ul>
9524      * <li>  it is a letter
9525      * <li>  it is a currency symbol (such as {@code '$'})
9526      * <li>  it is a connecting punctuation character (such as {@code '_'})
9527      * <li>  it is a digit
9528      * <li>  it is a numeric letter (such as a Roman numeral character)
9529      * <li>  it is a combining mark
9530      * <li>  it is a non-spacing mark
9531      * <li> {@code isIdentifierIgnorable} returns
9532      * {@code true} for the character.
9533      * </ul>
9534      *
9535      * @param   ch the character to be tested.
9536      * @return  {@code true} if the character may be part of a
9537      *          Java identifier; {@code false} otherwise.
9538      * @see     Character#isJavaLetter(char)
9539      * @see     Character#isJavaIdentifierStart(char)
9540      * @see     Character#isJavaIdentifierPart(char)
9541      * @see     Character#isLetter(char)
9542      * @see     Character#isLetterOrDigit(char)
9543      * @see     Character#isUnicodeIdentifierPart(char)
9544      * @see     Character#isIdentifierIgnorable(char)
9545      * @since   1.0.2
9546      * @deprecated Replaced by isJavaIdentifierPart(char).
9547      */
9548     @Deprecated(since="1.1")
9549     public static boolean isJavaLetterOrDigit(char ch) {
9550         return isJavaIdentifierPart(ch);
9551     }
9552 
9553     /**
9554      * Determines if the specified character (Unicode code point) is an alphabet.
9555      * <p>
9556      * A character is considered to be alphabetic if its general category type,
9557      * provided by {@link Character#getType(int) getType(codePoint)}, is any of
9558      * the following:
9559      * <ul>
9560      * <li> {@code UPPERCASE_LETTER}
9561      * <li> {@code LOWERCASE_LETTER}
9562      * <li> {@code TITLECASE_LETTER}
9563      * <li> {@code MODIFIER_LETTER}
9564      * <li> {@code OTHER_LETTER}
9565      * <li> {@code LETTER_NUMBER}
9566      * </ul>
9567      * or it has contributory property Other_Alphabetic as defined by the
9568      * Unicode Standard.
9569      *
9570      * @param   codePoint the character (Unicode code point) to be tested.
9571      * @return  {@code true} if the character is a Unicode alphabet
9572      *          character, {@code false} otherwise.
9573      * @since   1.7
9574      */
9575     public static boolean isAlphabetic(int codePoint) {
9576         return (((((1 << Character.UPPERCASE_LETTER) |
9577             (1 << Character.LOWERCASE_LETTER) |
9578             (1 << Character.TITLECASE_LETTER) |
9579             (1 << Character.MODIFIER_LETTER) |
9580             (1 << Character.OTHER_LETTER) |
9581             (1 << Character.LETTER_NUMBER)) >> getType(codePoint)) & 1) != 0) ||
9582             CharacterData.of(codePoint).isOtherAlphabetic(codePoint);
9583     }
9584 
9585     /**
9586      * Determines if the specified character (Unicode code point) is a CJKV
9587      * (Chinese, Japanese, Korean and Vietnamese) ideograph, as defined by
9588      * the Unicode Standard.
9589      *
9590      * @param   codePoint the character (Unicode code point) to be tested.
9591      * @return  {@code true} if the character is a Unicode ideograph
9592      *          character, {@code false} otherwise.
9593      * @since   1.7
9594      */
9595     public static boolean isIdeographic(int codePoint) {
9596         return CharacterData.of(codePoint).isIdeographic(codePoint);
9597     }
9598 
9599     /**
9600      * Determines if the specified character is
9601      * permissible as the first character in a Java identifier.
9602      * <p>
9603      * A character may start a Java identifier if and only if
9604      * one of the following conditions is true:
9605      * <ul>
9606      * <li> {@link #isLetter(char) isLetter(ch)} returns {@code true}
9607      * <li> {@link #getType(char) getType(ch)} returns {@code LETTER_NUMBER}
9608      * <li> {@code ch} is a currency symbol (such as {@code '$'})
9609      * <li> {@code ch} is a connecting punctuation character (such as {@code '_'}).
9610      * </ul>
9611      *
9612      * <p><b>Note:</b> This method cannot handle <a
9613      * href="#supplementary"> supplementary characters</a>. To support
9614      * all Unicode characters, including supplementary characters, use
9615      * the {@link #isJavaIdentifierStart(int)} method.
9616      *
9617      * @param   ch the character to be tested.
9618      * @return  {@code true} if the character may start a Java identifier;
9619      *          {@code false} otherwise.
9620      * @see     Character#isJavaIdentifierPart(char)
9621      * @see     Character#isLetter(char)
9622      * @see     Character#isUnicodeIdentifierStart(char)
9623      * @see     javax.lang.model.SourceVersion#isIdentifier(CharSequence)
9624      * @since   1.1
9625      */
9626     public static boolean isJavaIdentifierStart(char ch) {
9627         return isJavaIdentifierStart((int)ch);
9628     }
9629 
9630     /**
9631      * Determines if the character (Unicode code point) is
9632      * permissible as the first character in a Java identifier.
9633      * <p>
9634      * A character may start a Java identifier if and only if
9635      * one of the following conditions is true:
9636      * <ul>
9637      * <li> {@link #isLetter(int) isLetter(codePoint)}
9638      *      returns {@code true}
9639      * <li> {@link #getType(int) getType(codePoint)}
9640      *      returns {@code LETTER_NUMBER}
9641      * <li> the referenced character is a currency symbol (such as {@code '$'})
9642      * <li> the referenced character is a connecting punctuation character
9643      *      (such as {@code '_'}).
9644      * </ul>
9645      *
9646      * @param   codePoint the character (Unicode code point) to be tested.
9647      * @return  {@code true} if the character may start a Java identifier;
9648      *          {@code false} otherwise.
9649      * @see     Character#isJavaIdentifierPart(int)
9650      * @see     Character#isLetter(int)
9651      * @see     Character#isUnicodeIdentifierStart(int)
9652      * @see     javax.lang.model.SourceVersion#isIdentifier(CharSequence)
9653      * @since   1.5
9654      */
9655     public static boolean isJavaIdentifierStart(int codePoint) {
9656         return CharacterData.of(codePoint).isJavaIdentifierStart(codePoint);
9657     }
9658 
9659     /**
9660      * Determines if the specified character may be part of a Java
9661      * identifier as other than the first character.
9662      * <p>
9663      * A character may be part of a Java identifier if any of the following
9664      * are true:
9665      * <ul>
9666      * <li>  it is a letter
9667      * <li>  it is a currency symbol (such as {@code '$'})
9668      * <li>  it is a connecting punctuation character (such as {@code '_'})
9669      * <li>  it is a digit
9670      * <li>  it is a numeric letter (such as a Roman numeral character)
9671      * <li>  it is a combining mark
9672      * <li>  it is a non-spacing mark
9673      * <li> {@code isIdentifierIgnorable} returns
9674      * {@code true} for the character
9675      * </ul>
9676      *
9677      * <p><b>Note:</b> This method cannot handle <a
9678      * href="#supplementary"> supplementary characters</a>. To support
9679      * all Unicode characters, including supplementary characters, use
9680      * the {@link #isJavaIdentifierPart(int)} method.
9681      *
9682      * @param   ch      the character to be tested.
9683      * @return {@code true} if the character may be part of a
9684      *          Java identifier; {@code false} otherwise.
9685      * @see     Character#isIdentifierIgnorable(char)
9686      * @see     Character#isJavaIdentifierStart(char)
9687      * @see     Character#isLetterOrDigit(char)
9688      * @see     Character#isUnicodeIdentifierPart(char)
9689      * @see     javax.lang.model.SourceVersion#isIdentifier(CharSequence)
9690      * @since   1.1
9691      */
9692     public static boolean isJavaIdentifierPart(char ch) {
9693         return isJavaIdentifierPart((int)ch);
9694     }
9695 
9696     /**
9697      * Determines if the character (Unicode code point) may be part of a Java
9698      * identifier as other than the first character.
9699      * <p>
9700      * A character may be part of a Java identifier if any of the following
9701      * are true:
9702      * <ul>
9703      * <li>  it is a letter
9704      * <li>  it is a currency symbol (such as {@code '$'})
9705      * <li>  it is a connecting punctuation character (such as {@code '_'})
9706      * <li>  it is a digit
9707      * <li>  it is a numeric letter (such as a Roman numeral character)
9708      * <li>  it is a combining mark
9709      * <li>  it is a non-spacing mark
9710      * <li> {@link #isIdentifierIgnorable(int)
9711      * isIdentifierIgnorable(codePoint)} returns {@code true} for
9712      * the character
9713      * </ul>
9714      *
9715      * @param   codePoint the character (Unicode code point) to be tested.
9716      * @return {@code true} if the character may be part of a
9717      *          Java identifier; {@code false} otherwise.
9718      * @see     Character#isIdentifierIgnorable(int)
9719      * @see     Character#isJavaIdentifierStart(int)
9720      * @see     Character#isLetterOrDigit(int)
9721      * @see     Character#isUnicodeIdentifierPart(int)
9722      * @see     javax.lang.model.SourceVersion#isIdentifier(CharSequence)
9723      * @since   1.5
9724      */
9725     public static boolean isJavaIdentifierPart(int codePoint) {
9726         return CharacterData.of(codePoint).isJavaIdentifierPart(codePoint);
9727     }
9728 
9729     /**
9730      * Determines if the specified character is permissible as the
9731      * first character in a Unicode identifier.
9732      * <p>
9733      * A character may start a Unicode identifier if and only if
9734      * one of the following conditions is true:
9735      * <ul>
9736      * <li> {@link #isLetter(char) isLetter(ch)} returns {@code true}
9737      * <li> {@link #getType(char) getType(ch)} returns
9738      *      {@code LETTER_NUMBER}.
9739      * </ul>
9740      *
9741      * <p><b>Note:</b> This method cannot handle <a
9742      * href="#supplementary"> supplementary characters</a>. To support
9743      * all Unicode characters, including supplementary characters, use
9744      * the {@link #isUnicodeIdentifierStart(int)} method.
9745      *
9746      * @param   ch      the character to be tested.
9747      * @return  {@code true} if the character may start a Unicode
9748      *          identifier; {@code false} otherwise.
9749      * @see     Character#isJavaIdentifierStart(char)
9750      * @see     Character#isLetter(char)
9751      * @see     Character#isUnicodeIdentifierPart(char)
9752      * @since   1.1
9753      */
9754     public static boolean isUnicodeIdentifierStart(char ch) {
9755         return isUnicodeIdentifierStart((int)ch);
9756     }
9757 
9758     /**
9759      * Determines if the specified character (Unicode code point) is permissible as the
9760      * first character in a Unicode identifier.
9761      * <p>
9762      * A character may start a Unicode identifier if and only if
9763      * one of the following conditions is true:
9764      * <ul>
9765      * <li> {@link #isLetter(int) isLetter(codePoint)}
9766      *      returns {@code true}
9767      * <li> {@link #getType(int) getType(codePoint)}
9768      *      returns {@code LETTER_NUMBER}.
9769      * </ul>
9770      * @param   codePoint the character (Unicode code point) to be tested.
9771      * @return  {@code true} if the character may start a Unicode
9772      *          identifier; {@code false} otherwise.
9773      * @see     Character#isJavaIdentifierStart(int)
9774      * @see     Character#isLetter(int)
9775      * @see     Character#isUnicodeIdentifierPart(int)
9776      * @since   1.5
9777      */
9778     public static boolean isUnicodeIdentifierStart(int codePoint) {
9779         return CharacterData.of(codePoint).isUnicodeIdentifierStart(codePoint);
9780     }
9781 
9782     /**
9783      * Determines if the specified character may be part of a Unicode
9784      * identifier as other than the first character.
9785      * <p>
9786      * A character may be part of a Unicode identifier if and only if
9787      * one of the following statements is true:
9788      * <ul>
9789      * <li>  it is a letter
9790      * <li>  it is a connecting punctuation character (such as {@code '_'})
9791      * <li>  it is a digit
9792      * <li>  it is a numeric letter (such as a Roman numeral character)
9793      * <li>  it is a combining mark
9794      * <li>  it is a non-spacing mark
9795      * <li> {@code isIdentifierIgnorable} returns
9796      * {@code true} for this character.
9797      * </ul>
9798      *
9799      * <p><b>Note:</b> This method cannot handle <a
9800      * href="#supplementary"> supplementary characters</a>. To support
9801      * all Unicode characters, including supplementary characters, use
9802      * the {@link #isUnicodeIdentifierPart(int)} method.
9803      *
9804      * @param   ch      the character to be tested.
9805      * @return  {@code true} if the character may be part of a
9806      *          Unicode identifier; {@code false} otherwise.
9807      * @see     Character#isIdentifierIgnorable(char)
9808      * @see     Character#isJavaIdentifierPart(char)
9809      * @see     Character#isLetterOrDigit(char)
9810      * @see     Character#isUnicodeIdentifierStart(char)
9811      * @since   1.1
9812      */
9813     public static boolean isUnicodeIdentifierPart(char ch) {
9814         return isUnicodeIdentifierPart((int)ch);
9815     }
9816 
9817     /**
9818      * Determines if the specified character (Unicode code point) may be part of a Unicode
9819      * identifier as other than the first character.
9820      * <p>
9821      * A character may be part of a Unicode identifier if and only if
9822      * one of the following statements is true:
9823      * <ul>
9824      * <li>  it is a letter
9825      * <li>  it is a connecting punctuation character (such as {@code '_'})
9826      * <li>  it is a digit
9827      * <li>  it is a numeric letter (such as a Roman numeral character)
9828      * <li>  it is a combining mark
9829      * <li>  it is a non-spacing mark
9830      * <li> {@code isIdentifierIgnorable} returns
9831      * {@code true} for this character.
9832      * </ul>
9833      * @param   codePoint the character (Unicode code point) to be tested.
9834      * @return  {@code true} if the character may be part of a
9835      *          Unicode identifier; {@code false} otherwise.
9836      * @see     Character#isIdentifierIgnorable(int)
9837      * @see     Character#isJavaIdentifierPart(int)
9838      * @see     Character#isLetterOrDigit(int)
9839      * @see     Character#isUnicodeIdentifierStart(int)
9840      * @since   1.5
9841      */
9842     public static boolean isUnicodeIdentifierPart(int codePoint) {
9843         return CharacterData.of(codePoint).isUnicodeIdentifierPart(codePoint);
9844     }
9845 
9846     /**
9847      * Determines if the specified character should be regarded as
9848      * an ignorable character in a Java identifier or a Unicode identifier.
9849      * <p>
9850      * The following Unicode characters are ignorable in a Java identifier
9851      * or a Unicode identifier:
9852      * <ul>
9853      * <li>ISO control characters that are not whitespace
9854      * <ul>
9855      * <li>{@code '\u005Cu0000'} through {@code '\u005Cu0008'}
9856      * <li>{@code '\u005Cu000E'} through {@code '\u005Cu001B'}
9857      * <li>{@code '\u005Cu007F'} through {@code '\u005Cu009F'}
9858      * </ul>
9859      *
9860      * <li>all characters that have the {@code FORMAT} general
9861      * category value
9862      * </ul>
9863      *
9864      * <p><b>Note:</b> This method cannot handle <a
9865      * href="#supplementary"> supplementary characters</a>. To support
9866      * all Unicode characters, including supplementary characters, use
9867      * the {@link #isIdentifierIgnorable(int)} method.
9868      *
9869      * @param   ch      the character to be tested.
9870      * @return  {@code true} if the character is an ignorable control
9871      *          character that may be part of a Java or Unicode identifier;
9872      *           {@code false} otherwise.
9873      * @see     Character#isJavaIdentifierPart(char)
9874      * @see     Character#isUnicodeIdentifierPart(char)
9875      * @since   1.1
9876      */
9877     public static boolean isIdentifierIgnorable(char ch) {
9878         return isIdentifierIgnorable((int)ch);
9879     }
9880 
9881     /**
9882      * Determines if the specified character (Unicode code point) should be regarded as
9883      * an ignorable character in a Java identifier or a Unicode identifier.
9884      * <p>
9885      * The following Unicode characters are ignorable in a Java identifier
9886      * or a Unicode identifier:
9887      * <ul>
9888      * <li>ISO control characters that are not whitespace
9889      * <ul>
9890      * <li>{@code '\u005Cu0000'} through {@code '\u005Cu0008'}
9891      * <li>{@code '\u005Cu000E'} through {@code '\u005Cu001B'}
9892      * <li>{@code '\u005Cu007F'} through {@code '\u005Cu009F'}
9893      * </ul>
9894      *
9895      * <li>all characters that have the {@code FORMAT} general
9896      * category value
9897      * </ul>
9898      *
9899      * @param   codePoint the character (Unicode code point) to be tested.
9900      * @return  {@code true} if the character is an ignorable control
9901      *          character that may be part of a Java or Unicode identifier;
9902      *          {@code false} otherwise.
9903      * @see     Character#isJavaIdentifierPart(int)
9904      * @see     Character#isUnicodeIdentifierPart(int)
9905      * @since   1.5
9906      */
9907     public static boolean isIdentifierIgnorable(int codePoint) {
9908         return CharacterData.of(codePoint).isIdentifierIgnorable(codePoint);
9909     }
9910 
9911     /**
9912      * Converts the character argument to lowercase using case
9913      * mapping information from the UnicodeData file.
9914      * <p>
9915      * Note that
9916      * {@code Character.isLowerCase(Character.toLowerCase(ch))}
9917      * does not always return {@code true} for some ranges of
9918      * characters, particularly those that are symbols or ideographs.
9919      *
9920      * <p>In general, {@link String#toLowerCase()} should be used to map
9921      * characters to lowercase. {@code String} case mapping methods
9922      * have several benefits over {@code Character} case mapping methods.
9923      * {@code String} case mapping methods can perform locale-sensitive
9924      * mappings, context-sensitive mappings, and 1:M character mappings, whereas
9925      * the {@code Character} case mapping methods cannot.
9926      *
9927      * <p><b>Note:</b> This method cannot handle <a
9928      * href="#supplementary"> supplementary characters</a>. To support
9929      * all Unicode characters, including supplementary characters, use
9930      * the {@link #toLowerCase(int)} method.
9931      *
9932      * @param   ch   the character to be converted.
9933      * @return  the lowercase equivalent of the character, if any;
9934      *          otherwise, the character itself.
9935      * @see     Character#isLowerCase(char)
9936      * @see     String#toLowerCase()
9937      */
9938     public static char toLowerCase(char ch) {
9939         return (char)toLowerCase((int)ch);
9940     }
9941 
9942     /**
9943      * Converts the character (Unicode code point) argument to
9944      * lowercase using case mapping information from the UnicodeData
9945      * file.
9946      *
9947      * <p> Note that
9948      * {@code Character.isLowerCase(Character.toLowerCase(codePoint))}
9949      * does not always return {@code true} for some ranges of
9950      * characters, particularly those that are symbols or ideographs.
9951      *
9952      * <p>In general, {@link String#toLowerCase()} should be used to map
9953      * characters to lowercase. {@code String} case mapping methods
9954      * have several benefits over {@code Character} case mapping methods.
9955      * {@code String} case mapping methods can perform locale-sensitive
9956      * mappings, context-sensitive mappings, and 1:M character mappings, whereas
9957      * the {@code Character} case mapping methods cannot.
9958      *
9959      * @param   codePoint   the character (Unicode code point) to be converted.
9960      * @return  the lowercase equivalent of the character (Unicode code
9961      *          point), if any; otherwise, the character itself.
9962      * @see     Character#isLowerCase(int)
9963      * @see     String#toLowerCase()
9964      *
9965      * @since   1.5
9966      */
9967     public static int toLowerCase(int codePoint) {
9968         return CharacterData.of(codePoint).toLowerCase(codePoint);
9969     }
9970 
9971     /**
9972      * Converts the character argument to uppercase using case mapping
9973      * information from the UnicodeData file.
9974      * <p>
9975      * Note that
9976      * {@code Character.isUpperCase(Character.toUpperCase(ch))}
9977      * does not always return {@code true} for some ranges of
9978      * characters, particularly those that are symbols or ideographs.
9979      *
9980      * <p>In general, {@link String#toUpperCase()} should be used to map
9981      * characters to uppercase. {@code String} case mapping methods
9982      * have several benefits over {@code Character} case mapping methods.
9983      * {@code String} case mapping methods can perform locale-sensitive
9984      * mappings, context-sensitive mappings, and 1:M character mappings, whereas
9985      * the {@code Character} case mapping methods cannot.
9986      *
9987      * <p><b>Note:</b> This method cannot handle <a
9988      * href="#supplementary"> supplementary characters</a>. To support
9989      * all Unicode characters, including supplementary characters, use
9990      * the {@link #toUpperCase(int)} method.
9991      *
9992      * @param   ch   the character to be converted.
9993      * @return  the uppercase equivalent of the character, if any;
9994      *          otherwise, the character itself.
9995      * @see     Character#isUpperCase(char)
9996      * @see     String#toUpperCase()
9997      */
9998     public static char toUpperCase(char ch) {
9999         return (char)toUpperCase((int)ch);
10000     }
10001 
10002     /**
10003      * Converts the character (Unicode code point) argument to
10004      * uppercase using case mapping information from the UnicodeData
10005      * file.
10006      *
10007      * <p>Note that
10008      * {@code Character.isUpperCase(Character.toUpperCase(codePoint))}
10009      * does not always return {@code true} for some ranges of
10010      * characters, particularly those that are symbols or ideographs.
10011      *
10012      * <p>In general, {@link String#toUpperCase()} should be used to map
10013      * characters to uppercase. {@code String} case mapping methods
10014      * have several benefits over {@code Character} case mapping methods.
10015      * {@code String} case mapping methods can perform locale-sensitive
10016      * mappings, context-sensitive mappings, and 1:M character mappings, whereas
10017      * the {@code Character} case mapping methods cannot.
10018      *
10019      * @param   codePoint   the character (Unicode code point) to be converted.
10020      * @return  the uppercase equivalent of the character, if any;
10021      *          otherwise, the character itself.
10022      * @see     Character#isUpperCase(int)
10023      * @see     String#toUpperCase()
10024      *
10025      * @since   1.5
10026      */
10027     public static int toUpperCase(int codePoint) {
10028         return CharacterData.of(codePoint).toUpperCase(codePoint);
10029     }
10030 
10031     /**
10032      * Converts the character argument to titlecase using case mapping
10033      * information from the UnicodeData file. If a character has no
10034      * explicit titlecase mapping and is not itself a titlecase char
10035      * according to UnicodeData, then the uppercase mapping is
10036      * returned as an equivalent titlecase mapping. If the
10037      * {@code char} argument is already a titlecase
10038      * {@code char}, the same {@code char} value will be
10039      * returned.
10040      * <p>
10041      * Note that
10042      * {@code Character.isTitleCase(Character.toTitleCase(ch))}
10043      * does not always return {@code true} for some ranges of
10044      * characters.
10045      *
10046      * <p><b>Note:</b> This method cannot handle <a
10047      * href="#supplementary"> supplementary characters</a>. To support
10048      * all Unicode characters, including supplementary characters, use
10049      * the {@link #toTitleCase(int)} method.
10050      *
10051      * @param   ch   the character to be converted.
10052      * @return  the titlecase equivalent of the character, if any;
10053      *          otherwise, the character itself.
10054      * @see     Character#isTitleCase(char)
10055      * @see     Character#toLowerCase(char)
10056      * @see     Character#toUpperCase(char)
10057      * @since   1.0.2
10058      */
10059     public static char toTitleCase(char ch) {
10060         return (char)toTitleCase((int)ch);
10061     }
10062 
10063     /**
10064      * Converts the character (Unicode code point) argument to titlecase using case mapping
10065      * information from the UnicodeData file. If a character has no
10066      * explicit titlecase mapping and is not itself a titlecase char
10067      * according to UnicodeData, then the uppercase mapping is
10068      * returned as an equivalent titlecase mapping. If the
10069      * character argument is already a titlecase
10070      * character, the same character value will be
10071      * returned.
10072      *
10073      * <p>Note that
10074      * {@code Character.isTitleCase(Character.toTitleCase(codePoint))}
10075      * does not always return {@code true} for some ranges of
10076      * characters.
10077      *
10078      * @param   codePoint   the character (Unicode code point) to be converted.
10079      * @return  the titlecase equivalent of the character, if any;
10080      *          otherwise, the character itself.
10081      * @see     Character#isTitleCase(int)
10082      * @see     Character#toLowerCase(int)
10083      * @see     Character#toUpperCase(int)
10084      * @since   1.5
10085      */
10086     public static int toTitleCase(int codePoint) {
10087         return CharacterData.of(codePoint).toTitleCase(codePoint);
10088     }
10089 
10090     /**
10091      * Returns the numeric value of the character {@code ch} in the
10092      * specified radix.
10093      * <p>
10094      * If the radix is not in the range {@code MIN_RADIX} &le;
10095      * {@code radix} &le; {@code MAX_RADIX} or if the
10096      * value of {@code ch} is not a valid digit in the specified
10097      * radix, {@code -1} is returned. A character is a valid digit
10098      * if at least one of the following is true:
10099      * <ul>
10100      * <li>The method {@code isDigit} is {@code true} of the character
10101      *     and the Unicode decimal digit value of the character (or its
10102      *     single-character decomposition) is less than the specified radix.
10103      *     In this case the decimal digit value is returned.
10104      * <li>The character is one of the uppercase Latin letters
10105      *     {@code 'A'} through {@code 'Z'} and its code is less than
10106      *     {@code radix + 'A' - 10}.
10107      *     In this case, {@code ch - 'A' + 10}
10108      *     is returned.
10109      * <li>The character is one of the lowercase Latin letters
10110      *     {@code 'a'} through {@code 'z'} and its code is less than
10111      *     {@code radix + 'a' - 10}.
10112      *     In this case, {@code ch - 'a' + 10}
10113      *     is returned.
10114      * <li>The character is one of the fullwidth uppercase Latin letters A
10115      *     ({@code '\u005CuFF21'}) through Z ({@code '\u005CuFF3A'})
10116      *     and its code is less than
10117      *     {@code radix + '\u005CuFF21' - 10}.
10118      *     In this case, {@code ch - '\u005CuFF21' + 10}
10119      *     is returned.
10120      * <li>The character is one of the fullwidth lowercase Latin letters a
10121      *     ({@code '\u005CuFF41'}) through z ({@code '\u005CuFF5A'})
10122      *     and its code is less than
10123      *     {@code radix + '\u005CuFF41' - 10}.
10124      *     In this case, {@code ch - '\u005CuFF41' + 10}
10125      *     is returned.
10126      * </ul>
10127      *
10128      * <p><b>Note:</b> This method cannot handle <a
10129      * href="#supplementary"> supplementary characters</a>. To support
10130      * all Unicode characters, including supplementary characters, use
10131      * the {@link #digit(int, int)} method.
10132      *
10133      * @param   ch      the character to be converted.
10134      * @param   radix   the radix.
10135      * @return  the numeric value represented by the character in the
10136      *          specified radix.
10137      * @see     Character#forDigit(int, int)
10138      * @see     Character#isDigit(char)
10139      */
10140     public static int digit(char ch, int radix) {
10141         return digit((int)ch, radix);
10142     }
10143 
10144     /**
10145      * Returns the numeric value of the specified character (Unicode
10146      * code point) in the specified radix.
10147      *
10148      * <p>If the radix is not in the range {@code MIN_RADIX} &le;
10149      * {@code radix} &le; {@code MAX_RADIX} or if the
10150      * character is not a valid digit in the specified
10151      * radix, {@code -1} is returned. A character is a valid digit
10152      * if at least one of the following is true:
10153      * <ul>
10154      * <li>The method {@link #isDigit(int) isDigit(codePoint)} is {@code true} of the character
10155      *     and the Unicode decimal digit value of the character (or its
10156      *     single-character decomposition) is less than the specified radix.
10157      *     In this case the decimal digit value is returned.
10158      * <li>The character is one of the uppercase Latin letters
10159      *     {@code 'A'} through {@code 'Z'} and its code is less than
10160      *     {@code radix + 'A' - 10}.
10161      *     In this case, {@code codePoint - 'A' + 10}
10162      *     is returned.
10163      * <li>The character is one of the lowercase Latin letters
10164      *     {@code 'a'} through {@code 'z'} and its code is less than
10165      *     {@code radix + 'a' - 10}.
10166      *     In this case, {@code codePoint - 'a' + 10}
10167      *     is returned.
10168      * <li>The character is one of the fullwidth uppercase Latin letters A
10169      *     ({@code '\u005CuFF21'}) through Z ({@code '\u005CuFF3A'})
10170      *     and its code is less than
10171      *     {@code radix + '\u005CuFF21' - 10}.
10172      *     In this case,
10173      *     {@code codePoint - '\u005CuFF21' + 10}
10174      *     is returned.
10175      * <li>The character is one of the fullwidth lowercase Latin letters a
10176      *     ({@code '\u005CuFF41'}) through z ({@code '\u005CuFF5A'})
10177      *     and its code is less than
10178      *     {@code radix + '\u005CuFF41'- 10}.
10179      *     In this case,
10180      *     {@code codePoint - '\u005CuFF41' + 10}
10181      *     is returned.
10182      * </ul>
10183      *
10184      * @param   codePoint the character (Unicode code point) to be converted.
10185      * @param   radix   the radix.
10186      * @return  the numeric value represented by the character in the
10187      *          specified radix.
10188      * @see     Character#forDigit(int, int)
10189      * @see     Character#isDigit(int)
10190      * @since   1.5
10191      */
10192     public static int digit(int codePoint, int radix) {
10193         return CharacterData.of(codePoint).digit(codePoint, radix);
10194     }
10195 
10196     /**
10197      * Returns the {@code int} value that the specified Unicode
10198      * character represents. For example, the character
10199      * {@code '\u005Cu216C'} (the roman numeral fifty) will return
10200      * an int with a value of 50.
10201      * <p>
10202      * The letters A-Z in their uppercase ({@code '\u005Cu0041'} through
10203      * {@code '\u005Cu005A'}), lowercase
10204      * ({@code '\u005Cu0061'} through {@code '\u005Cu007A'}), and
10205      * full width variant ({@code '\u005CuFF21'} through
10206      * {@code '\u005CuFF3A'} and {@code '\u005CuFF41'} through
10207      * {@code '\u005CuFF5A'}) forms have numeric values from 10
10208      * through 35. This is independent of the Unicode specification,
10209      * which does not assign numeric values to these {@code char}
10210      * values.
10211      * <p>
10212      * If the character does not have a numeric value, then -1 is returned.
10213      * If the character has a numeric value that cannot be represented as a
10214      * nonnegative integer (for example, a fractional value), then -2
10215      * is returned.
10216      *
10217      * <p><b>Note:</b> This method cannot handle <a
10218      * href="#supplementary"> supplementary characters</a>. To support
10219      * all Unicode characters, including supplementary characters, use
10220      * the {@link #getNumericValue(int)} method.
10221      *
10222      * @param   ch      the character to be converted.
10223      * @return  the numeric value of the character, as a nonnegative {@code int}
10224      *          value; -2 if the character has a numeric value but the value
10225      *          can not be represented as a nonnegative {@code int} value;
10226      *          -1 if the character has no numeric value.
10227      * @see     Character#forDigit(int, int)
10228      * @see     Character#isDigit(char)
10229      * @since   1.1
10230      */
10231     public static int getNumericValue(char ch) {
10232         return getNumericValue((int)ch);
10233     }
10234 
10235     /**
10236      * Returns the {@code int} value that the specified
10237      * character (Unicode code point) represents. For example, the character
10238      * {@code '\u005Cu216C'} (the Roman numeral fifty) will return
10239      * an {@code int} with a value of 50.
10240      * <p>
10241      * The letters A-Z in their uppercase ({@code '\u005Cu0041'} through
10242      * {@code '\u005Cu005A'}), lowercase
10243      * ({@code '\u005Cu0061'} through {@code '\u005Cu007A'}), and
10244      * full width variant ({@code '\u005CuFF21'} through
10245      * {@code '\u005CuFF3A'} and {@code '\u005CuFF41'} through
10246      * {@code '\u005CuFF5A'}) forms have numeric values from 10
10247      * through 35. This is independent of the Unicode specification,
10248      * which does not assign numeric values to these {@code char}
10249      * values.
10250      * <p>
10251      * If the character does not have a numeric value, then -1 is returned.
10252      * If the character has a numeric value that cannot be represented as a
10253      * nonnegative integer (for example, a fractional value), then -2
10254      * is returned.
10255      *
10256      * @param   codePoint the character (Unicode code point) to be converted.
10257      * @return  the numeric value of the character, as a nonnegative {@code int}
10258      *          value; -2 if the character has a numeric value but the value
10259      *          can not be represented as a nonnegative {@code int} value;
10260      *          -1 if the character has no numeric value.
10261      * @see     Character#forDigit(int, int)
10262      * @see     Character#isDigit(int)
10263      * @since   1.5
10264      */
10265     public static int getNumericValue(int codePoint) {
10266         return CharacterData.of(codePoint).getNumericValue(codePoint);
10267     }
10268 
10269     /**
10270      * Determines if the specified character is ISO-LATIN-1 white space.
10271      * This method returns {@code true} for the following five
10272      * characters only:
10273      * <table class="striped">
10274      * <caption style="display:none">truechars</caption>
10275      * <thead>
10276      * <tr><th scope="col">Character
10277      *     <th scope="col">Code
10278      *     <th scope="col">Name
10279      * </thead>
10280      * <tbody>
10281      * <tr><th scope="row">{@code '\t'}</th>            <td>{@code U+0009}</td>
10282      *     <td>{@code HORIZONTAL TABULATION}</td></tr>
10283      * <tr><th scope="row">{@code '\n'}</th>            <td>{@code U+000A}</td>
10284      *     <td>{@code NEW LINE}</td></tr>
10285      * <tr><th scope="row">{@code '\f'}</th>            <td>{@code U+000C}</td>
10286      *     <td>{@code FORM FEED}</td></tr>
10287      * <tr><th scope="row">{@code '\r'}</th>            <td>{@code U+000D}</td>
10288      *     <td>{@code CARRIAGE RETURN}</td></tr>
10289      * <tr><th scope="row">{@code ' '}</th>  <td>{@code U+0020}</td>
10290      *     <td>{@code SPACE}</td></tr>
10291      * </tbody>
10292      * </table>
10293      *
10294      * @param      ch   the character to be tested.
10295      * @return     {@code true} if the character is ISO-LATIN-1 white
10296      *             space; {@code false} otherwise.
10297      * @see        Character#isSpaceChar(char)
10298      * @see        Character#isWhitespace(char)
10299      * @deprecated Replaced by isWhitespace(char).
10300      */
10301     @Deprecated(since="1.1")
10302     public static boolean isSpace(char ch) {
10303         return (ch <= 0x0020) &&
10304             (((((1L << 0x0009) |
10305             (1L << 0x000A) |
10306             (1L << 0x000C) |
10307             (1L << 0x000D) |
10308             (1L << 0x0020)) >> ch) & 1L) != 0);
10309     }
10310 
10311 
10312     /**
10313      * Determines if the specified character is a Unicode space character.
10314      * A character is considered to be a space character if and only if
10315      * it is specified to be a space character by the Unicode Standard. This
10316      * method returns true if the character's general category type is any of
10317      * the following:
10318      * <ul>
10319      * <li> {@code SPACE_SEPARATOR}
10320      * <li> {@code LINE_SEPARATOR}
10321      * <li> {@code PARAGRAPH_SEPARATOR}
10322      * </ul>
10323      *
10324      * <p><b>Note:</b> This method cannot handle <a
10325      * href="#supplementary"> supplementary characters</a>. To support
10326      * all Unicode characters, including supplementary characters, use
10327      * the {@link #isSpaceChar(int)} method.
10328      *
10329      * @param   ch      the character to be tested.
10330      * @return  {@code true} if the character is a space character;
10331      *          {@code false} otherwise.
10332      * @see     Character#isWhitespace(char)
10333      * @since   1.1
10334      */
10335     public static boolean isSpaceChar(char ch) {
10336         return isSpaceChar((int)ch);
10337     }
10338 
10339     /**
10340      * Determines if the specified character (Unicode code point) is a
10341      * Unicode space character.  A character is considered to be a
10342      * space character if and only if it is specified to be a space
10343      * character by the Unicode Standard. This method returns true if
10344      * the character's general category type is any of the following:
10345      *
10346      * <ul>
10347      * <li> {@link #SPACE_SEPARATOR}
10348      * <li> {@link #LINE_SEPARATOR}
10349      * <li> {@link #PARAGRAPH_SEPARATOR}
10350      * </ul>
10351      *
10352      * @param   codePoint the character (Unicode code point) to be tested.
10353      * @return  {@code true} if the character is a space character;
10354      *          {@code false} otherwise.
10355      * @see     Character#isWhitespace(int)
10356      * @since   1.5
10357      */
10358     public static boolean isSpaceChar(int codePoint) {
10359         return ((((1 << Character.SPACE_SEPARATOR) |
10360                   (1 << Character.LINE_SEPARATOR) |
10361                   (1 << Character.PARAGRAPH_SEPARATOR)) >> getType(codePoint)) & 1)
10362             != 0;
10363     }
10364 
10365     /**
10366      * Determines if the specified character is white space according to Java.
10367      * A character is a Java whitespace character if and only if it satisfies
10368      * one of the following criteria:
10369      * <ul>
10370      * <li> It is a Unicode space character ({@code SPACE_SEPARATOR},
10371      *      {@code LINE_SEPARATOR}, or {@code PARAGRAPH_SEPARATOR})
10372      *      but is not also a non-breaking space ({@code '\u005Cu00A0'},
10373      *      {@code '\u005Cu2007'}, {@code '\u005Cu202F'}).
10374      * <li> It is {@code '\u005Ct'}, U+0009 HORIZONTAL TABULATION.
10375      * <li> It is {@code '\u005Cn'}, U+000A LINE FEED.
10376      * <li> It is {@code '\u005Cu000B'}, U+000B VERTICAL TABULATION.
10377      * <li> It is {@code '\u005Cf'}, U+000C FORM FEED.
10378      * <li> It is {@code '\u005Cr'}, U+000D CARRIAGE RETURN.
10379      * <li> It is {@code '\u005Cu001C'}, U+001C FILE SEPARATOR.
10380      * <li> It is {@code '\u005Cu001D'}, U+001D GROUP SEPARATOR.
10381      * <li> It is {@code '\u005Cu001E'}, U+001E RECORD SEPARATOR.
10382      * <li> It is {@code '\u005Cu001F'}, U+001F UNIT SEPARATOR.
10383      * </ul>
10384      *
10385      * <p><b>Note:</b> This method cannot handle <a
10386      * href="#supplementary"> supplementary characters</a>. To support
10387      * all Unicode characters, including supplementary characters, use
10388      * the {@link #isWhitespace(int)} method.
10389      *
10390      * @param   ch the character to be tested.
10391      * @return  {@code true} if the character is a Java whitespace
10392      *          character; {@code false} otherwise.
10393      * @see     Character#isSpaceChar(char)
10394      * @since   1.1
10395      */
10396     public static boolean isWhitespace(char ch) {
10397         return isWhitespace((int)ch);
10398     }
10399 
10400     /**
10401      * Determines if the specified character (Unicode code point) is
10402      * white space according to Java.  A character is a Java
10403      * whitespace character if and only if it satisfies one of the
10404      * following criteria:
10405      * <ul>
10406      * <li> It is a Unicode space character ({@link #SPACE_SEPARATOR},
10407      *      {@link #LINE_SEPARATOR}, or {@link #PARAGRAPH_SEPARATOR})
10408      *      but is not also a non-breaking space ({@code '\u005Cu00A0'},
10409      *      {@code '\u005Cu2007'}, {@code '\u005Cu202F'}).
10410      * <li> It is {@code '\u005Ct'}, U+0009 HORIZONTAL TABULATION.
10411      * <li> It is {@code '\u005Cn'}, U+000A LINE FEED.
10412      * <li> It is {@code '\u005Cu000B'}, U+000B VERTICAL TABULATION.
10413      * <li> It is {@code '\u005Cf'}, U+000C FORM FEED.
10414      * <li> It is {@code '\u005Cr'}, U+000D CARRIAGE RETURN.
10415      * <li> It is {@code '\u005Cu001C'}, U+001C FILE SEPARATOR.
10416      * <li> It is {@code '\u005Cu001D'}, U+001D GROUP SEPARATOR.
10417      * <li> It is {@code '\u005Cu001E'}, U+001E RECORD SEPARATOR.
10418      * <li> It is {@code '\u005Cu001F'}, U+001F UNIT SEPARATOR.
10419      * </ul>
10420      *
10421      * @param   codePoint the character (Unicode code point) to be tested.
10422      * @return  {@code true} if the character is a Java whitespace
10423      *          character; {@code false} otherwise.
10424      * @see     Character#isSpaceChar(int)
10425      * @since   1.5
10426      */
10427     public static boolean isWhitespace(int codePoint) {
10428         return CharacterData.of(codePoint).isWhitespace(codePoint);
10429     }
10430 
10431     /**
10432      * Determines if the specified character is an ISO control
10433      * character.  A character is considered to be an ISO control
10434      * character if its code is in the range {@code '\u005Cu0000'}
10435      * through {@code '\u005Cu001F'} or in the range
10436      * {@code '\u005Cu007F'} through {@code '\u005Cu009F'}.
10437      *
10438      * <p><b>Note:</b> This method cannot handle <a
10439      * href="#supplementary"> supplementary characters</a>. To support
10440      * all Unicode characters, including supplementary characters, use
10441      * the {@link #isISOControl(int)} method.
10442      *
10443      * @param   ch      the character to be tested.
10444      * @return  {@code true} if the character is an ISO control character;
10445      *          {@code false} otherwise.
10446      *
10447      * @see     Character#isSpaceChar(char)
10448      * @see     Character#isWhitespace(char)
10449      * @since   1.1
10450      */
10451     public static boolean isISOControl(char ch) {
10452         return isISOControl((int)ch);
10453     }
10454 
10455     /**
10456      * Determines if the referenced character (Unicode code point) is an ISO control
10457      * character.  A character is considered to be an ISO control
10458      * character if its code is in the range {@code '\u005Cu0000'}
10459      * through {@code '\u005Cu001F'} or in the range
10460      * {@code '\u005Cu007F'} through {@code '\u005Cu009F'}.
10461      *
10462      * @param   codePoint the character (Unicode code point) to be tested.
10463      * @return  {@code true} if the character is an ISO control character;
10464      *          {@code false} otherwise.
10465      * @see     Character#isSpaceChar(int)
10466      * @see     Character#isWhitespace(int)
10467      * @since   1.5
10468      */
10469     public static boolean isISOControl(int codePoint) {
10470         // Optimized form of:
10471         //     (codePoint >= 0x00 && codePoint <= 0x1F) ||
10472         //     (codePoint >= 0x7F && codePoint <= 0x9F);
10473         return codePoint <= 0x9F &&
10474             (codePoint >= 0x7F || (codePoint >>> 5 == 0));
10475     }
10476 
10477     /**
10478      * Returns a value indicating a character's general category.
10479      *
10480      * <p><b>Note:</b> This method cannot handle <a
10481      * href="#supplementary"> supplementary characters</a>. To support
10482      * all Unicode characters, including supplementary characters, use
10483      * the {@link #getType(int)} method.
10484      *
10485      * @param   ch      the character to be tested.
10486      * @return  a value of type {@code int} representing the
10487      *          character's general category.
10488      * @see     Character#COMBINING_SPACING_MARK
10489      * @see     Character#CONNECTOR_PUNCTUATION
10490      * @see     Character#CONTROL
10491      * @see     Character#CURRENCY_SYMBOL
10492      * @see     Character#DASH_PUNCTUATION
10493      * @see     Character#DECIMAL_DIGIT_NUMBER
10494      * @see     Character#ENCLOSING_MARK
10495      * @see     Character#END_PUNCTUATION
10496      * @see     Character#FINAL_QUOTE_PUNCTUATION
10497      * @see     Character#FORMAT
10498      * @see     Character#INITIAL_QUOTE_PUNCTUATION
10499      * @see     Character#LETTER_NUMBER
10500      * @see     Character#LINE_SEPARATOR
10501      * @see     Character#LOWERCASE_LETTER
10502      * @see     Character#MATH_SYMBOL
10503      * @see     Character#MODIFIER_LETTER
10504      * @see     Character#MODIFIER_SYMBOL
10505      * @see     Character#NON_SPACING_MARK
10506      * @see     Character#OTHER_LETTER
10507      * @see     Character#OTHER_NUMBER
10508      * @see     Character#OTHER_PUNCTUATION
10509      * @see     Character#OTHER_SYMBOL
10510      * @see     Character#PARAGRAPH_SEPARATOR
10511      * @see     Character#PRIVATE_USE
10512      * @see     Character#SPACE_SEPARATOR
10513      * @see     Character#START_PUNCTUATION
10514      * @see     Character#SURROGATE
10515      * @see     Character#TITLECASE_LETTER
10516      * @see     Character#UNASSIGNED
10517      * @see     Character#UPPERCASE_LETTER
10518      * @since   1.1
10519      */
10520     public static int getType(char ch) {
10521         return getType((int)ch);
10522     }
10523 
10524     /**
10525      * Returns a value indicating a character's general category.
10526      *
10527      * @param   codePoint the character (Unicode code point) to be tested.
10528      * @return  a value of type {@code int} representing the
10529      *          character's general category.
10530      * @see     Character#COMBINING_SPACING_MARK COMBINING_SPACING_MARK
10531      * @see     Character#CONNECTOR_PUNCTUATION CONNECTOR_PUNCTUATION
10532      * @see     Character#CONTROL CONTROL
10533      * @see     Character#CURRENCY_SYMBOL CURRENCY_SYMBOL
10534      * @see     Character#DASH_PUNCTUATION DASH_PUNCTUATION
10535      * @see     Character#DECIMAL_DIGIT_NUMBER DECIMAL_DIGIT_NUMBER
10536      * @see     Character#ENCLOSING_MARK ENCLOSING_MARK
10537      * @see     Character#END_PUNCTUATION END_PUNCTUATION
10538      * @see     Character#FINAL_QUOTE_PUNCTUATION FINAL_QUOTE_PUNCTUATION
10539      * @see     Character#FORMAT FORMAT
10540      * @see     Character#INITIAL_QUOTE_PUNCTUATION INITIAL_QUOTE_PUNCTUATION
10541      * @see     Character#LETTER_NUMBER LETTER_NUMBER
10542      * @see     Character#LINE_SEPARATOR LINE_SEPARATOR
10543      * @see     Character#LOWERCASE_LETTER LOWERCASE_LETTER
10544      * @see     Character#MATH_SYMBOL MATH_SYMBOL
10545      * @see     Character#MODIFIER_LETTER MODIFIER_LETTER
10546      * @see     Character#MODIFIER_SYMBOL MODIFIER_SYMBOL
10547      * @see     Character#NON_SPACING_MARK NON_SPACING_MARK
10548      * @see     Character#OTHER_LETTER OTHER_LETTER
10549      * @see     Character#OTHER_NUMBER OTHER_NUMBER
10550      * @see     Character#OTHER_PUNCTUATION OTHER_PUNCTUATION
10551      * @see     Character#OTHER_SYMBOL OTHER_SYMBOL
10552      * @see     Character#PARAGRAPH_SEPARATOR PARAGRAPH_SEPARATOR
10553      * @see     Character#PRIVATE_USE PRIVATE_USE
10554      * @see     Character#SPACE_SEPARATOR SPACE_SEPARATOR
10555      * @see     Character#START_PUNCTUATION START_PUNCTUATION
10556      * @see     Character#SURROGATE SURROGATE
10557      * @see     Character#TITLECASE_LETTER TITLECASE_LETTER
10558      * @see     Character#UNASSIGNED UNASSIGNED
10559      * @see     Character#UPPERCASE_LETTER UPPERCASE_LETTER
10560      * @since   1.5
10561      */
10562     public static int getType(int codePoint) {
10563         return CharacterData.of(codePoint).getType(codePoint);
10564     }
10565 
10566     /**
10567      * Determines the character representation for a specific digit in
10568      * the specified radix. If the value of {@code radix} is not a
10569      * valid radix, or the value of {@code digit} is not a valid
10570      * digit in the specified radix, the null character
10571      * ({@code '\u005Cu0000'}) is returned.
10572      * <p>
10573      * The {@code radix} argument is valid if it is greater than or
10574      * equal to {@code MIN_RADIX} and less than or equal to
10575      * {@code MAX_RADIX}. The {@code digit} argument is valid if
10576      * {@code 0 <= digit < radix}.
10577      * <p>
10578      * If the digit is less than 10, then
10579      * {@code '0' + digit} is returned. Otherwise, the value
10580      * {@code 'a' + digit - 10} is returned.
10581      *
10582      * @param   digit   the number to convert to a character.
10583      * @param   radix   the radix.
10584      * @return  the {@code char} representation of the specified digit
10585      *          in the specified radix.
10586      * @see     Character#MIN_RADIX
10587      * @see     Character#MAX_RADIX
10588      * @see     Character#digit(char, int)
10589      */
10590     public static char forDigit(int digit, int radix) {
10591         if ((digit >= radix) || (digit < 0)) {
10592             return '\0';
10593         }
10594         if ((radix < Character.MIN_RADIX) || (radix > Character.MAX_RADIX)) {
10595             return '\0';
10596         }
10597         if (digit < 10) {
10598             return (char)('0' + digit);
10599         }
10600         return (char)('a' - 10 + digit);
10601     }
10602 
10603     /**
10604      * Returns the Unicode directionality property for the given
10605      * character.  Character directionality is used to calculate the
10606      * visual ordering of text. The directionality value of undefined
10607      * {@code char} values is {@code DIRECTIONALITY_UNDEFINED}.
10608      *
10609      * <p><b>Note:</b> This method cannot handle <a
10610      * href="#supplementary"> supplementary characters</a>. To support
10611      * all Unicode characters, including supplementary characters, use
10612      * the {@link #getDirectionality(int)} method.
10613      *
10614      * @param  ch {@code char} for which the directionality property
10615      *            is requested.
10616      * @return the directionality property of the {@code char} value.
10617      *
10618      * @see Character#DIRECTIONALITY_UNDEFINED
10619      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT
10620      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT
10621      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC
10622      * @see Character#DIRECTIONALITY_EUROPEAN_NUMBER
10623      * @see Character#DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR
10624      * @see Character#DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR
10625      * @see Character#DIRECTIONALITY_ARABIC_NUMBER
10626      * @see Character#DIRECTIONALITY_COMMON_NUMBER_SEPARATOR
10627      * @see Character#DIRECTIONALITY_NONSPACING_MARK
10628      * @see Character#DIRECTIONALITY_BOUNDARY_NEUTRAL
10629      * @see Character#DIRECTIONALITY_PARAGRAPH_SEPARATOR
10630      * @see Character#DIRECTIONALITY_SEGMENT_SEPARATOR
10631      * @see Character#DIRECTIONALITY_WHITESPACE
10632      * @see Character#DIRECTIONALITY_OTHER_NEUTRALS
10633      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING
10634      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE
10635      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING
10636      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE
10637      * @see Character#DIRECTIONALITY_POP_DIRECTIONAL_FORMAT
10638      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT_ISOLATE
10639      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_ISOLATE
10640      * @see Character#DIRECTIONALITY_FIRST_STRONG_ISOLATE
10641      * @see Character#DIRECTIONALITY_POP_DIRECTIONAL_ISOLATE
10642      * @since 1.4
10643      */
10644     public static byte getDirectionality(char ch) {
10645         return getDirectionality((int)ch);
10646     }
10647 
10648     /**
10649      * Returns the Unicode directionality property for the given
10650      * character (Unicode code point).  Character directionality is
10651      * used to calculate the visual ordering of text. The
10652      * directionality value of undefined character is {@link
10653      * #DIRECTIONALITY_UNDEFINED}.
10654      *
10655      * @param   codePoint the character (Unicode code point) for which
10656      *          the directionality property is requested.
10657      * @return the directionality property of the character.
10658      *
10659      * @see Character#DIRECTIONALITY_UNDEFINED DIRECTIONALITY_UNDEFINED
10660      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT DIRECTIONALITY_LEFT_TO_RIGHT
10661      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT DIRECTIONALITY_RIGHT_TO_LEFT
10662      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC
10663      * @see Character#DIRECTIONALITY_EUROPEAN_NUMBER DIRECTIONALITY_EUROPEAN_NUMBER
10664      * @see Character#DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR
10665      * @see Character#DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR
10666      * @see Character#DIRECTIONALITY_ARABIC_NUMBER DIRECTIONALITY_ARABIC_NUMBER
10667      * @see Character#DIRECTIONALITY_COMMON_NUMBER_SEPARATOR DIRECTIONALITY_COMMON_NUMBER_SEPARATOR
10668      * @see Character#DIRECTIONALITY_NONSPACING_MARK DIRECTIONALITY_NONSPACING_MARK
10669      * @see Character#DIRECTIONALITY_BOUNDARY_NEUTRAL DIRECTIONALITY_BOUNDARY_NEUTRAL
10670      * @see Character#DIRECTIONALITY_PARAGRAPH_SEPARATOR DIRECTIONALITY_PARAGRAPH_SEPARATOR
10671      * @see Character#DIRECTIONALITY_SEGMENT_SEPARATOR DIRECTIONALITY_SEGMENT_SEPARATOR
10672      * @see Character#DIRECTIONALITY_WHITESPACE DIRECTIONALITY_WHITESPACE
10673      * @see Character#DIRECTIONALITY_OTHER_NEUTRALS DIRECTIONALITY_OTHER_NEUTRALS
10674      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING
10675      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE
10676      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING
10677      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE
10678      * @see Character#DIRECTIONALITY_POP_DIRECTIONAL_FORMAT DIRECTIONALITY_POP_DIRECTIONAL_FORMAT
10679      * @see Character#DIRECTIONALITY_LEFT_TO_RIGHT_ISOLATE DIRECTIONALITY_LEFT_TO_RIGHT_ISOLATE
10680      * @see Character#DIRECTIONALITY_RIGHT_TO_LEFT_ISOLATE DIRECTIONALITY_RIGHT_TO_LEFT_ISOLATE
10681      * @see Character#DIRECTIONALITY_FIRST_STRONG_ISOLATE DIRECTIONALITY_FIRST_STRONG_ISOLATE
10682      * @see Character#DIRECTIONALITY_POP_DIRECTIONAL_ISOLATE DIRECTIONALITY_POP_DIRECTIONAL_ISOLATE
10683      * @since    1.5
10684      */
10685     public static byte getDirectionality(int codePoint) {
10686         return CharacterData.of(codePoint).getDirectionality(codePoint);
10687     }
10688 
10689     /**
10690      * Determines whether the character is mirrored according to the
10691      * Unicode specification.  Mirrored characters should have their
10692      * glyphs horizontally mirrored when displayed in text that is
10693      * right-to-left.  For example, {@code '\u005Cu0028'} LEFT
10694      * PARENTHESIS is semantically defined to be an <i>opening
10695      * parenthesis</i>.  This will appear as a "(" in text that is
10696      * left-to-right but as a ")" in text that is right-to-left.
10697      *
10698      * <p><b>Note:</b> This method cannot handle <a
10699      * href="#supplementary"> supplementary characters</a>. To support
10700      * all Unicode characters, including supplementary characters, use
10701      * the {@link #isMirrored(int)} method.
10702      *
10703      * @param  ch {@code char} for which the mirrored property is requested
10704      * @return {@code true} if the char is mirrored, {@code false}
10705      *         if the {@code char} is not mirrored or is not defined.
10706      * @since 1.4
10707      */
10708     public static boolean isMirrored(char ch) {
10709         return isMirrored((int)ch);
10710     }
10711 
10712     /**
10713      * Determines whether the specified character (Unicode code point)
10714      * is mirrored according to the Unicode specification.  Mirrored
10715      * characters should have their glyphs horizontally mirrored when
10716      * displayed in text that is right-to-left.  For example,
10717      * {@code '\u005Cu0028'} LEFT PARENTHESIS is semantically
10718      * defined to be an <i>opening parenthesis</i>.  This will appear
10719      * as a "(" in text that is left-to-right but as a ")" in text
10720      * that is right-to-left.
10721      *
10722      * @param   codePoint the character (Unicode code point) to be tested.
10723      * @return  {@code true} if the character is mirrored, {@code false}
10724      *          if the character is not mirrored or is not defined.
10725      * @since   1.5
10726      */
10727     public static boolean isMirrored(int codePoint) {
10728         return CharacterData.of(codePoint).isMirrored(codePoint);
10729     }
10730 
10731     /**
10732      * Compares two {@code Character} objects numerically.
10733      *
10734      * @param   anotherCharacter   the {@code Character} to be compared.
10735 
10736      * @return  the value {@code 0} if the argument {@code Character}
10737      *          is equal to this {@code Character}; a value less than
10738      *          {@code 0} if this {@code Character} is numerically less
10739      *          than the {@code Character} argument; and a value greater than
10740      *          {@code 0} if this {@code Character} is numerically greater
10741      *          than the {@code Character} argument (unsigned comparison).
10742      *          Note that this is strictly a numerical comparison; it is not
10743      *          locale-dependent.
10744      * @since   1.2
10745      */
10746     public int compareTo(Character anotherCharacter) {
10747         return compare(this.value, anotherCharacter.value);
10748     }
10749 
10750     /**
10751      * Compares two {@code char} values numerically.
10752      * The value returned is identical to what would be returned by:
10753      * <pre>
10754      *    Character.valueOf(x).compareTo(Character.valueOf(y))
10755      * </pre>
10756      *
10757      * @param  x the first {@code char} to compare
10758      * @param  y the second {@code char} to compare
10759      * @return the value {@code 0} if {@code x == y};
10760      *         a value less than {@code 0} if {@code x < y}; and
10761      *         a value greater than {@code 0} if {@code x > y}
10762      * @since 1.7
10763      */
10764     public static int compare(char x, char y) {
10765         return x - y;
10766     }
10767 
10768     /**
10769      * Converts the character (Unicode code point) argument to uppercase using
10770      * information from the UnicodeData file.
10771      *
10772      * @param   codePoint   the character (Unicode code point) to be converted.
10773      * @return  either the uppercase equivalent of the character, if
10774      *          any, or an error flag ({@code Character.ERROR})
10775      *          that indicates that a 1:M {@code char} mapping exists.
10776      * @see     Character#isLowerCase(char)
10777      * @see     Character#isUpperCase(char)
10778      * @see     Character#toLowerCase(char)
10779      * @see     Character#toTitleCase(char)
10780      * @since 1.4
10781      */
10782     static int toUpperCaseEx(int codePoint) {
10783         assert isValidCodePoint(codePoint);
10784         return CharacterData.of(codePoint).toUpperCaseEx(codePoint);
10785     }
10786 
10787     /**
10788      * Converts the character (Unicode code point) argument to uppercase using case
10789      * mapping information from the SpecialCasing file in the Unicode
10790      * specification. If a character has no explicit uppercase
10791      * mapping, then the {@code char} itself is returned in the
10792      * {@code char[]}.
10793      *
10794      * @param   codePoint   the character (Unicode code point) to be converted.
10795      * @return a {@code char[]} with the uppercased character.
10796      * @since 1.4
10797      */
10798     static char[] toUpperCaseCharArray(int codePoint) {
10799         // As of Unicode 6.0, 1:M uppercasings only happen in the BMP.
10800         assert isBmpCodePoint(codePoint);
10801         return CharacterData.of(codePoint).toUpperCaseCharArray(codePoint);
10802     }
10803 
10804     /**
10805      * The number of bits used to represent a {@code char} value in unsigned
10806      * binary form, constant {@code 16}.
10807      *
10808      * @since 1.5
10809      */
10810     public static final int SIZE = 16;
10811 
10812     /**
10813      * The number of bytes used to represent a {@code char} value in unsigned
10814      * binary form.
10815      *
10816      * @since 1.8
10817      */
10818     public static final int BYTES = SIZE / Byte.SIZE;
10819 
10820     /**
10821      * Returns the value obtained by reversing the order of the bytes in the
10822      * specified {@code char} value.
10823      *
10824      * @param ch The {@code char} of which to reverse the byte order.
10825      * @return the value obtained by reversing (or, equivalently, swapping)
10826      *     the bytes in the specified {@code char} value.
10827      * @since 1.5
10828      */
10829     @HotSpotIntrinsicCandidate
10830     public static char reverseBytes(char ch) {
10831         return (char) (((ch & 0xFF00) >> 8) | (ch << 8));
10832     }
10833 
10834     /**
10835      * Returns the Unicode name of the specified character
10836      * {@code codePoint}, or null if the code point is
10837      * {@link #UNASSIGNED unassigned}.
10838      * <p>
10839      * Note: if the specified character is not assigned a name by
10840      * the <i>UnicodeData</i> file (part of the Unicode Character
10841      * Database maintained by the Unicode Consortium), the returned
10842      * name is the same as the result of expression.
10843      *
10844      * <blockquote>{@code
10845      *     Character.UnicodeBlock.of(codePoint).toString().replace('_', ' ')
10846      *     + " "
10847      *     + Integer.toHexString(codePoint).toUpperCase(Locale.ROOT);
10848      *
10849      * }</blockquote>
10850      *
10851      * @param  codePoint the character (Unicode code point)
10852      *
10853      * @return the Unicode name of the specified character, or null if
10854      *         the code point is unassigned.
10855      *
10856      * @throws IllegalArgumentException if the specified
10857      *            {@code codePoint} is not a valid Unicode
10858      *            code point.
10859      *
10860      * @since 1.7
10861      */
10862     public static String getName(int codePoint) {
10863         if (!isValidCodePoint(codePoint)) {
10864             throw new IllegalArgumentException(
10865                 String.format("Not a valid Unicode code point: 0x%X", codePoint));
10866         }
10867         String name = CharacterName.getInstance().getName(codePoint);
10868         if (name != null)
10869             return name;
10870         if (getType(codePoint) == UNASSIGNED)
10871             return null;
10872         UnicodeBlock block = UnicodeBlock.of(codePoint);
10873         if (block != null)
10874             return block.toString().replace('_', ' ') + " "
10875                    + Integer.toHexString(codePoint).toUpperCase(Locale.ROOT);
10876         // should never come here
10877         return Integer.toHexString(codePoint).toUpperCase(Locale.ROOT);
10878     }
10879 
10880     /**
10881      * Returns the code point value of the Unicode character specified by
10882      * the given Unicode character name.
10883      * <p>
10884      * Note: if a character is not assigned a name by the <i>UnicodeData</i>
10885      * file (part of the Unicode Character Database maintained by the Unicode
10886      * Consortium), its name is defined as the result of expression
10887      *
10888      * <blockquote>{@code
10889      *     Character.UnicodeBlock.of(codePoint).toString().replace('_', ' ')
10890      *     + " "
10891      *     + Integer.toHexString(codePoint).toUpperCase(Locale.ROOT);
10892      *
10893      * }</blockquote>
10894      * <p>
10895      * The {@code name} matching is case insensitive, with any leading and
10896      * trailing whitespace character removed.
10897      *
10898      * @param  name the Unicode character name
10899      *
10900      * @return the code point value of the character specified by its name.
10901      *
10902      * @throws IllegalArgumentException if the specified {@code name}
10903      *         is not a valid Unicode character name.
10904      * @throws NullPointerException if {@code name} is {@code null}
10905      *
10906      * @since 9
10907      */
10908     public static int codePointOf(String name) {
10909         name = name.trim().toUpperCase(Locale.ROOT);
10910         int cp = CharacterName.getInstance().getCodePoint(name);
10911         if (cp != -1)
10912             return cp;
10913         try {
10914             int off = name.lastIndexOf(' ');
10915             if (off != -1) {
10916                 cp = Integer.parseInt(name, off + 1, name.length(), 16);
10917                 if (isValidCodePoint(cp) && name.equals(getName(cp)))
10918                     return cp;
10919             }
10920         } catch (Exception x) {}
10921         throw new IllegalArgumentException("Unrecognized character name :" + name);
10922     }
10923 }