home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / text / BreakDictionary.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  2.7 KB  |  161 lines

  1. package java.text;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.IOException;
  5. import java.security.AccessController;
  6. import java.security.PrivilegedActionException;
  7. import java.util.MissingResourceException;
  8. import sun.text.CompactByteArray;
  9. import sun.text.SupplementaryCharacterData;
  10.  
  11. class BreakDictionary {
  12.    private static int supportedVersion = 1;
  13.    private CompactByteArray columnMap = null;
  14.    private SupplementaryCharacterData supplementaryCharColumnMap = null;
  15.    private int numCols;
  16.    private int numColGroups;
  17.    private short[] table = null;
  18.    private short[] rowIndex = null;
  19.    private int[] rowIndexFlags = null;
  20.    private short[] rowIndexFlagsIndex = null;
  21.    private byte[] rowIndexShifts = null;
  22.  
  23.    public BreakDictionary(String var1) throws IOException, MissingResourceException {
  24.       this.readDictionaryFile(var1);
  25.    }
  26.  
  27.    private void readDictionaryFile(String var1) throws IOException, MissingResourceException {
  28.       BufferedInputStream var2;
  29.       try {
  30.          var2 = (BufferedInputStream)AccessController.doPrivileged(new 1(this, var1));
  31.       } catch (PrivilegedActionException var12) {
  32.          throw new InternalError(var12.toString());
  33.       }
  34.  
  35.       byte[] var3 = new byte[8];
  36.       if (var2.read(var3) != 8) {
  37.          throw new MissingResourceException("Wrong data length", var1, "");
  38.       } else {
  39.          int var4 = BreakIterator.getInt(var3, 0);
  40.          if (var4 != supportedVersion) {
  41.             throw new MissingResourceException("Dictionary version(" + var4 + ") is unsupported", var1, "");
  42.          } else {
  43.             int var5 = BreakIterator.getInt(var3, 4);
  44.             var3 = new byte[var5];
  45.             if (var2.read(var3) != var5) {
  46.                throw new MissingResourceException("Wrong data length", var1, "");
  47.             } else {
  48.                var2.close();
  49.                int var7 = 0;
  50.                int var6 = BreakIterator.getInt(var3, var7);
  51.                var7 += 4;
  52.                short[] var8 = new short[var6];
  53.  
  54.                for(int var9 = 0; var9 < var6; var7 += 2) {
  55.                   var8[var9] = BreakIterator.getShort(var3, var7);
  56.                   ++var9;
  57.                }
  58.  
  59.                var6 = BreakIterator.getInt(var3, var7);
  60.                var7 += 4;
  61.                byte[] var31 = new byte[var6];
  62.  
  63.                for(int var10 = 0; var10 < var6; ++var7) {
  64.                   var31[var10] = var3[var7];
  65.                   ++var10;
  66.                }
  67.  
  68.                this.columnMap = new CompactByteArray(var8, var31);
  69.                this.numCols = BreakIterator.getInt(var3, var7);
  70.                var7 += 4;
  71.                this.numColGroups = BreakIterator.getInt(var3, var7);
  72.                var7 += 4;
  73.                var6 = BreakIterator.getInt(var3, var7);
  74.                var7 += 4;
  75.                this.rowIndex = new short[var6];
  76.  
  77.                for(int var32 = 0; var32 < var6; var7 += 2) {
  78.                   this.rowIndex[var32] = BreakIterator.getShort(var3, var7);
  79.                   ++var32;
  80.                }
  81.  
  82.                var6 = BreakIterator.getInt(var3, var7);
  83.                var7 += 4;
  84.                this.rowIndexFlagsIndex = new short[var6];
  85.  
  86.                for(int var33 = 0; var33 < var6; var7 += 2) {
  87.                   this.rowIndexFlagsIndex[var33] = BreakIterator.getShort(var3, var7);
  88.                   ++var33;
  89.                }
  90.  
  91.                var6 = BreakIterator.getInt(var3, var7);
  92.                var7 += 4;
  93.                this.rowIndexFlags = new int[var6];
  94.  
  95.                for(int var34 = 0; var34 < var6; var7 += 4) {
  96.                   this.rowIndexFlags[var34] = BreakIterator.getInt(var3, var7);
  97.                   ++var34;
  98.                }
  99.  
  100.                var6 = BreakIterator.getInt(var3, var7);
  101.                var7 += 4;
  102.                this.rowIndexShifts = new byte[var6];
  103.  
  104.                for(int var35 = 0; var35 < var6; ++var7) {
  105.                   this.rowIndexShifts[var35] = var3[var7];
  106.                   ++var35;
  107.                }
  108.  
  109.                var6 = BreakIterator.getInt(var3, var7);
  110.                var7 += 4;
  111.                this.table = new short[var6];
  112.  
  113.                for(int var36 = 0; var36 < var6; var7 += 2) {
  114.                   this.table[var36] = BreakIterator.getShort(var3, var7);
  115.                   ++var36;
  116.                }
  117.  
  118.                var6 = BreakIterator.getInt(var3, var7);
  119.                var7 += 4;
  120.                int[] var37 = new int[var6];
  121.  
  122.                for(int var11 = 0; var11 < var6; var7 += 4) {
  123.                   var37[var11] = BreakIterator.getInt(var3, var7);
  124.                   ++var11;
  125.                }
  126.  
  127.                this.supplementaryCharColumnMap = new SupplementaryCharacterData(var37);
  128.             }
  129.          }
  130.       }
  131.    }
  132.  
  133.    public final short getNextStateFromCharacter(int var1, int var2) {
  134.       int var3;
  135.       if (var2 < 65536) {
  136.          var3 = this.columnMap.elementAt((char)var2);
  137.       } else {
  138.          var3 = this.supplementaryCharColumnMap.getValue(var2);
  139.       }
  140.  
  141.       return this.getNextState(var1, var3);
  142.    }
  143.  
  144.    public final short getNextState(int var1, int var2) {
  145.       return this.cellIsPopulated(var1, var2) ? this.internalAt(this.rowIndex[var1], var2 + this.rowIndexShifts[var1]) : 0;
  146.    }
  147.  
  148.    private final boolean cellIsPopulated(int var1, int var2) {
  149.       if (this.rowIndexFlagsIndex[var1] < 0) {
  150.          return var2 == -this.rowIndexFlagsIndex[var1];
  151.       } else {
  152.          int var3 = this.rowIndexFlags[this.rowIndexFlagsIndex[var1] + (var2 >> 5)];
  153.          return (var3 & 1 << (var2 & 31)) != 0;
  154.       }
  155.    }
  156.  
  157.    private final short internalAt(int var1, int var2) {
  158.       return this.table[var1 * this.numCols + var2];
  159.    }
  160. }
  161.