home *** CD-ROM | disk | FTP | other *** search
/ Dynamic HTML Construction Kit / Dynamic HTML Construction Kit.iso / earthlink / nscomm / java40.jar / java / text / PatternEntry.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  2.8 KB  |  255 lines

  1. package java.text;
  2.  
  3. class PatternEntry {
  4.    static final int RESET = -2;
  5.    static final int UNSET = -1;
  6.    int strength = -1;
  7.    String chars = "";
  8.    String extension = "";
  9.  
  10.    public void appendQuotedExtension(StringBuffer var1) {
  11.       appendQuoted(this.extension, var1);
  12.    }
  13.  
  14.    public void appendQuotedChars(StringBuffer var1) {
  15.       appendQuoted(this.chars, var1);
  16.    }
  17.  
  18.    public boolean equals(Object var1) {
  19.       PatternEntry var2 = (PatternEntry)var1;
  20.       boolean var3 = this.chars.equals(var2.chars) && this.extension.equals(var2.extension);
  21.       return var3;
  22.    }
  23.  
  24.    public String toString() {
  25.       StringBuffer var1 = new StringBuffer();
  26.       this.addToBuffer(var1, true, false, (PatternEntry)null);
  27.       return var1.toString();
  28.    }
  29.  
  30.    int getStrength() {
  31.       return this.strength;
  32.    }
  33.  
  34.    String getExtension() {
  35.       return this.extension;
  36.    }
  37.  
  38.    String getChars() {
  39.       return this.chars;
  40.    }
  41.  
  42.    PatternEntry() {
  43.    }
  44.  
  45.    PatternEntry(int var1, StringBuffer var2, StringBuffer var3) {
  46.       this.strength = var1;
  47.       this.chars = var2.toString();
  48.       this.extension = var3.toString();
  49.    }
  50.  
  51.    void addToBuffer(StringBuffer var1, boolean var2, boolean var3, PatternEntry var4) {
  52.       if (var3 && var1.length() > 0) {
  53.          if (this.strength != 0 && var4 == null) {
  54.             var1.append(' ');
  55.          } else {
  56.             var1.append('\n');
  57.          }
  58.       }
  59.  
  60.       if (var4 != null) {
  61.          var1.append('&');
  62.          if (var3) {
  63.             var1.append(' ');
  64.          }
  65.  
  66.          var4.appendQuotedChars(var1);
  67.          this.appendQuotedExtension(var1);
  68.          if (var3) {
  69.             var1.append(' ');
  70.          }
  71.       }
  72.  
  73.       switch (this.strength) {
  74.          case -2:
  75.             var1.append('&');
  76.             break;
  77.          case -1:
  78.             var1.append('?');
  79.             break;
  80.          case 0:
  81.             var1.append('<');
  82.             break;
  83.          case 1:
  84.             var1.append(';');
  85.             break;
  86.          case 2:
  87.             var1.append(',');
  88.             break;
  89.          case 3:
  90.             var1.append('=');
  91.       }
  92.  
  93.       if (var3) {
  94.          var1.append(' ');
  95.       }
  96.  
  97.       appendQuoted(this.chars, var1);
  98.       if (var2 && this.extension.length() != 0) {
  99.          var1.append('/');
  100.          appendQuoted(this.extension, var1);
  101.       }
  102.  
  103.    }
  104.  
  105.    int getNextEntry(String var1, int var2) throws ParseException {
  106.       byte var3 = -1;
  107.       StringBuffer var4 = new StringBuffer();
  108.       StringBuffer var5 = new StringBuffer();
  109.       boolean var6 = true;
  110.  
  111.       label88:
  112.       for(boolean var7 = false; var2 < var1.length(); ++var2) {
  113.          char var8 = var1.charAt(var2);
  114.          if (var7) {
  115.             if (var8 == '\'') {
  116.                var7 = false;
  117.             } else if (var4.length() == 0) {
  118.                var4.append(var8);
  119.             } else if (var6) {
  120.                var4.append(var8);
  121.             } else {
  122.                var5.append(var8);
  123.             }
  124.          } else {
  125.             switch (var8) {
  126.                case '\t':
  127.                case '\n':
  128.                case '\f':
  129.                case '\r':
  130.                case ' ':
  131.                   break;
  132.                case '&':
  133.                   if (var3 != -1) {
  134.                      break label88;
  135.                   }
  136.  
  137.                   var3 = -2;
  138.                   break;
  139.                case '\'':
  140.                   var7 = true;
  141.                   ++var2;
  142.                   var8 = var1.charAt(var2);
  143.                   if (var4.length() == 0) {
  144.                      var4.append(var8);
  145.                   } else if (var6) {
  146.                      var4.append(var8);
  147.                   } else {
  148.                      var5.append(var8);
  149.                   }
  150.                   break;
  151.                case ',':
  152.                   if (var3 != -1) {
  153.                      break label88;
  154.                   }
  155.  
  156.                   var3 = 2;
  157.                   break;
  158.                case '/':
  159.                   var6 = false;
  160.                   break;
  161.                case ';':
  162.                   if (var3 != -1) {
  163.                      break label88;
  164.                   }
  165.  
  166.                   var3 = 1;
  167.                   break;
  168.                case '<':
  169.                   if (var3 != -1) {
  170.                      break label88;
  171.                   }
  172.  
  173.                   var3 = 0;
  174.                   break;
  175.                case '=':
  176.                   if (var3 != -1) {
  177.                      break label88;
  178.                   }
  179.  
  180.                   var3 = 3;
  181.                   break;
  182.                default:
  183.                   if (var3 == -1) {
  184.                      throw new ParseException("missing char (=,;<&) : " + var1.substring(var2, var2 + 10 < var1.length() ? var2 + 10 : var1.length()), var2);
  185.                   }
  186.  
  187.                   if (isSpecialChar(var8) && !var7) {
  188.                      throw new ParseException("Unquoted punctuation character", var2);
  189.                   }
  190.  
  191.                   if (var6) {
  192.                      var4.append(var8);
  193.                   } else {
  194.                      var5.append(var8);
  195.                   }
  196.             }
  197.          }
  198.       }
  199.  
  200.       if (var3 == -1) {
  201.          return -1;
  202.       } else if (var4.length() == 0) {
  203.          throw new ParseException("missing chars (=,;<&): " + var1.substring(var2, var2 + 10 < var1.length() ? var2 + 10 : var1.length()), var2);
  204.       } else {
  205.          this.strength = var3;
  206.          this.chars = var4.toString();
  207.          this.extension = var5.toString();
  208.          return var2;
  209.       }
  210.    }
  211.  
  212.    static boolean isSpecialChar(char var0) {
  213.       return var0 <= '/' && var0 >= ' ' || var0 <= '?' && var0 >= ':' || var0 <= '`' && var0 >= '[' || var0 <= '~' && var0 >= '{';
  214.    }
  215.  
  216.    static void appendQuoted(String var0, StringBuffer var1) {
  217.       boolean var2 = false;
  218.       char var3 = var0.charAt(0);
  219.       if (Character.isSpaceChar(var3)) {
  220.          var2 = true;
  221.          var1.append('\'');
  222.       } else if (isSpecialChar(var3)) {
  223.          var2 = true;
  224.          var1.append('\'');
  225.       } else {
  226.          switch (var3) {
  227.             case '\t':
  228.             case '\n':
  229.             case '\f':
  230.             case '\r':
  231.             case '\u0010':
  232.             case '@':
  233.                var2 = true;
  234.                var1.append('\'');
  235.                break;
  236.             case '\'':
  237.                var2 = true;
  238.                var1.append('\'');
  239.                break;
  240.             default:
  241.                if (var2) {
  242.                   var2 = false;
  243.                   var1.append('\'');
  244.                }
  245.          }
  246.       }
  247.  
  248.       var1.append(var0);
  249.       if (var2) {
  250.          var1.append('\'');
  251.       }
  252.  
  253.    }
  254. }
  255.