home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 December / PCO1297.ISO / FilesBBS / FREI / JAVA3.ARJ / JAVA3.ZIP / CLASS / DocumentParser.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-06  |  3.9 KB  |  248 lines

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.net.URL;
  4.  
  5. class DocumentParser {
  6.    SearchEngineSpider spider;
  7.    // $FF: renamed from: in java.io.InputStream
  8.    InputStream field_0;
  9.    // $FF: renamed from: g SearchEngineGenerator
  10.    SearchEngineGenerator field_1;
  11.    String section;
  12.    URL url;
  13.    int pos;
  14.    int unget;
  15.  
  16.    public DocumentParser(SearchEngineGenerator var1, InputStream var2, SearchEngineSpider var3, URL var4) {
  17.       this.field_1 = var1;
  18.       this.field_0 = var2;
  19.       this.spider = var3;
  20.       this.url = var4;
  21.       this.unget = -1;
  22.    }
  23.  
  24.    public DocumentParser(SearchEngineGenerator var1, InputStream var2) {
  25.       this.field_1 = var1;
  26.       this.field_0 = var2;
  27.       this.url = null;
  28.       this.spider = null;
  29.       this.unget = -1;
  30.    }
  31.  
  32.    int get() throws IOException {
  33.       int var1;
  34.       if (this.unget >= 0) {
  35.          var1 = this.unget;
  36.          this.unget = -1;
  37.       } else {
  38.          var1 = this.field_0.read();
  39.       }
  40.  
  41.       return var1;
  42.    }
  43.  
  44.    static boolean isWS(int var0) {
  45.       return var0 == 32 || var0 == 9 || var0 == 13 || var0 == 10;
  46.    }
  47.  
  48.    static boolean isAlpha(int var0) {
  49.       return Character.isLetterOrDigit((char)var0);
  50.    }
  51.  
  52.    String getSection() throws IOException {
  53.       StringBuffer var1 = new StringBuffer();
  54.       this.pos = 0;
  55.       boolean var4 = false;
  56.       boolean var5 = false;
  57.  
  58.       int var2;
  59.       while((var2 = this.get()) >= 0 && isWS(var2)) {
  60.       }
  61.  
  62.       boolean var3 = var2 == 60;
  63.       if (var2 >= 0) {
  64.          this.unget = var2;
  65.  
  66.          while((var2 = this.get()) >= 0) {
  67.             if (var3) {
  68.                if (var4) {
  69.                   var1.append((char)var2);
  70.                   if (var2 == 34) {
  71.                      var5 = false;
  72.                      var4 = false;
  73.                   }
  74.                   continue;
  75.                }
  76.  
  77.                if (var2 == 34) {
  78.                   var1.append('"');
  79.                   var4 = true;
  80.                   continue;
  81.                }
  82.  
  83.                if (var2 == 62) {
  84.                   var1.append('>');
  85.                   break;
  86.                }
  87.             } else if (var2 == 60) {
  88.                this.unget = var2;
  89.                break;
  90.             }
  91.  
  92.             if (isWS(var2)) {
  93.                if (!var5) {
  94.                   var1.append(' ');
  95.                   var5 = true;
  96.                }
  97.             } else {
  98.                var5 = false;
  99.                var1.append((char)var2);
  100.             }
  101.          }
  102.       }
  103.  
  104.       return this.section = HTMLcvt.fromHTML(var1.toString());
  105.    }
  106.  
  107.    int getChar() {
  108.       if (this.pos >= this.section.length()) {
  109.          return -1;
  110.       } else {
  111.          char var1 = this.section.charAt(this.pos++);
  112.          return var1;
  113.       }
  114.    }
  115.  
  116.    String getWord() {
  117.       StringBuffer var1 = new StringBuffer();
  118.  
  119.       int var2;
  120.       while((var2 = this.getChar()) >= 0 && !isAlpha(var2)) {
  121.       }
  122.  
  123.       if (var2 >= 0) {
  124.          do {
  125.             var1.append((char)var2);
  126.          } while((var2 = this.getChar()) >= 0 && isAlpha(var2));
  127.       }
  128.  
  129.       return var1.toString();
  130.    }
  131.  
  132.    void spiderFollow(String var1, String var2, String var3) {
  133.       int var4 = var3.indexOf(var1);
  134.       if (var4 >= 0) {
  135.          var4 += var1.length();
  136.  
  137.          try {
  138.             if (var2.charAt(var4) == ' ') {
  139.                ++var4;
  140.             }
  141.  
  142.             if (var2.charAt(var4++) == '=') {
  143.                if (var2.charAt(var4) == ' ') {
  144.                   ++var4;
  145.                }
  146.  
  147.                StringBuffer var5 = new StringBuffer();
  148.                if (var2.charAt(var4) == '"') {
  149.                   while(true) {
  150.                      ++var4;
  151.                      if (var2.charAt(var4) == '"') {
  152.                         break;
  153.                      }
  154.  
  155.                      var5.append(var2.charAt(var4));
  156.                   }
  157.                } else {
  158.                   while(true) {
  159.                      char var6 = var2.charAt(var4++);
  160.                      if (var6 == ' ' || var6 == '>') {
  161.                         break;
  162.                      }
  163.  
  164.                      var5.append((char)var6);
  165.                   }
  166.                }
  167.  
  168.                this.spider.follow(this.url, var5.toString());
  169.             }
  170.          } catch (Exception var7) {
  171.          }
  172.       }
  173.    }
  174.  
  175.    public void parse(String var1) throws IOException {
  176.       int var2 = this.field_1.addDocument(var1, "");
  177.       int var3 = 0;
  178.       int var4 = 0;
  179.       boolean var5 = false;
  180.       boolean var6 = true;
  181.       StringBuffer var7 = new StringBuffer();
  182.       String var8 = null;
  183.  
  184.       String var9;
  185.       while((var9 = this.getSection()).length() > 0) {
  186.          if (var6) {
  187.             System.out.print("\r * " + (var8 == null ? "" : var8 + ": ") + this.field_1.getDocs() + "/");
  188.             var4 = 0;
  189.             var6 = false;
  190.          }
  191.  
  192.          if (var9.startsWith("<")) {
  193.             String var12 = var9.toUpperCase();
  194.             if (var12.startsWith("<TITLE")) {
  195.                var5 = true;
  196.             }
  197.  
  198.             if (var12.startsWith("</TITLE")) {
  199.                var5 = false;
  200.                var8 = var7.toString();
  201.                var6 = true;
  202.             }
  203.  
  204.             if (var12.startsWith("<A ") && this.spider != null) {
  205.                this.spiderFollow("HREF", var9, var12);
  206.             }
  207.  
  208.             if (var12.startsWith("<FRAME ") && this.spider != null) {
  209.                this.spiderFollow("SRC", var9, var12);
  210.             }
  211.  
  212.             if (var12.startsWith("<AREA ") && this.spider != null) {
  213.                this.spiderFollow("HREF", var9, var12);
  214.             }
  215.          } else {
  216.             if (var5) {
  217.                if (var7.length() > 0) {
  218.                   var7.append(' ');
  219.                }
  220.  
  221.                var7.append(this.section);
  222.             }
  223.  
  224.             String var10;
  225.             while((var10 = this.getWord()).length() > 0) {
  226.                this.field_1.addWord(var2, var10.toUpperCase());
  227.                StringBuffer var10000 = new StringBuffer();
  228.                ++var3;
  229.                String var11 = var10000.append(var3).append("/").append(this.field_1.getSize()).toString();
  230.  
  231.                while(var4-- > 0) {
  232.                   System.out.print('\b');
  233.                }
  234.  
  235.                System.out.print(var11);
  236.                var4 = var11.length();
  237.             }
  238.          }
  239.       }
  240.  
  241.       if (var8 != null) {
  242.          this.field_1.addDocument(var1, var8);
  243.       }
  244.  
  245.       System.out.println("");
  246.    }
  247. }
  248.