home *** CD-ROM | disk | FTP | other *** search
- package java.text;
-
- import java.io.BufferedInputStream;
- import java.io.IOException;
- import java.security.AccessController;
- import java.security.PrivilegedActionException;
- import java.util.MissingResourceException;
- import sun.text.CompactByteArray;
- import sun.text.SupplementaryCharacterData;
-
- class BreakDictionary {
- private static int supportedVersion = 1;
- private CompactByteArray columnMap = null;
- private SupplementaryCharacterData supplementaryCharColumnMap = null;
- private int numCols;
- private int numColGroups;
- private short[] table = null;
- private short[] rowIndex = null;
- private int[] rowIndexFlags = null;
- private short[] rowIndexFlagsIndex = null;
- private byte[] rowIndexShifts = null;
-
- public BreakDictionary(String var1) throws IOException, MissingResourceException {
- this.readDictionaryFile(var1);
- }
-
- private void readDictionaryFile(String var1) throws IOException, MissingResourceException {
- BufferedInputStream var2;
- try {
- var2 = (BufferedInputStream)AccessController.doPrivileged(new 1(this, var1));
- } catch (PrivilegedActionException var12) {
- throw new InternalError(var12.toString());
- }
-
- byte[] var3 = new byte[8];
- if (var2.read(var3) != 8) {
- throw new MissingResourceException("Wrong data length", var1, "");
- } else {
- int var4 = BreakIterator.getInt(var3, 0);
- if (var4 != supportedVersion) {
- throw new MissingResourceException("Dictionary version(" + var4 + ") is unsupported", var1, "");
- } else {
- int var5 = BreakIterator.getInt(var3, 4);
- var3 = new byte[var5];
- if (var2.read(var3) != var5) {
- throw new MissingResourceException("Wrong data length", var1, "");
- } else {
- var2.close();
- int var7 = 0;
- int var6 = BreakIterator.getInt(var3, var7);
- var7 += 4;
- short[] var8 = new short[var6];
-
- for(int var9 = 0; var9 < var6; var7 += 2) {
- var8[var9] = BreakIterator.getShort(var3, var7);
- ++var9;
- }
-
- var6 = BreakIterator.getInt(var3, var7);
- var7 += 4;
- byte[] var31 = new byte[var6];
-
- for(int var10 = 0; var10 < var6; ++var7) {
- var31[var10] = var3[var7];
- ++var10;
- }
-
- this.columnMap = new CompactByteArray(var8, var31);
- this.numCols = BreakIterator.getInt(var3, var7);
- var7 += 4;
- this.numColGroups = BreakIterator.getInt(var3, var7);
- var7 += 4;
- var6 = BreakIterator.getInt(var3, var7);
- var7 += 4;
- this.rowIndex = new short[var6];
-
- for(int var32 = 0; var32 < var6; var7 += 2) {
- this.rowIndex[var32] = BreakIterator.getShort(var3, var7);
- ++var32;
- }
-
- var6 = BreakIterator.getInt(var3, var7);
- var7 += 4;
- this.rowIndexFlagsIndex = new short[var6];
-
- for(int var33 = 0; var33 < var6; var7 += 2) {
- this.rowIndexFlagsIndex[var33] = BreakIterator.getShort(var3, var7);
- ++var33;
- }
-
- var6 = BreakIterator.getInt(var3, var7);
- var7 += 4;
- this.rowIndexFlags = new int[var6];
-
- for(int var34 = 0; var34 < var6; var7 += 4) {
- this.rowIndexFlags[var34] = BreakIterator.getInt(var3, var7);
- ++var34;
- }
-
- var6 = BreakIterator.getInt(var3, var7);
- var7 += 4;
- this.rowIndexShifts = new byte[var6];
-
- for(int var35 = 0; var35 < var6; ++var7) {
- this.rowIndexShifts[var35] = var3[var7];
- ++var35;
- }
-
- var6 = BreakIterator.getInt(var3, var7);
- var7 += 4;
- this.table = new short[var6];
-
- for(int var36 = 0; var36 < var6; var7 += 2) {
- this.table[var36] = BreakIterator.getShort(var3, var7);
- ++var36;
- }
-
- var6 = BreakIterator.getInt(var3, var7);
- var7 += 4;
- int[] var37 = new int[var6];
-
- for(int var11 = 0; var11 < var6; var7 += 4) {
- var37[var11] = BreakIterator.getInt(var3, var7);
- ++var11;
- }
-
- this.supplementaryCharColumnMap = new SupplementaryCharacterData(var37);
- }
- }
- }
- }
-
- public final short getNextStateFromCharacter(int var1, int var2) {
- int var3;
- if (var2 < 65536) {
- var3 = this.columnMap.elementAt((char)var2);
- } else {
- var3 = this.supplementaryCharColumnMap.getValue(var2);
- }
-
- return this.getNextState(var1, var3);
- }
-
- public final short getNextState(int var1, int var2) {
- return this.cellIsPopulated(var1, var2) ? this.internalAt(this.rowIndex[var1], var2 + this.rowIndexShifts[var1]) : 0;
- }
-
- private final boolean cellIsPopulated(int var1, int var2) {
- if (this.rowIndexFlagsIndex[var1] < 0) {
- return var2 == -this.rowIndexFlagsIndex[var1];
- } else {
- int var3 = this.rowIndexFlags[this.rowIndexFlagsIndex[var1] + (var2 >> 5)];
- return (var3 & 1 << (var2 & 31)) != 0;
- }
- }
-
- private final short internalAt(int var1, int var2) {
- return this.table[var1 * this.numCols + var2];
- }
- }
-