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 / RuleBasedCollator.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  4.3 KB  |  295 lines

  1. package java.text;
  2.  
  3. public class RuleBasedCollator extends Collator {
  4.    static final int CHARINDEX = 1879048192;
  5.    static final int EXPANDCHARINDEX = 2113929216;
  6.    static final int CONTRACTCHARINDEX = 2130706432;
  7.    static final int UNMAPPED = -1;
  8.    private static final int COLLATIONKEYOFFSET = 1;
  9.    private RBCollationTables tables;
  10.    private StringBuffer primResult;
  11.    private StringBuffer secResult;
  12.    private StringBuffer terResult;
  13.    private CollationElementIterator sourceCursor;
  14.    private CollationElementIterator targetCursor;
  15.    // $FF: synthetic field
  16.    static Class class$java$text$RuleBasedCollator;
  17.  
  18.    public RuleBasedCollator(String var1) throws ParseException {
  19.       this(var1, 1);
  20.    }
  21.  
  22.    RuleBasedCollator(String var1, int var2) throws ParseException {
  23.       this.tables = null;
  24.       this.primResult = null;
  25.       this.secResult = null;
  26.       this.terResult = null;
  27.       this.sourceCursor = null;
  28.       this.targetCursor = null;
  29.       ((Collator)this).setStrength(2);
  30.       ((Collator)this).setDecomposition(var2);
  31.       this.tables = new RBCollationTables(var1, var2);
  32.    }
  33.  
  34.    private RuleBasedCollator(RuleBasedCollator var1) {
  35.       this.tables = null;
  36.       this.primResult = null;
  37.       this.secResult = null;
  38.       this.terResult = null;
  39.       this.sourceCursor = null;
  40.       this.targetCursor = null;
  41.       ((Collator)this).setStrength(((Collator)var1).getStrength());
  42.       ((Collator)this).setDecomposition(((Collator)var1).getDecomposition());
  43.       this.tables = var1.tables;
  44.    }
  45.  
  46.    public String getRules() {
  47.       return this.tables.getRules();
  48.    }
  49.  
  50.    public CollationElementIterator getCollationElementIterator(String var1) {
  51.       return new CollationElementIterator(var1, this);
  52.    }
  53.  
  54.    public CollationElementIterator getCollationElementIterator(CharacterIterator var1) {
  55.       return new CollationElementIterator(var1, this);
  56.    }
  57.  
  58.    public synchronized int compare(String var1, String var2) {
  59.       int var3 = 0;
  60.       if (this.sourceCursor == null) {
  61.          this.sourceCursor = this.getCollationElementIterator(var1);
  62.       } else {
  63.          this.sourceCursor.setText(var1);
  64.       }
  65.  
  66.       if (this.targetCursor == null) {
  67.          this.targetCursor = this.getCollationElementIterator(var2);
  68.       } else {
  69.          this.targetCursor.setText(var2);
  70.       }
  71.  
  72.       int var4 = 0;
  73.       int var5 = 0;
  74.       boolean var6 = ((Collator)this).getStrength() >= 1;
  75.       boolean var7 = var6;
  76.       boolean var8 = ((Collator)this).getStrength() >= 2;
  77.       boolean var9 = true;
  78.       boolean var10 = true;
  79.  
  80.       while(true) {
  81.          if (var9) {
  82.             var4 = this.sourceCursor.next();
  83.          } else {
  84.             var9 = true;
  85.          }
  86.  
  87.          if (var10) {
  88.             var5 = this.targetCursor.next();
  89.          } else {
  90.             var10 = true;
  91.          }
  92.  
  93.          if (var4 == -1 || var5 == -1) {
  94.             if (var4 != -1) {
  95.                do {
  96.                   if (CollationElementIterator.primaryOrder(var4) != 0) {
  97.                      return 1;
  98.                   }
  99.  
  100.                   if (CollationElementIterator.secondaryOrder(var4) != 0 && var7) {
  101.                      var3 = 1;
  102.                      var7 = false;
  103.                   }
  104.                } while((var4 = this.sourceCursor.next()) != -1);
  105.             } else if (var5 != -1) {
  106.                do {
  107.                   if (CollationElementIterator.primaryOrder(var5) != 0) {
  108.                      return -1;
  109.                   }
  110.  
  111.                   if (CollationElementIterator.secondaryOrder(var5) != 0 && var7) {
  112.                      var3 = -1;
  113.                      var7 = false;
  114.                   }
  115.                } while((var5 = this.targetCursor.next()) != -1);
  116.             }
  117.  
  118.             if (var3 == 0 && ((Collator)this).getStrength() == 3) {
  119.                var3 = Normalizer.decompose(var1, ((Collator)this).getDecomposition()).compareTo(Normalizer.decompose(var2, ((Collator)this).getDecomposition()));
  120.             }
  121.  
  122.             return var3;
  123.          }
  124.  
  125.          int var11 = CollationElementIterator.primaryOrder(var4);
  126.          int var12 = CollationElementIterator.primaryOrder(var5);
  127.          if (var4 == var5) {
  128.             if (this.tables.isFrenchSec() && var11 != 0 && !var7) {
  129.                var7 = var6;
  130.                var8 = false;
  131.             }
  132.          } else if (var11 != var12) {
  133.             if (var4 == 0) {
  134.                var10 = false;
  135.             } else if (var5 == 0) {
  136.                var9 = false;
  137.             } else if (var11 == 0) {
  138.                if (var7) {
  139.                   var3 = 1;
  140.                   var7 = false;
  141.                }
  142.  
  143.                var10 = false;
  144.             } else {
  145.                if (var12 != 0) {
  146.                   if (var11 < var12) {
  147.                      return -1;
  148.                   }
  149.  
  150.                   return 1;
  151.                }
  152.  
  153.                if (var7) {
  154.                   var3 = -1;
  155.                   var7 = false;
  156.                }
  157.  
  158.                var9 = false;
  159.             }
  160.          } else if (var7) {
  161.             short var13 = CollationElementIterator.secondaryOrder(var4);
  162.             short var14 = CollationElementIterator.secondaryOrder(var5);
  163.             if (var13 != var14) {
  164.                var3 = var13 < var14 ? -1 : 1;
  165.                var7 = false;
  166.             } else if (var8) {
  167.                short var15 = CollationElementIterator.tertiaryOrder(var4);
  168.                short var16 = CollationElementIterator.tertiaryOrder(var5);
  169.                if (var15 != var16) {
  170.                   var3 = var15 < var16 ? -1 : 1;
  171.                   var8 = false;
  172.                }
  173.             }
  174.          }
  175.       }
  176.    }
  177.  
  178.    public synchronized CollationKey getCollationKey(String var1) {
  179.       if (var1 == null) {
  180.          return null;
  181.       } else {
  182.          if (this.primResult == null) {
  183.             this.primResult = new StringBuffer();
  184.             this.secResult = new StringBuffer();
  185.             this.terResult = new StringBuffer();
  186.          } else {
  187.             this.primResult.setLength(0);
  188.             this.secResult.setLength(0);
  189.             this.terResult.setLength(0);
  190.          }
  191.  
  192.          int var2 = 0;
  193.          boolean var3 = ((Collator)this).getStrength() >= 1;
  194.          boolean var4 = ((Collator)this).getStrength() >= 2;
  195.          short var5 = -1;
  196.          short var6 = -1;
  197.          int var7 = 0;
  198.          if (this.sourceCursor == null) {
  199.             this.sourceCursor = this.getCollationElementIterator(var1);
  200.          } else {
  201.             this.sourceCursor.setText(var1);
  202.          }
  203.  
  204.          while((var2 = this.sourceCursor.next()) != -1) {
  205.             var5 = CollationElementIterator.secondaryOrder(var2);
  206.             var6 = CollationElementIterator.tertiaryOrder(var2);
  207.             if (!CollationElementIterator.isIgnorable(var2)) {
  208.                this.primResult.append((char)(CollationElementIterator.primaryOrder(var2) + 1));
  209.                if (var3) {
  210.                   if (this.tables.isFrenchSec() && var7 < this.secResult.length()) {
  211.                      RBCollationTables.reverse(this.secResult, var7, this.secResult.length());
  212.                   }
  213.  
  214.                   this.secResult.append((char)(var5 + 1));
  215.                   var7 = this.secResult.length();
  216.                }
  217.  
  218.                if (var4) {
  219.                   this.terResult.append((char)(var6 + 1));
  220.                }
  221.             } else {
  222.                if (var3 && var5 != 0) {
  223.                   this.secResult.append((char)(var5 + this.tables.getMaxSecOrder() + 1));
  224.                }
  225.  
  226.                if (var4 && var6 != 0) {
  227.                   this.terResult.append((char)(var6 + this.tables.getMaxTerOrder() + 1));
  228.                }
  229.             }
  230.          }
  231.  
  232.          if (this.tables.isFrenchSec()) {
  233.             if (var7 < this.secResult.length()) {
  234.                RBCollationTables.reverse(this.secResult, var7, this.secResult.length());
  235.             }
  236.  
  237.             RBCollationTables.reverse(this.secResult, 0, this.secResult.length());
  238.          }
  239.  
  240.          this.primResult.append('\u0000');
  241.          this.secResult.append('\u0000');
  242.          this.secResult.append(this.terResult.toString());
  243.          this.primResult.append(this.secResult.toString());
  244.          if (((Collator)this).getStrength() == 3) {
  245.             this.primResult.append('\u0000');
  246.             this.primResult.append(Normalizer.decompose(var1, ((Collator)this).getDecomposition()));
  247.          }
  248.  
  249.          return new CollationKey(var1, this.primResult.toString());
  250.       }
  251.    }
  252.  
  253.    public Object clone() {
  254.       if (this.getClass() == (class$java$text$RuleBasedCollator == null ? (class$java$text$RuleBasedCollator = class$("java.text.RuleBasedCollator")) : class$java$text$RuleBasedCollator)) {
  255.          return new RuleBasedCollator(this);
  256.       } else {
  257.          RuleBasedCollator var1 = (RuleBasedCollator)super.clone();
  258.          var1.primResult = null;
  259.          var1.secResult = null;
  260.          var1.terResult = null;
  261.          var1.sourceCursor = null;
  262.          var1.targetCursor = null;
  263.          return var1;
  264.       }
  265.    }
  266.  
  267.    public boolean equals(Object var1) {
  268.       if (var1 == null) {
  269.          return false;
  270.       } else if (!super.equals(var1)) {
  271.          return false;
  272.       } else {
  273.          RuleBasedCollator var2 = (RuleBasedCollator)var1;
  274.          return this.getRules().equals(var2.getRules());
  275.       }
  276.    }
  277.  
  278.    public int hashCode() {
  279.       return this.getRules().hashCode();
  280.    }
  281.  
  282.    RBCollationTables getTables() {
  283.       return this.tables;
  284.    }
  285.  
  286.    // $FF: synthetic method
  287.    static Class class$(String var0) {
  288.       try {
  289.          return Class.forName(var0);
  290.       } catch (ClassNotFoundException var2) {
  291.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  292.       }
  293.    }
  294. }
  295.