home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / java / text / CollationElementIterator.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  3.5 KB  |  173 lines

  1. package java.text;
  2.  
  3. import java.util.Vector;
  4.  
  5. public final class CollationElementIterator {
  6.    public static final int NULLORDER = -1;
  7.    static final int UNMAPPEDCHARVALUE = 2147418112;
  8.    private DecompositionIterator text;
  9.    private int[] buffer;
  10.    private int expIndex;
  11.    private StringBuffer key = new StringBuffer(5);
  12.    private int swapOrder;
  13.    private RuleBasedCollator ordering;
  14.  
  15.    CollationElementIterator(String var1, RuleBasedCollator var2) {
  16.       this.ordering = var2;
  17.       if (var1.length() != 0) {
  18.          this.text = new DecompositionIterator(var1, 0, var1.length(), ((Collator)var2).getDecomposition());
  19.       }
  20.  
  21.    }
  22.  
  23.    public void reset() {
  24.       if (this.text != null) {
  25.          this.text.reset();
  26.       }
  27.  
  28.       this.buffer = null;
  29.       this.expIndex = 0;
  30.       this.swapOrder = 0;
  31.       this.text.setDecomposition(this.ordering.getDecomposition());
  32.    }
  33.  
  34.    public int next() {
  35.       if (this.text == null) {
  36.          return -1;
  37.       } else {
  38.          if (this.text.getDecomposition() != this.ordering.getDecomposition()) {
  39.             this.text.setDecomposition(this.ordering.getDecomposition());
  40.          }
  41.  
  42.          if (this.buffer != null) {
  43.             if (this.expIndex < this.buffer.length) {
  44.                return this.strengthOrder(this.buffer[this.expIndex++]);
  45.             }
  46.  
  47.             this.buffer = null;
  48.             this.expIndex = 0;
  49.          } else if (this.swapOrder != 0) {
  50.             int var3 = this.swapOrder << 16;
  51.             this.swapOrder = 0;
  52.             return var3;
  53.          }
  54.  
  55.          char var1 = this.text.next();
  56.          if (var1 == '\uffff') {
  57.             return -1;
  58.          } else {
  59.             int var2 = this.ordering.getUnicodeOrder(var1);
  60.             if (var2 == RuleBasedCollator.UNMAPPED) {
  61.                this.swapOrder = var1;
  62.                return 2147418112;
  63.             } else if (var2 < RuleBasedCollator.CHARINDEX) {
  64.                return this.strengthOrder(var2);
  65.             } else if (var2 >= RuleBasedCollator.CONTRACTCHARINDEX) {
  66.                return this.strengthOrder(this.nextContractChar(var1));
  67.             } else if (var2 >= RuleBasedCollator.EXPANDCHARINDEX) {
  68.                this.buffer = this.ordering.getExpandValueList(var1);
  69.                this.expIndex = 0;
  70.                return this.strengthOrder(this.buffer[this.expIndex++]);
  71.             } else {
  72.                return -1;
  73.             }
  74.          }
  75.       }
  76.    }
  77.  
  78.    public static final int primaryOrder(int var0) {
  79.       var0 &= -65536;
  80.       return var0 >>> RuleBasedCollator.PRIMARYORDERSHIFT;
  81.    }
  82.  
  83.    public static final short secondaryOrder(int var0) {
  84.       var0 &= 65280;
  85.       return (short)(var0 >> RuleBasedCollator.SECONDARYORDERSHIFT);
  86.    }
  87.  
  88.    public static final short tertiaryOrder(int var0) {
  89.       int var1;
  90.       return (short)(var1 = var0 & 255);
  91.    }
  92.  
  93.    static final boolean isIgnorable(int var0) {
  94.       return primaryOrder(var0) == 0;
  95.    }
  96.  
  97.    final int strengthOrder(int var1) {
  98.       int var2 = this.ordering.getStrength();
  99.       if (var2 == 0) {
  100.          var1 &= -65536;
  101.       } else if (var2 == 1) {
  102.          var1 &= -256;
  103.       }
  104.  
  105.       return var1;
  106.    }
  107.  
  108.    final void setOffset(int var1) {
  109.       if (this.text != null) {
  110.          this.text.setOffset(var1);
  111.       }
  112.  
  113.    }
  114.  
  115.    final int getOffset() {
  116.       return this.text != null ? this.text.getOffset() : 0;
  117.    }
  118.  
  119.    void setText(String var1) {
  120.       this.buffer = null;
  121.       this.swapOrder = 0;
  122.       if (this.text == null) {
  123.          this.text = new DecompositionIterator(var1, this.ordering.getDecomposition());
  124.       } else {
  125.          this.text.setDecomposition(this.ordering.getDecomposition());
  126.          this.text.setText(var1);
  127.       }
  128.    }
  129.  
  130.    private int getEntry(Vector var1, String var2) {
  131.       for(int var3 = 0; var3 < var1.size(); ++var3) {
  132.          EntryPair var4 = (EntryPair)var1.elementAt(var3);
  133.          if (var4.entryName.equals(var2)) {
  134.             return var3;
  135.          }
  136.       }
  137.  
  138.       return RuleBasedCollator.UNMAPPED;
  139.    }
  140.  
  141.    private int nextContractChar(char var1) {
  142.       Object var2 = null;
  143.       Vector var3 = this.ordering.getContractValues(var1);
  144.       int var4 = 0;
  145.       this.key.setLength(0);
  146.       this.key.append(var1);
  147.       int var5 = 0;
  148.       if ((var5 = this.getEntry(var3, this.key.toString())) != RuleBasedCollator.UNMAPPED) {
  149.          EntryPair var8 = (EntryPair)var3.elementAt(var5);
  150.          var4 = var8.value;
  151.       }
  152.  
  153.       while((var1 = this.text.next()) != '\uffff') {
  154.          this.key.append(var1);
  155.          if ((var5 = this.getEntry(var3, this.key.toString())) == RuleBasedCollator.UNMAPPED) {
  156.             var1 = this.text.previous();
  157.             break;
  158.          }
  159.  
  160.          EntryPair var9 = (EntryPair)var3.elementAt(var5);
  161.          var4 = var9.value;
  162.       }
  163.  
  164.       if (var4 - RuleBasedCollator.EXPANDCHARINDEX >= 0) {
  165.          this.buffer = this.ordering.getExpandValueList(var4 - RuleBasedCollator.EXPANDCHARINDEX);
  166.          this.expIndex = 0;
  167.          var4 = this.buffer[this.expIndex++];
  168.       }
  169.  
  170.       return var4;
  171.    }
  172. }
  173.