History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/text/normalizer/UBiDiProps.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/text/normalizer/UBiDiProps.java+179−0
@@ -0,0 +1,179 @@
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+}