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/UCharacterPropertyReader.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/text/normalizer/UCharacterPropertyReader.java+190−0
@@ -0,0 +1,190 @@
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 */
36
37package sun.text.normalizer;
38
39import java.io.DataInputStream;
40import java.io.InputStream;
41import java.io.IOException;
42
43/**
44* <p>Internal reader class for ICU data file uprops.icu containing
45* Unicode codepoint data.</p>
46* <p>This class simply reads uprops.icu, authenticates that it is a valid
47* ICU data file and split its contents up into blocks of data for use in
48* <a href=UCharacterProperty.html>com.ibm.icu.impl.UCharacterProperty</a>.
49* </p>
50* <p>uprops.icu which is in big-endian format is jared together with this
51* package.</p>
52*
53* Unicode character properties file format see
54* (ICU4C)/source/tools/genprops/store.c
55*
56* @author Syn Wee Quek
57* @since release 2.1, February 1st 2002
58*/
59final class UCharacterPropertyReader implements ICUBinary.Authenticate
60{
61 // public methods ----------------------------------------------------
62
63 public boolean isDataVersionAcceptable(byte version[])
64 {
65 return version[0] == DATA_FORMAT_VERSION_[0]
66 && version[2] == DATA_FORMAT_VERSION_[2]
67 && version[3] == DATA_FORMAT_VERSION_[3];
68 }
69
70 // protected constructor ---------------------------------------------
71
72 /**
73 * <p>Protected constructor.</p>
74 * @param inputStream ICU uprop.dat file input stream
75 * @exception IOException throw if data file fails authentication
76 */
77 protected UCharacterPropertyReader(InputStream inputStream)
78 throws IOException
79 {
80 m_unicodeVersion_ = ICUBinary.readHeader(inputStream, DATA_FORMAT_ID_,
81 this);
82 m_dataInputStream_ = new DataInputStream(inputStream);
83 }
84
85 // protected methods -------------------------------------------------
86
87 /**
88 * <p>Reads uprops.icu, parse it into blocks of data to be stored in
89 * UCharacterProperty.</P
90 * @param ucharppty UCharacterProperty instance
91 * @exception IOException thrown when data reading fails
92 */
93 protected void read(UCharacterProperty ucharppty) throws IOException
94 {
95 // read the indexes
96 int count = INDEX_SIZE_;
97 m_propertyOffset_ = m_dataInputStream_.readInt();
98 count --;
99 m_exceptionOffset_ = m_dataInputStream_.readInt();
100 count --;
101 m_caseOffset_ = m_dataInputStream_.readInt();
102 count --;
103 m_additionalOffset_ = m_dataInputStream_.readInt();
104 count --;
105 m_additionalVectorsOffset_ = m_dataInputStream_.readInt();
106 count --;
107 m_additionalColumnsCount_ = m_dataInputStream_.readInt();
108 count --;
109 m_reservedOffset_ = m_dataInputStream_.readInt();
110 count --;
111 m_dataInputStream_.skipBytes(3 << 2);
112 count -= 3;
113 ucharppty.m_maxBlockScriptValue_ = m_dataInputStream_.readInt();
114 count --; // 10
115 ucharppty.m_maxJTGValue_ = m_dataInputStream_.readInt();
116 count --; // 11
117 m_dataInputStream_.skipBytes(count << 2);
118
119 // read the trie index block
120 // m_props_index_ in terms of ints
121 ucharppty.m_trie_ = new CharTrie(m_dataInputStream_, null);
122
123 // skip the 32 bit properties block
124 int size = m_exceptionOffset_ - m_propertyOffset_;
125 m_dataInputStream_.skipBytes(size * 4);
126
127 // reads the 32 bit exceptions block
128 size = m_caseOffset_ - m_exceptionOffset_;
129 m_dataInputStream_.skipBytes(size * 4);
130
131 // reads the 32 bit case block
132 size = (m_additionalOffset_ - m_caseOffset_) << 1;
133 m_dataInputStream_.skipBytes(size * 2);
134
135 if(m_additionalColumnsCount_ > 0) {
136 // reads the additional property block
137 ucharppty.m_additionalTrie_ = new CharTrie(m_dataInputStream_, null);
138
139 // additional properties
140 size = m_reservedOffset_ - m_additionalVectorsOffset_;
141 ucharppty.m_additionalVectors_ = new int[size];
142 for (int i = 0; i < size; i ++) {
143 ucharppty.m_additionalVectors_[i] = m_dataInputStream_.readInt();
144 }
145 }
146
147 m_dataInputStream_.close();
148 ucharppty.m_additionalColumnsCount_ = m_additionalColumnsCount_;
149 ucharppty.m_unicodeVersion_ = VersionInfo.getInstance(
150 (int)m_unicodeVersion_[0], (int)m_unicodeVersion_[1],
151 (int)m_unicodeVersion_[2], (int)m_unicodeVersion_[3]);
152 }
153
154 // private variables -------------------------------------------------
155
156 /**
157 * Index size
158 */
159 private static final int INDEX_SIZE_ = 16;
160
161 /**
162 * ICU data file input stream
163 */
164 private DataInputStream m_dataInputStream_;
165
166 /**
167 * Offset information in the indexes.
168 */
169 private int m_propertyOffset_;
170 private int m_exceptionOffset_;
171 private int m_caseOffset_;
172 private int m_additionalOffset_;
173 private int m_additionalVectorsOffset_;
174 private int m_additionalColumnsCount_;
175 private int m_reservedOffset_;
176 private byte m_unicodeVersion_[];
177
178 /**
179 * Data format "UPro".
180 */
181 private static final byte DATA_FORMAT_ID_[] = {(byte)0x55, (byte)0x50,
182 (byte)0x72, (byte)0x6F};
183 /**
184 * Format version; this code works with all versions with the same major
185 * version number and the same Trie bit distribution.
186 */
187 private static final byte DATA_FORMAT_VERSION_[] = {(byte)0x5, (byte)0,
188 (byte)Trie.INDEX_STAGE_1_SHIFT_,
189 (byte)Trie.INDEX_STAGE_2_SHIFT_};
190}