jdk/src/java.base/share/classes/sun/text/normalizer/UBiDiProps.java
author martin
Tue, 15 Sep 2015 21:56:04 -0700
changeset 32649 2ee9017c7597
parent 31680 88c53c2293b4
permissions -rw-r--r--
8136583: Core libraries should use blessed modifier order Summary: Run blessed-modifier-order script (see bug) Reviewed-by: psandoz, chegar, alanb, plevart
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
     1
/*
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
     2
 * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
     4
 *
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2497
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2497
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    10
 *
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    15
 * accompanied this code).
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    16
 *
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2497
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2497
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2497
diff changeset
    23
 * questions.
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    24
 */
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    25
/*
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    26
 *******************************************************************************
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    27
 *
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    28
 *   Copyright (C) 2004-2014, International Business Machines
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    29
 *   Corporation and others.  All Rights Reserved.
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    30
 *
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    31
 *******************************************************************************
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    32
 *   file name:  UBiDiProps.java
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    33
 *   encoding:   US-ASCII
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    34
 *   tab size:   8 (not used)
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    35
 *   indentation:4
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    36
 *
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    37
 *   created on: 2005jan16
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    38
 *   created by: Markus W. Scherer
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    39
 *
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    40
 *   Low-level Unicode bidi/shaping properties access.
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    41
 *   Java port of ubidi_props.h/.c.
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    42
 */
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    43
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    44
package sun.text.normalizer;
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    45
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    46
import java.io.IOException;
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    47
import java.nio.ByteBuffer;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    48
import java.util.MissingResourceException;
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    49
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    50
public final class UBiDiProps {
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    51
    // constructors etc. --------------------------------------------------- ***
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    52
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    53
    // port of ubidi_openProps()
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    54
    private UBiDiProps() throws IOException{
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    55
        ByteBuffer bytes=ICUBinary.getRequiredData(DATA_FILE_NAME);
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    56
        readData(bytes);
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    57
    }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    58
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    59
    private void readData(ByteBuffer bytes) throws IOException {
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    60
        // read the header
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    61
        ICUBinary.readHeader(bytes, FMT, new IsAcceptable());
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    62
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    63
        // read indexes[]
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    64
        int i, count;
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    65
        count=bytes.getInt();
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    66
        if(count<IX_TOP) {
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    67
            throw new IOException("indexes[0] too small in "+DATA_FILE_NAME);
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    68
        }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    69
        indexes=new int[count];
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    70
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    71
        indexes[0]=count;
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    72
        for(i=1; i<count; ++i) {
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    73
            indexes[i]=bytes.getInt();
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    74
        }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    75
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    76
        // read the trie
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    77
        trie=Trie2_16.createFromSerialized(bytes);
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    78
        int expectedTrieLength=indexes[IX_TRIE_SIZE];
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    79
        int trieLength=trie.getSerializedLength();
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    80
        if(trieLength>expectedTrieLength) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    81
            throw new IOException(DATA_FILE_NAME+": not enough bytes for the trie");
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    82
        }
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    83
        // skip padding after trie bytes
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    84
        ICUBinary.skipBytes(bytes, expectedTrieLength-trieLength);
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    85
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    86
        // read mirrors[]
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    87
        count=indexes[IX_MIRROR_LENGTH];
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    88
        if(count>0) {
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    89
            mirrors=new int[count];
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    90
            for(i=0; i<count; ++i) {
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    91
                mirrors[i]=bytes.getInt();
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    92
            }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    93
        }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    94
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    95
        // read jgArray[]
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    96
        count=indexes[IX_JG_LIMIT]-indexes[IX_JG_START];
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    97
        jgArray=new byte[count];
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
    98
        for(i=0; i<count; ++i) {
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
    99
            jgArray[i]=bytes.get();
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   100
        }
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   101
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   102
        // read jgArray2[]
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   103
        count=indexes[IX_JG_LIMIT2]-indexes[IX_JG_START2];
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   104
        jgArray2=new byte[count];
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   105
        for(i=0; i<count; ++i) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   106
            jgArray2[i]=bytes.get();
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   107
        }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   108
    }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   109
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   110
    // implement ICUBinary.Authenticate
