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