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

  1. package java.text;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. final class MergeCollation {
  6.    ArrayList patterns = new ArrayList();
  7.    private transient PatternEntry saveEntry = null;
  8.    private transient PatternEntry lastEntry = null;
  9.    private transient StringBuffer excess = new StringBuffer();
  10.    private transient byte[] statusArray = new byte[8192];
  11.    private final byte BITARRAYMASK = 1;
  12.    private final int BYTEPOWER = 3;
  13.    private final int BYTEMASK = 7;
  14.  
  15.    public MergeCollation(String var1) throws ParseException {
  16.       for(int var2 = 0; var2 < this.statusArray.length; ++var2) {
  17.          this.statusArray[var2] = 0;
  18.       }
  19.  
  20.       this.setPattern(var1);
  21.    }
  22.  
  23.    public String getPattern() {
  24.       return this.getPattern(true);
  25.    }
  26.  
  27.    public String getPattern(boolean var1) {
  28.       StringBuffer var2 = new StringBuffer();
  29.       Object var3 = null;
  30.       ArrayList var4 = null;
  31.  
  32.       int var5;
  33.       for(var5 = 0; var5 < this.patterns.size(); ++var5) {
  34.          PatternEntry var6 = (PatternEntry)this.patterns.get(var5);
  35.          if (var6.extension.length() != 0) {
  36.             if (var4 == null) {
  37.                var4 = new ArrayList();
  38.             }
  39.  
  40.             var4.add(var6);
  41.          } else {
  42.             if (var4 != null) {
  43.                PatternEntry var7 = this.findLastWithNoExtension(var5 - 1);
  44.  
  45.                for(int var8 = var4.size() - 1; var8 >= 0; --var8) {
  46.                   PatternEntry var9 = (PatternEntry)var4.get(var8);
  47.                   var9.addToBuffer(var2, false, var1, var7);
  48.                }
  49.  
  50.                var4 = null;
  51.             }
  52.  
  53.             var6.addToBuffer(var2, false, var1, (PatternEntry)null);
  54.          }
  55.       }
  56.  
  57.       if (var4 != null) {
  58.          PatternEntry var12 = this.findLastWithNoExtension(var5 - 1);
  59.  
  60.          for(int var13 = var4.size() - 1; var13 >= 0; --var13) {
  61.             PatternEntry var10 = (PatternEntry)var4.get(var13);
  62.             var10.addToBuffer(var2, false, var1, var12);
  63.          }
  64.  
  65.          Object var11 = null;
  66.       }
  67.  
  68.       return var2.toString();
  69.    }
  70.  
  71.    private final PatternEntry findLastWithNoExtension(int var1) {
  72.       --var1;
  73.  
  74.       while(var1 >= 0) {
  75.          PatternEntry var2 = (PatternEntry)this.patterns.get(var1);
  76.          if (var2.extension.length() == 0) {
  77.             return var2;
  78.          }
  79.  
  80.          --var1;
  81.       }
  82.  
  83.       return null;
  84.    }
  85.  
  86.    public String emitPattern() {
  87.       return this.emitPattern(true);
  88.    }
  89.  
  90.    public String emitPattern(boolean var1) {
  91.       StringBuffer var2 = new StringBuffer();
  92.  
  93.       for(int var3 = 0; var3 < this.patterns.size(); ++var3) {
  94.          PatternEntry var4 = (PatternEntry)this.patterns.get(var3);
  95.          if (var4 != null) {
  96.             var4.addToBuffer(var2, true, var1, (PatternEntry)null);
  97.          }
  98.       }
  99.  
  100.       return var2.toString();
  101.    }
  102.  
  103.    public void setPattern(String var1) throws ParseException {
  104.       this.patterns.clear();
  105.       this.addPattern(var1);
  106.    }
  107.  
  108.    public void addPattern(String var1) throws ParseException {
  109.       if (var1 != null) {
  110.          PatternEntry.Parser var2 = new PatternEntry.Parser(var1);
  111.  
  112.          for(PatternEntry var3 = var2.next(); var3 != null; var3 = var2.next()) {
  113.             this.fixEntry(var3);
  114.          }
  115.  
  116.       }
  117.    }
  118.  
  119.    public int getCount() {
  120.       return this.patterns.size();
  121.    }
  122.  
  123.    public PatternEntry getItemAt(int var1) {
  124.       return (PatternEntry)this.patterns.get(var1);
  125.    }
  126.  
  127.    private final void fixEntry(PatternEntry var1) throws ParseException {
  128.       if (this.lastEntry != null && var1.chars.equals(this.lastEntry.chars) && var1.extension.equals(this.lastEntry.extension)) {
  129.          if (var1.strength != 3 && var1.strength != -2) {
  130.             throw new ParseException("The entries " + this.lastEntry + " and " + var1 + " are adjacent in the rules, but have conflicting " + "strengths: A character can't be unequal to itself.", -1);
  131.          }
  132.       } else {
  133.          boolean var2 = true;
  134.          if (var1.strength != -2) {
  135.             int var3 = -1;
  136.             if (var1.chars.length() == 1) {
  137.                char var4 = var1.chars.charAt(0);
  138.                int var5 = var4 >> 3;
  139.                byte var6 = this.statusArray[var5];
  140.                byte var7 = (byte)(1 << (var4 & 7));
  141.                if (var6 != 0 && (var6 & var7) != 0) {
  142.                   var3 = this.patterns.lastIndexOf(var1);
  143.                } else {
  144.                   this.statusArray[var5] = (byte)(var6 | var7);
  145.                }
  146.             } else {
  147.                var3 = this.patterns.lastIndexOf(var1);
  148.             }
  149.  
  150.             if (var3 != -1) {
  151.                this.patterns.remove(var3);
  152.             }
  153.  
  154.             this.excess.setLength(0);
  155.             int var8 = this.findLastEntry(this.lastEntry, this.excess);
  156.             if (this.excess.length() != 0) {
  157.                var1.extension = this.excess + var1.extension;
  158.                if (var8 != this.patterns.size()) {
  159.                   this.lastEntry = this.saveEntry;
  160.                   var2 = false;
  161.                }
  162.             }
  163.  
  164.             if (var8 == this.patterns.size()) {
  165.                this.patterns.add(var1);
  166.                this.saveEntry = var1;
  167.             } else {
  168.                this.patterns.add(var8, var1);
  169.             }
  170.          }
  171.  
  172.          if (var2) {
  173.             this.lastEntry = var1;
  174.          }
  175.  
  176.       }
  177.    }
  178.  
  179.    private final int findLastEntry(PatternEntry var1, StringBuffer var2) throws ParseException {
  180.       if (var1 == null) {
  181.          return 0;
  182.       } else if (var1.strength != -2) {
  183.          int var5 = -1;
  184.          if (var1.chars.length() == 1) {
  185.             int var6 = var1.chars.charAt(0) >> 3;
  186.             if ((this.statusArray[var6] & 1 << (var1.chars.charAt(0) & 7)) != 0) {
  187.                var5 = this.patterns.lastIndexOf(var1);
  188.             }
  189.          } else {
  190.             var5 = this.patterns.lastIndexOf(var1);
  191.          }
  192.  
  193.          if (var5 == -1) {
  194.             throw new ParseException("couldn't find last entry: " + var1, var5);
  195.          } else {
  196.             return var5 + 1;
  197.          }
  198.       } else {
  199.          int var3;
  200.          for(var3 = this.patterns.size() - 1; var3 >= 0; --var3) {
  201.             PatternEntry var4 = (PatternEntry)this.patterns.get(var3);
  202.             if (var4.chars.regionMatches(0, var1.chars, 0, var4.chars.length())) {
  203.                var2.append(var1.chars.substring(var4.chars.length(), var1.chars.length()));
  204.                break;
  205.             }
  206.          }
  207.  
  208.          if (var3 == -1) {
  209.             throw new ParseException("couldn't find: " + var1, var3);
  210.          } else {
  211.             return var3 + 1;
  212.          }
  213.       }
  214.    }
  215. }
  216.