Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/sun/text/normalizer/UBiDiProps.java
38830 views
1
/*
2
* Copyright (c) 2005, 2009, 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
*******************************************************************************
27
* (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
28
* *
29
* The original version of this source code and documentation is copyrighted *
30
* and owned by IBM, These materials are provided under terms of a License *
31
* Agreement between IBM and Sun. This technology is protected by multiple *
32
* US and International patents. This notice and attribution to IBM may not *
33
* to removed. *
34
*******************************************************************************
35
* file name: UBiDiProps.java
36
* encoding: US-ASCII
37
* tab size: 8 (not used)
38
* indentation:4
39
*
40
* created on: 2005jan16
41
* created by: Markus W. Scherer
42
*
43
* Low-level Unicode bidi/shaping properties access.
44
* Java port of ubidi_props.h/.c.
45
*/
46
47
package sun.text.normalizer;
48
49
import java.io.BufferedInputStream;
50
import java.io.DataInputStream;
51
import java.io.InputStream;
52
import java.io.IOException;
53
54
public final class UBiDiProps {
55
// constructors etc. --------------------------------------------------- ***
56
57
// port of ubidi_openProps()
58
public UBiDiProps() throws IOException{
59
InputStream is=ICUData.getStream(DATA_FILE_NAME);
60
BufferedInputStream b=new BufferedInputStream(is, 4096 /* data buffer size */);
61
readData(b);
62
b.close();
63
is.close();
64
65
}
66
67
private void readData(InputStream is) throws IOException {
68
DataInputStream inputStream=new DataInputStream(is);
69
70
// read the header
71
ICUBinary.readHeader(inputStream, FMT, new IsAcceptable());
72
73
// read indexes[]
74
int i, count;
75
count=inputStream.readInt();
76
if(count<IX_INDEX_TOP) {
77
throw new IOException("indexes[0] too small in "+DATA_FILE_NAME);
78
}
79
indexes=new int[count];
80
81
indexes[0]=count;
82
for(i=1; i<count; ++i) {
83
indexes[i]=inputStream.readInt();
84
}
85
86
// read the trie
87
trie=new CharTrie(inputStream, null);
88
89
// read mirrors[]
90
count=indexes[IX_MIRROR_LENGTH];
91
if(count>0) {
92
mirrors=new int[count];
93
for(i=0; i<count; ++i) {
94
mirrors[i]=inputStream.readInt();
95
}
96
}
97
98
// read jgArray[]
99
count=indexes[IX_JG_LIMIT]-indexes[IX_JG_START];
100
jgArray=new byte[count];
101
for(i=0; i<count; ++i) {
102
jgArray[i]=inputStream.readByte();
103
}
104
}
105
106
// implement ICUBinary.Authenticate
107
private final class IsAcceptable implements ICUBinary.Authenticate {
108
public boolean isDataVersionAcceptable(byte version[]) {
109
return version[0]==1 &&
110
version[2]==Trie.INDEX_STAGE_1_SHIFT_ && version[3]==Trie.INDEX_STAGE_2_SHIFT_;
111
}
112
}
113
114
// UBiDiProps singleton
115
private static UBiDiProps gBdp=null;
116
117
// port of ubidi_getSingleton()
118
public static final synchronized UBiDiProps getSingleton() throws IOException {
119
if(gBdp==null) {
120
gBdp=new UBiDiProps();
121
}
122
return gBdp;
123
}
124
125
// UBiDiProps dummy singleton
126
private static UBiDiProps gBdpDummy=null;
127
128
private UBiDiProps(boolean makeDummy) { // ignore makeDummy, only creates a unique signature
129
indexes=new int[IX_TOP];
130
indexes[0]=IX_TOP;
131
trie=new CharTrie(0, 0, null); // dummy trie, always returns 0
132
}
133
134
/**
135
* Get a singleton dummy object, one that works with no real data.
136
* This can be used when the real data is not available.
137
* Using the dummy can reduce checks for available data after an initial failure.
138
* Port of ucase_getDummy().
139
*/
140
public static final synchronized UBiDiProps getDummy() {
141
if(gBdpDummy==null) {
142
gBdpDummy=new UBiDiProps(true);
143
}
144
return gBdpDummy;
145
}
146
147
public final int getClass(int c) {
148
return getClassFromProps(trie.getCodePointValue(c));
149
}
150
151
// data members -------------------------------------------------------- ***
152
private int indexes[];
153
private int mirrors[];
154
private byte jgArray[];
155
156
private CharTrie trie;
157
158
// data format constants ----------------------------------------------- ***
159
private static final String DATA_FILE_NAME = "/sun/text/resources/ubidi.icu";
160
161
/* format "BiDi" */
162
private static final byte FMT[]={ 0x42, 0x69, 0x44, 0x69 };
163
164
/* indexes into indexes[] */
165
private static final int IX_INDEX_TOP=0;
166
private static final int IX_MIRROR_LENGTH=3;
167
168
private static final int IX_JG_START=4;
169
private static final int IX_JG_LIMIT=5;
170
171
private static final int IX_TOP=16;
172
173
private static final int CLASS_MASK= 0x0000001f;
174
175
private static final int getClassFromProps(int props) {
176
return props&CLASS_MASK;
177
}
178
179
}
180
181