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

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