UCharacterPropertyReader.java
3.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
* Decompiled with CFR 0_118.
*/
package com.adobe.agl.impl;
import com.adobe.agl.impl.CharTrie;
import com.adobe.agl.impl.ICUBinary;
import com.adobe.agl.impl.UCharacterProperty;
import com.adobe.agl.util.VersionInfo;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
final class UCharacterPropertyReader
implements ICUBinary.Authenticate {
private DataInputStream m_dataInputStream_;
private int m_propertyOffset_;
private int m_exceptionOffset_;
private int m_caseOffset_;
private int m_additionalOffset_;
private int m_additionalVectorsOffset_;
private int m_additionalColumnsCount_;
private int m_reservedOffset_;
private byte[] m_unicodeVersion_;
private static final byte[] DATA_FORMAT_ID_ = new byte[]{85, 80, 114, 111};
private static final byte[] DATA_FORMAT_VERSION_ = new byte[]{5, 0, 5, 2};
public boolean isDataVersionAcceptable(byte[] version) {
return version[0] == DATA_FORMAT_VERSION_[0] && version[2] == DATA_FORMAT_VERSION_[2] && version[3] == DATA_FORMAT_VERSION_[3];
}
protected UCharacterPropertyReader(InputStream inputStream) throws IOException {
this.m_unicodeVersion_ = ICUBinary.readHeader(inputStream, DATA_FORMAT_ID_, this);
this.m_dataInputStream_ = new DataInputStream(inputStream);
}
protected void read(UCharacterProperty ucharppty) throws IOException {
int count = 16;
this.m_propertyOffset_ = this.m_dataInputStream_.readInt();
--count;
this.m_exceptionOffset_ = this.m_dataInputStream_.readInt();
--count;
this.m_caseOffset_ = this.m_dataInputStream_.readInt();
--count;
this.m_additionalOffset_ = this.m_dataInputStream_.readInt();
--count;
this.m_additionalVectorsOffset_ = this.m_dataInputStream_.readInt();
--count;
this.m_additionalColumnsCount_ = this.m_dataInputStream_.readInt();
--count;
this.m_reservedOffset_ = this.m_dataInputStream_.readInt();
--count;
this.m_dataInputStream_.skipBytes(12);
count -= 3;
ucharppty.m_maxBlockScriptValue_ = this.m_dataInputStream_.readInt();
--count;
ucharppty.m_maxJTGValue_ = this.m_dataInputStream_.readInt();
this.m_dataInputStream_.skipBytes(--count << 2);
ucharppty.m_trie_ = new CharTrie(this.m_dataInputStream_, null);
int size = this.m_exceptionOffset_ - this.m_propertyOffset_;
this.m_dataInputStream_.skipBytes(size * 4);
size = this.m_caseOffset_ - this.m_exceptionOffset_;
this.m_dataInputStream_.skipBytes(size * 4);
size = this.m_additionalOffset_ - this.m_caseOffset_ << 1;
this.m_dataInputStream_.skipBytes(size * 2);
if (this.m_additionalColumnsCount_ > 0) {
ucharppty.m_additionalTrie_ = new CharTrie(this.m_dataInputStream_, null);
size = this.m_reservedOffset_ - this.m_additionalVectorsOffset_;
ucharppty.m_additionalVectors_ = new int[size];
for (int i = 0; i < size; ++i) {
ucharppty.m_additionalVectors_[i] = this.m_dataInputStream_.readInt();
}
}
this.m_dataInputStream_.close();
ucharppty.m_additionalColumnsCount_ = this.m_additionalColumnsCount_;
ucharppty.m_unicodeVersion_ = VersionInfo.getInstance(this.m_unicodeVersion_[0], this.m_unicodeVersion_[1], this.m_unicodeVersion_[2], this.m_unicodeVersion_[3]);
}
}