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
47package sun.text.normalizer;
48
49import java.io.BufferedInputStream;
50import java.io.DataInputStream;
51import java.io.InputStream;
52import java.io.IOException;
53
54public 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}