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