32649
2ee9017c7597 8136583: Core libraries should use blessed modifier order
martin
parents: 31680
diff changeset
   111
    private static final class IsAcceptable implements ICUBinary.Authenticate {
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   112
        public boolean isDataVersionAcceptable(byte version[]) {
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   113
            return version[0]==2;
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   114
        }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   115
    }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   116
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   117
    // property access functions ------------------------------------------- ***
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   118
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   119
    public final int getClass(int c) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   120
        return getClassFromProps(trie.get(c));
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   121
    }
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   122
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   123
    private final int getMirror(int c, int props) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   124
        int delta=getMirrorDeltaFromProps(props);
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   125
        if(delta!=ESC_MIRROR_DELTA) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   126
            return c+delta;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   127
        } else {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   128
            /* look for mirror code point in the mirrors[] table */
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   129
            int m;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   130
            int i, length;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   131
            int c2;
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   132
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   133
            length=indexes[IX_MIRROR_LENGTH];
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   134
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   135
            /* linear search */
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   136
            for(i=0; i<length; ++i) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   137
                m=mirrors[i];
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   138
                c2=getMirrorCodePoint(m);
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   139
                if(c==c2) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   140
                    /* found c, return its mirror code point using the index in m */
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   141
                    return getMirrorCodePoint(mirrors[getMirrorIndex(m)]);
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   142
                } else if(c<c2) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   143
                    break;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   144
                }
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   145
            }
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   146
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   147
            /* c not found, return it itself */
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   148
            return c;
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   149
        }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   150
    }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   151
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   152
    public final int getMirror(int c) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   153
        int props=trie.get(c);
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   154
        return getMirror(c, props);
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   155
    }
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   156
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   157
    public final int getJoiningType(int c) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   158
        return (trie.get(c)&JT_MASK)>>JT_SHIFT;
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   159
    }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   160
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   161
    public final int getJoiningGroup(int c) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   162
        int start, limit;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   163
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   164
        start=indexes[IX_JG_START];
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   165
        limit=indexes[IX_JG_LIMIT];
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   166
        if(start<=c && c<limit) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   167
            return (int)jgArray[c-start]&0xff;
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   168
        }
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   169
        start=indexes[IX_JG_START2];
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   170
        limit=indexes[IX_JG_LIMIT2];
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   171
        if(start<=c && c<limit) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   172
            return (int)jgArray2[c-start]&0xff;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   173
        }
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   174
        return UCharacter.JoiningGroup.NO_JOINING_GROUP;
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   175
    }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   176
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   177
    public final int getPairedBracketType(int c) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   178
        return (trie.get(c)&BPT_MASK)>>BPT_SHIFT;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   179
    }
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   180
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   181
    public final int getPairedBracket(int c) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   182
        int props=trie.get(c);
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   183
        if((props&BPT_MASK)==0) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   184
            return c;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   185
        } else {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   186
            return getMirror(c, props);
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   187
        }
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   188
    }
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   189
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   190
    // data members -------------------------------------------------------- ***
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   191
    private int indexes[];
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   192
    private int mirrors[];
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   193
    private byte jgArray[];
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   194
    private byte jgArray2[];
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   195
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   196
    private Trie2_16 trie;
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   197
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   198
    // data format constants ----------------------------------------------- ***
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   199
    private static final String DATA_FILE_NAME = "/sun/text/resources/ubidi.icu";
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   200
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   201
    /* format "BiDi" */
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   202
    private static final int FMT=0x42694469;
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   203
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   204
    /* indexes into indexes[] */
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   205
    private static final int IX_TRIE_SIZE=2;
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   206
    private static final int IX_MIRROR_LENGTH=3;
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   207
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   208
    private static final int IX_JG_START=4;
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   209
    private static final int IX_JG_LIMIT=5;
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   210
    private static final int IX_JG_START2=6;  /* new in format version 2.2, ICU 54 */
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   211
    private static final int IX_JG_LIMIT2=7;
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   212
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   213
    private static final int IX_TOP=16;
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   214
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   215
    // definitions for 16-bit bidi/shaping properties word ----------------- ***
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   216
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   217
                          /* CLASS_SHIFT=0, */     /* bidi class: 5 bits (4..0) */
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   218
    private static final int JT_SHIFT=5;           /* joining type: 3 bits (7..5) */
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   219
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   220
    private static final int BPT_SHIFT=8;          /* Bidi_Paired_Bracket_Type(bpt): 2 bits (9..8) */
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   221
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   222
    private static final int MIRROR_DELTA_SHIFT=13;        /* bidi mirroring delta: 3 bits (15..13) */
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   223
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   224
    private static final int CLASS_MASK=    0x0000001f;
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   225
    private static final int JT_MASK=       0x000000e0;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   226
    private static final int BPT_MASK=      0x00000300;
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   227
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   228
    private static final int getClassFromProps(int props) {
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   229
        return props&CLASS_MASK;
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   230
    }
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   231
    private static final boolean getFlagFromProps(int props, int shift) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   232
        return ((props>>shift)&1)!=0;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   233
    }
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   234
    private static final int getMirrorDeltaFromProps(int props) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   235
        return (short)props>>MIRROR_DELTA_SHIFT;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   236
    }
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   237
31680
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   238
    private static final int ESC_MIRROR_DELTA=-4;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   239
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   240
    // definitions for 32-bit mirror table entry --------------------------- ***
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   241
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   242
    /* the source Unicode code point takes 21 bits (20..0) */
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   243
    private static final int MIRROR_INDEX_SHIFT=21;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   244
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   245
    private static final int getMirrorCodePoint(int m) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   246
        return m&0x1fffff;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   247
    }
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   248
    private static final int getMirrorIndex(int m) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   249
        return m>>>MIRROR_INDEX_SHIFT;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   250
    }
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   251
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   252
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   253
    /*
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   254
     * public singleton instance
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   255
     */
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   256
    public static final UBiDiProps INSTANCE;
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   257
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   258
    // This static initializer block must be placed after
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   259
    // other static member initialization
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   260
    static {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   261
        try {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   262
            INSTANCE = new UBiDiProps();
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   263
        } catch (IOException e) {
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   264
            throw new MissingResourceException(e.getMessage(),DATA_FILE_NAME,"");
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   265
        }
88c53c2293b4 8032446: Support Unicode 7.0.0 in JDK 9
peytoia
parents: 25859
diff changeset
   266
    }
2497
903fd9d785ef 6404304: RFE: Unicode 5.1 support
peytoia
parents:
diff changeset
   267
}