src/jdk.internal.le/share/classes/jdk/internal/jline/console/WCWidth.java
author jlahoda
Fri, 01 Jun 2018 13:04:30 +0200
changeset 50338 1d5694c1aa03
permissions -rw-r--r--
8203827: Upgrade JLine to 2.14.6 Reviewed-by: alanb, hannesw, rfield
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50338
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
     1
/*
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
     2
 * Copyright (c) 2002-2016, the original author or authors.
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
     3
 *
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
     4
 * This software is distributable under the BSD license. See the terms of the
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
     5
 * BSD license in the documentation provided with this software.
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
     6
 *
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
     7
 * http://www.opensource.org/licenses/bsd-license.php
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
     8
 */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
     9
package jdk.internal.jline.console;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    10
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    11
public class WCWidth {
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    12
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    13
    /* The following two functions define the column width of an ISO 10646
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    14
     * character as follows:
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    15
     *
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    16
     *    - The null character (U+0000) has a column width of 0.
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    17
     *
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    18
     *    - Other C0/C1 control characters and DEL will lead to a return
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    19
     *      value of -1.
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    20
     *
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    21
     *    - Non-spacing and enclosing combining characters (general
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    22
     *      category code Mn or Me in the Unicode database) have a
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    23
     *      column width of 0.
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    24
     *
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    25
     *    - SOFT HYPHEN (U+00AD) has a column width of 1.
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    26
     *
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    27
     *    - Other format characters (general category code Cf in the Unicode
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    28
     *      database) and ZERO WIDTH SPACE (U+200B) have a column width of 0.
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    29
     *
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    30
     *    - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    31
     *      have a column width of 0.
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    32
     *
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    33
     *    - Spacing characters in the East Asian Wide (W) or East Asian
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    34
     *      Full-width (F) category as defined in Unicode Technical
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    35
     *      Report #11 have a column width of 2.
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    36
     *
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    37
     *    - All remaining characters (including all printable
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    38
     *      ISO 8859-1 and WGL4 characters, Unicode control characters,
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    39
     *      etc.) have a column width of 1.
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    40
     *
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    41
     * This implementation assumes that wchar_t characters are encoded
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    42
     * in ISO 10646.
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    43
     */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    44
    public static int wcwidth(int ucs)
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    45
    {
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    46
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    47
        /* test for 8-bit control characters */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    48
        if (ucs == 0)
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    49
            return 0;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    50
        if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    51
            return -1;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    52
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    53
        /* binary search in table of non-spacing characters */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    54
        if (bisearch(ucs, combining, combining.length - 1))
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    55
            return 0;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    56
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    57
        /* if we arrive here, ucs is not a combining or C0/C1 control character */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    58
        return 1 +
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    59
                ((ucs >= 0x1100 &&
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    60
                        (ucs <= 0x115f ||                           /* Hangul Jamo init. consonants */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    61
                                ucs == 0x2329 || ucs == 0x232a ||
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    62
                                (ucs >= 0x2e80 && ucs <= 0xa4cf &&
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    63
                                        ucs != 0x303f) ||           /* CJK ... Yi */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    64
                                (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    65
                                (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    66
                                (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    67
                                (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    68
                                (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    69
                                (ucs >= 0xffe0 && ucs <= 0xffe6) ||
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    70
                                (ucs >= 0x20000 && ucs <= 0x2fffd) ||
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    71
                                (ucs >= 0x30000 && ucs <= 0x3fffd))) ? 1 : 0);
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    72
    }
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    73
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    74
    /* sorted list of non-overlapping intervals of non-spacing characters */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    75
    /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    76
    static Interval[] combining = {
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    77
            new Interval( 0x0300, 0x036F ), new Interval( 0x0483, 0x0486 ), new Interval( 0x0488, 0x0489 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    78
            new Interval( 0x0591, 0x05BD ), new Interval( 0x05BF, 0x05BF ), new Interval( 0x05C1, 0x05C2 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    79
            new Interval( 0x05C4, 0x05C5 ), new Interval( 0x05C7, 0x05C7 ), new Interval( 0x0600, 0x0603 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    80
            new Interval( 0x0610, 0x0615 ), new Interval( 0x064B, 0x065E ), new Interval( 0x0670, 0x0670 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    81
            new Interval( 0x06D6, 0x06E4 ), new Interval( 0x06E7, 0x06E8 ), new Interval( 0x06EA, 0x06ED ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    82
            new Interval( 0x070F, 0x070F ), new Interval( 0x0711, 0x0711 ), new Interval( 0x0730, 0x074A ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    83
            new Interval( 0x07A6, 0x07B0 ), new Interval( 0x07EB, 0x07F3 ), new Interval( 0x0901, 0x0902 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    84
            new Interval( 0x093C, 0x093C ), new Interval( 0x0941, 0x0948 ), new Interval( 0x094D, 0x094D ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    85
            new Interval( 0x0951, 0x0954 ), new Interval( 0x0962, 0x0963 ), new Interval( 0x0981, 0x0981 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    86
            new Interval( 0x09BC, 0x09BC ), new Interval( 0x09C1, 0x09C4 ), new Interval( 0x09CD, 0x09CD ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    87
            new Interval( 0x09E2, 0x09E3 ), new Interval( 0x0A01, 0x0A02 ), new Interval( 0x0A3C, 0x0A3C ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    88
            new Interval( 0x0A41, 0x0A42 ), new Interval( 0x0A47, 0x0A48 ), new Interval( 0x0A4B, 0x0A4D ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    89
            new Interval( 0x0A70, 0x0A71 ), new Interval( 0x0A81, 0x0A82 ), new Interval( 0x0ABC, 0x0ABC ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    90
            new Interval( 0x0AC1, 0x0AC5 ), new Interval( 0x0AC7, 0x0AC8 ), new Interval( 0x0ACD, 0x0ACD ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    91
            new Interval( 0x0AE2, 0x0AE3 ), new Interval( 0x0B01, 0x0B01 ), new Interval( 0x0B3C, 0x0B3C ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    92
            new Interval( 0x0B3F, 0x0B3F ), new Interval( 0x0B41, 0x0B43 ), new Interval( 0x0B4D, 0x0B4D ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    93
            new Interval( 0x0B56, 0x0B56 ), new Interval( 0x0B82, 0x0B82 ), new Interval( 0x0BC0, 0x0BC0 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    94
            new Interval( 0x0BCD, 0x0BCD ), new Interval( 0x0C3E, 0x0C40 ), new Interval( 0x0C46, 0x0C48 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    95
            new Interval( 0x0C4A, 0x0C4D ), new Interval( 0x0C55, 0x0C56 ), new Interval( 0x0CBC, 0x0CBC ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    96
            new Interval( 0x0CBF, 0x0CBF ), new Interval( 0x0CC6, 0x0CC6 ), new Interval( 0x0CCC, 0x0CCD ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    97
            new Interval( 0x0CE2, 0x0CE3 ), new Interval( 0x0D41, 0x0D43 ), new Interval( 0x0D4D, 0x0D4D ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    98
            new Interval( 0x0DCA, 0x0DCA ), new Interval( 0x0DD2, 0x0DD4 ), new Interval( 0x0DD6, 0x0DD6 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
    99
            new Interval( 0x0E31, 0x0E31 ), new Interval( 0x0E34, 0x0E3A ), new Interval( 0x0E47, 0x0E4E ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   100
            new Interval( 0x0EB1, 0x0EB1 ), new Interval( 0x0EB4, 0x0EB9 ), new Interval( 0x0EBB, 0x0EBC ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   101
            new Interval( 0x0EC8, 0x0ECD ), new Interval( 0x0F18, 0x0F19 ), new Interval( 0x0F35, 0x0F35 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   102
            new Interval( 0x0F37, 0x0F37 ), new Interval( 0x0F39, 0x0F39 ), new Interval( 0x0F71, 0x0F7E ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   103
            new Interval( 0x0F80, 0x0F84 ), new Interval( 0x0F86, 0x0F87 ), new Interval( 0x0F90, 0x0F97 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   104
            new Interval( 0x0F99, 0x0FBC ), new Interval( 0x0FC6, 0x0FC6 ), new Interval( 0x102D, 0x1030 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   105
            new Interval( 0x1032, 0x1032 ), new Interval( 0x1036, 0x1037 ), new Interval( 0x1039, 0x1039 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   106
            new Interval( 0x1058, 0x1059 ), new Interval( 0x1160, 0x11FF ), new Interval( 0x135F, 0x135F ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   107
            new Interval( 0x1712, 0x1714 ), new Interval( 0x1732, 0x1734 ), new Interval( 0x1752, 0x1753 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   108
            new Interval( 0x1772, 0x1773 ), new Interval( 0x17B4, 0x17B5 ), new Interval( 0x17B7, 0x17BD ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   109
            new Interval( 0x17C6, 0x17C6 ), new Interval( 0x17C9, 0x17D3 ), new Interval( 0x17DD, 0x17DD ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   110
            new Interval( 0x180B, 0x180D ), new Interval( 0x18A9, 0x18A9 ), new Interval( 0x1920, 0x1922 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   111
            new Interval( 0x1927, 0x1928 ), new Interval( 0x1932, 0x1932 ), new Interval( 0x1939, 0x193B ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   112
            new Interval( 0x1A17, 0x1A18 ), new Interval( 0x1B00, 0x1B03 ), new Interval( 0x1B34, 0x1B34 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   113
            new Interval( 0x1B36, 0x1B3A ), new Interval( 0x1B3C, 0x1B3C ), new Interval( 0x1B42, 0x1B42 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   114
            new Interval( 0x1B6B, 0x1B73 ), new Interval( 0x1DC0, 0x1DCA ), new Interval( 0x1DFE, 0x1DFF ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   115
            new Interval( 0x200B, 0x200F ), new Interval( 0x202A, 0x202E ), new Interval( 0x2060, 0x2063 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   116
            new Interval( 0x206A, 0x206F ), new Interval( 0x20D0, 0x20EF ), new Interval( 0x302A, 0x302F ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   117
            new Interval( 0x3099, 0x309A ), new Interval( 0xA806, 0xA806 ), new Interval( 0xA80B, 0xA80B ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   118
            new Interval( 0xA825, 0xA826 ), new Interval( 0xFB1E, 0xFB1E ), new Interval( 0xFE00, 0xFE0F ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   119
            new Interval( 0xFE20, 0xFE23 ), new Interval( 0xFEFF, 0xFEFF ), new Interval( 0xFFF9, 0xFFFB ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   120
            new Interval( 0x10A01, 0x10A03 ), new Interval( 0x10A05, 0x10A06 ), new Interval( 0x10A0C, 0x10A0F ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   121
            new Interval( 0x10A38, 0x10A3A ), new Interval( 0x10A3F, 0x10A3F ), new Interval( 0x1D167, 0x1D169 ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   122
            new Interval( 0x1D173, 0x1D182 ), new Interval( 0x1D185, 0x1D18B ), new Interval( 0x1D1AA, 0x1D1AD ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   123
            new Interval( 0x1D242, 0x1D244 ), new Interval( 0xE0001, 0xE0001 ), new Interval( 0xE0020, 0xE007F ),
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   124
            new Interval( 0xE0100, 0xE01EF )
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   125
    };
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   126
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   127
    private static class Interval {
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   128
        public final int first;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   129
        public final int last;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   130
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   131
        public Interval(int first, int last) {
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   132
            this.first = first;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   133
            this.last = last;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   134
        }
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   135
    }
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   136
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   137
    /* auxiliary function for binary search in interval table */
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   138
    private static boolean bisearch(int ucs, Interval[] table, int max) {
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   139
        int min = 0;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   140
        int mid;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   141
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   142
        if (ucs < table[0].first || ucs > table[max].last)
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   143
            return false;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   144
        while (max >= min) {
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   145
            mid = (min + max) / 2;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   146
            if (ucs > table[mid].last)
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   147
                min = mid + 1;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   148
            else if (ucs < table[mid].first)
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   149
                max = mid - 1;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   150
            else
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   151
                return true;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   152
        }
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   153
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   154
        return false;
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   155
    }
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   156
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   157
1d5694c1aa03 8203827: Upgrade JLine to 2.14.6
jlahoda
parents:
diff changeset
   158
}