home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / java / text / CollationElementIterator.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  4.0 KB  |  295 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 Normalizer text = null;
  9.    private int[] buffer = null;
  10.    private int expIndex = 0;
  11.    private StringBuffer key = new StringBuffer(5);
  12.    private int swapOrder = 0;
  13.    private RBCollationTables ordering;
  14.    private RuleBasedCollator owner;
  15.  
  16.    CollationElementIterator(String var1, RuleBasedCollator var2) {
  17.       this.owner = var2;
  18.       this.ordering = var2.getTables();
  19.       if (var1.length() != 0) {
  20.          this.text = new Normalizer(var1, ((Collator)var2).getDecomposition());
  21.       }
  22.  
  23.    }
  24.  
  25.    CollationElementIterator(CharacterIterator var1, RuleBasedCollator var2) {
  26.       this.owner = var2;
  27.       this.ordering = var2.getTables();
  28.       this.text = new Normalizer(var1, ((Collator)var2).getDecomposition());
  29.    }
  30.  
  31.    public void reset() {
  32.       if (this.text != null) {
  33.          this.text.reset();
  34.          this.text.setDecomposition(this.owner.getDecomposition());
  35.       }
  36.  
  37.       this.buffer = null;
  38.       this.expIndex = 0;
  39.       this.swapOrder = 0;
  40.    }
  41.  
  42.    public int next() {
  43.       if (this.text == null) {
  44.          return -1;
  45.       } else {
  46.          if (this.text.getDecomposition() != this.owner.getDecomposition()) {
  47.             this.text.setDecomposition(this.owner.getDecomposition());
  48.          }
  49.  
  50.          if (this.buffer != null) {
  51.             if (this.expIndex < this.buffer.length) {
  52.                return this.strengthOrder(this.buffer[this.expIndex++]);
  53.             }
  54.  
  55.             this.buffer = null;
  56.             this.expIndex = 0;
  57.          } else if (this.swapOrder != 0) {
  58.             int var3 = this.swapOrder << 16;
  59.             this.swapOrder = 0;
  60.             return var3;
  61.          }
  62.  
  63.          char var1 = this.text.next();
  64.          if (var1 == '\uffff') {
  65.             return -1;
  66.          } else {
  67.             int var2 = this.ordering.getUnicodeOrder(var1);
  68.             if (var2 == -1) {
  69.                this.swapOrder = var1;
  70.                return 2147418112;
  71.             } else {
  72.                if (var2 >= 2130706432) {
  73.                   var2 = this.nextContractChar(var1);
  74.                }
  75.  
  76.                if (var2 >= 2113929216) {
  77.                   this.buffer = this.ordering.getExpandValueList(var2);
  78.                   this.expIndex = 0;
  79.                   var2 = this.buffer[this.expIndex++];
  80.                }
  81.  
  82.                return this.strengthOrder(var2);
  83.             }
  84.          }
  85.       }
  86.    }
  87.  
  88.    public int previous() {
  89.       if (this.text == null) {
  90.          return -1;
  91.       } else {
  92.          if (this.text.getDecomposition() != this.owner.getDecomposition()) {
  93.             this.text.setDecomposition(this.owner.getDecomposition());
  94.          }
  95.  
  96.          if (this.buffer != null) {
  97.             if (this.expIndex > 0) {
  98.                return this.strengthOrder(this.buffer[--this.expIndex]);
  99.             }
  100.  
  101.             this.buffer = null;
  102.             this.expIndex = 0;
  103.          } else if (this.swapOrder != 0) {
  104.             int var3 = this.swapOrder << 16;
  105.             this.swapOrder = 0;
  106.             return var3;
  107.          }
  108.  
  109.          char var1 = this.text.previous();
  110.          if (var1 == '\uffff') {
  111.             return -1;
  112.          } else {
  113.             int var2 = this.ordering.getUnicodeOrder(var1);
  114.             if (var2 == -1) {
  115.                this.swapOrder = 2147418112;
  116.                return var1;
  117.             } else {
  118.                if (var2 >= 2130706432) {
  119.                   var2 = this.prevContractChar(var1);
  120.                }
  121.  
  122.                if (var2 >= 2113929216) {
  123.                   this.buffer = this.ordering.getExpandValueList(var2);
  124.                   this.expIndex = this.buffer.length;
  125.                   var2 = this.buffer[--this.expIndex];
  126.                }
  127.  
  128.                return this.strengthOrder(var2);
  129.             }
  130.          }
  131.       }
  132.    }
  133.  
  134.    public static final int primaryOrder(int var0) {
  135.       var0 &= -65536;
  136.       return var0 >>> 16;
  137.    }
  138.  
  139.    public static final short secondaryOrder(int var0) {
  140.       var0 &= 65280;
  141.       return (short)(var0 >> 8);
  142.    }
  143.  
  144.    public static final short tertiaryOrder(int var0) {
  145.       int var1;
  146.       return (short)(var1 = var0 & 255);
  147.    }
  148.  
  149.    final int strengthOrder(int var1) {
  150.       int var2 = this.owner.getStrength();
  151.       if (var2 == 0) {
  152.          var1 &= -65536;
  153.       } else if (var2 == 1) {
  154.          var1 &= -256;
  155.       }
  156.  
  157.       return var1;
  158.    }
  159.  
  160.    public void setOffset(int var1) {
  161.       if (this.text != null) {
  162.          if (var1 >= this.text.getText().getBeginIndex() && var1 < this.text.getText().getEndIndex()) {
  163.             this.text.setOffset(var1 + 1);
  164.             char var2 = this.text.previous();
  165.             if (this.ordering.usedInContractSeq(var2)) {
  166.                while(this.ordering.usedInContractSeq(var2)) {
  167.                   var2 = this.text.previous();
  168.                }
  169.  
  170.                int var3 = this.text.getOffset();
  171.  
  172.                while(this.text.getOffset() <= var1) {
  173.                   var3 = this.text.getOffset();
  174.                   this.next();
  175.                }
  176.  
  177.                this.text.setOffset(var3);
  178.             }
  179.          } else {
  180.             this.text.setOffset(var1);
  181.          }
  182.       }
  183.  
  184.       this.buffer = null;
  185.       this.expIndex = 0;
  186.       this.swapOrder = 0;
  187.    }
  188.  
  189.    public int getOffset() {
  190.       return this.text != null ? this.text.getOffset() : 0;
  191.    }
  192.  
  193.    public int getMaxExpansion(int var1) {
  194.       return this.ordering.getMaxExpansion(var1);
  195.    }
  196.  
  197.    public void setText(String var1) {
  198.       this.buffer = null;
  199.       this.swapOrder = 0;
  200.       this.expIndex = 0;
  201.       if (this.text == null) {
  202.          this.text = new Normalizer(var1, this.owner.getDecomposition());
  203.       } else {
  204.          this.text.setDecomposition(this.owner.getDecomposition());
  205.          this.text.setText(var1);
  206.       }
  207.  
  208.    }
  209.  
  210.    public void setText(CharacterIterator var1) {
  211.       this.buffer = null;
  212.       this.swapOrder = 0;
  213.       this.expIndex = 0;
  214.       if (this.text == null) {
  215.          this.text = new Normalizer(var1, this.owner.getDecomposition());
  216.       } else {
  217.          this.text.setDecomposition(this.owner.getDecomposition());
  218.          this.text.setText(var1);
  219.       }
  220.  
  221.    }
  222.  
  223.    static final boolean isIgnorable(int var0) {
  224.       return primaryOrder(var0) == 0;
  225.    }
  226.  
  227.    private int nextContractChar(char var1) {
  228.       Vector var2 = this.ordering.getContractValues(var1);
  229.       EntryPair var3 = (EntryPair)var2.firstElement();
  230.       int var4 = var3.value;
  231.       var3 = (EntryPair)var2.lastElement();
  232.       int var5 = var3.entryName.length();
  233.       Normalizer var6 = (Normalizer)this.text.clone();
  234.       var6.previous();
  235.       this.key.setLength(0);
  236.  
  237.       for(char var7 = var6.next(); var5 > 0 && var7 != '\uffff'; var7 = var6.next()) {
  238.          this.key.append(var7);
  239.          --var5;
  240.       }
  241.  
  242.       String var8 = this.key.toString();
  243.       var5 = 1;
  244.  
  245.       for(int var9 = var2.size() - 1; var9 > 0; --var9) {
  246.          var3 = (EntryPair)var2.elementAt(var9);
  247.          if (var3.fwd && var8.startsWith(var3.entryName) && var3.entryName.length() > var5) {
  248.             var5 = var3.entryName.length();
  249.             var4 = var3.value;
  250.          }
  251.       }
  252.  
  253.       while(var5 > 1) {
  254.          this.text.next();
  255.          --var5;
  256.       }
  257.  
  258.       return var4;
  259.    }
  260.  
  261.    private int prevContractChar(char var1) {
  262.       Vector var2 = this.ordering.getContractValues(var1);
  263.       EntryPair var3 = (EntryPair)var2.firstElement();
  264.       int var4 = var3.value;
  265.       var3 = (EntryPair)var2.lastElement();
  266.       int var5 = var3.entryName.length();
  267.       Normalizer var6 = (Normalizer)this.text.clone();
  268.       var6.next();
  269.       this.key.setLength(0);
  270.  
  271.       for(char var7 = var6.previous(); var5 > 0 && var7 != '\uffff'; var7 = var6.previous()) {
  272.          this.key.append(var7);
  273.          --var5;
  274.       }
  275.  
  276.       String var8 = this.key.toString();
  277.       var5 = 1;
  278.  
  279.       for(int var9 = var2.size() - 1; var9 > 0; --var9) {
  280.          var3 = (EntryPair)var2.elementAt(var9);
  281.          if (!var3.fwd && var8.startsWith(var3.entryName) && var3.entryName.length() > var5) {
  282.             var5 = var3.entryName.length();
  283.             var4 = var3.value;
  284.          }
  285.       }
  286.  
  287.       while(var5 > 1) {
  288.          this.text.previous();
  289.          --var5;
  290.       }
  291.  
  292.       return var4;
  293.    }
  294. }
  295.