home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 October / PCO1097.ISO / FilesBBS / WIN95 / IAVAZIP.EXE / DATA.Z / HtmlDocument.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-08-18  |  8.0 KB  |  593 lines

  1. package com.sfs.html;
  2.  
  3. import java.awt.Color;
  4. import java.io.IOException;
  5. import java.net.URL;
  6. import java.util.Hashtable;
  7.  
  8. public class HtmlDocument {
  9.    private IntVector codes = new IntVector();
  10.    private StringVector strings = new StringVector();
  11.    private ImageVector images = new ImageVector();
  12.    private String title;
  13.    private String location;
  14.    private String start;
  15.    private Color bgColor;
  16.    private Color textColor;
  17.    private Color linkColor;
  18.    private URL base;
  19.    private String endOfText;
  20.    private static final int TEXT = 0;
  21.    // $FF: renamed from: A int
  22.    private static final int field_0 = 1;
  23.    private static final int ADDRESS = 2;
  24.    // $FF: renamed from: B int
  25.    private static final int field_1 = 3;
  26.    private static final int BASE = 4;
  27.    private static final int BIG = 5;
  28.    private static final int BLOCKQUOTE = 6;
  29.    private static final int BODY = 7;
  30.    // $FF: renamed from: BR int
  31.    private static final int field_2 = 8;
  32.    private static final int CENTER = 9;
  33.    private static final int CITE = 10;
  34.    private static final int CODE = 11;
  35.    // $FF: renamed from: DD int
  36.    private static final int field_3 = 12;
  37.    private static final int DIR = 13;
  38.    // $FF: renamed from: DL int
  39.    private static final int field_4 = 14;
  40.    // $FF: renamed from: DT int
  41.    private static final int field_5 = 15;
  42.    // $FF: renamed from: EM int
  43.    private static final int field_6 = 16;
  44.    private static final int FONT = 17;
  45.    // $FF: renamed from: H1 int
  46.    private static final int field_7 = 18;
  47.    // $FF: renamed from: H2 int
  48.    private static final int field_8 = 19;
  49.    // $FF: renamed from: H3 int
  50.    private static final int field_9 = 20;
  51.    // $FF: renamed from: H4 int
  52.    private static final int field_10 = 21;
  53.    // $FF: renamed from: H5 int
  54.    private static final int field_11 = 22;
  55.    // $FF: renamed from: H6 int
  56.    private static final int field_12 = 23;
  57.    // $FF: renamed from: HR int
  58.    private static final int field_13 = 24;
  59.    // $FF: renamed from: I int
  60.    private static final int field_14 = 25;
  61.    private static final int IMG = 26;
  62.    private static final int KBD = 27;
  63.    // $FF: renamed from: LI int
  64.    private static final int field_15 = 28;
  65.    private static final int LISTING = 29;
  66.    private static final int MENU = 30;
  67.    // $FF: renamed from: OL int
  68.    private static final int field_16 = 31;
  69.    // $FF: renamed from: P int
  70.    private static final int field_17 = 32;
  71.    private static final int PRE = 33;
  72.    private static final int SAMP = 34;
  73.    private static final int SMALL = 35;
  74.    private static final int STRONG = 36;
  75.    private static final int TITLE = 37;
  76.    // $FF: renamed from: TT int
  77.    private static final int field_18 = 38;
  78.    // $FF: renamed from: UL int
  79.    private static final int field_19 = 39;
  80.    private static final int VAR = 40;
  81.    private static final int XMP = 41;
  82.    private static final int MAXCODES = 42;
  83.    protected static final String[] names = new String[]{null, "A", "ADDRESS", "B", "BASE", "BIG", "BLOCKQUOTE", "BODY", "BR", "CENTER", "CITE", "CODE", "DD", "DIR", "DL", "DT", "EM", "FONT", "H1", "H2", "H3", "H4", "H5", "H6", "HR", "I", "IMG", "KBD", "LI", "LISTING", "MENU", "OL", "P", "PRE", "SAMP", "SMALL", "STRONG", "TITLE", "TT", "UL", "VAR", "XMP"};
  84.  
  85.    private void pushHeader(int var1, HtmlPager var2) {
  86.       var2.pushStandardFont();
  87.       var2.pushBold();
  88.       var2.pushFontSize(var1);
  89.    }
  90.  
  91.    private void popHeader(HtmlPager var1) {
  92.       var1.popFont();
  93.       var1.popFont();
  94.       var1.popFont();
  95.    }
  96.  
  97.    private void parse(HtmlTokenizer var1) {
  98.       while(!var1.eof()) {
  99.          if (!this.parseTextItem(var1) && !this.parseOpenItem(var1) && !this.parseCloseItem(var1)) {
  100.             var1.getTagOrText();
  101.          }
  102.       }
  103.  
  104.    }
  105.  
  106.    private void drawClose(int var1, HtmlPager var2) {
  107.       switch (var1) {
  108.          case 0:
  109.             return;
  110.          case 1:
  111.             var2.popAnchor();
  112.             return;
  113.          case 2:
  114.             var2.popFont();
  115.             return;
  116.          case 3:
  117.             var2.popFont();
  118.             return;
  119.          case 4:
  120.             return;
  121.          case 5:
  122.             var2.popFont();
  123.             return;
  124.          case 6:
  125.             var2.popRightMargin();
  126.             var2.popLeftMargin(true);
  127.             return;
  128.          case 7:
  129.             return;
  130.          case 8:
  131.             return;
  132.          case 9:
  133.             var2.popCenter();
  134.             return;
  135.          case 10:
  136.             return;
  137.          case 11:
  138.             var2.popFont();
  139.             return;
  140.          case 12:
  141.             return;
  142.          case 13:
  143.             var2.popList();
  144.             var2.popLeftMargin(true);
  145.             return;
  146.          case 14:
  147.             var2.popLeftMargin(true);
  148.             return;
  149.          case 15:
  150.             return;
  151.          case 16:
  152.             var2.popFont();
  153.             return;
  154.          case 17:
  155.             var2.popFontColor();
  156.             var2.popFont();
  157.             return;
  158.          case 18:
  159.             this.popHeader(var2);
  160.             var2.drawNewLine(true);
  161.             return;
  162.          case 19:
  163.             this.popHeader(var2);
  164.             var2.drawNewLine(true);
  165.             return;
  166.          case 20:
  167.             this.popHeader(var2);
  168.             var2.drawNewLine(true);
  169.             return;
  170.          case 21:
  171.             this.popHeader(var2);
  172.             var2.drawNewLine(true);
  173.             return;
  174.          case 22:
  175.             this.popHeader(var2);
  176.             var2.drawNewLine(true);
  177.             return;
  178.          case 23:
  179.             this.popHeader(var2);
  180.             var2.drawNewLine(true);
  181.             return;
  182.          case 24:
  183.             return;
  184.          case 25:
  185.             var2.popFont();
  186.             return;
  187.          case 26:
  188.             return;
  189.          case 27:
  190.             var2.popFont();
  191.             return;
  192.          case 28:
  193.             return;
  194.          case 29:
  195.             var2.popPreformatted();
  196.             return;
  197.          case 30:
  198.             var2.popList();
  199.             var2.popLeftMargin(true);
  200.             return;
  201.          case 31:
  202.             var2.popList();
  203.             var2.popLeftMargin(true);
  204.             return;
  205.          case 32:
  206.             return;
  207.          case 33:
  208.             var2.popPreformatted();
  209.             return;
  210.          case 34:
  211.             var2.popFont();
  212.             return;
  213.          case 35:
  214.             var2.popFont();
  215.             return;
  216.          case 36:
  217.             var2.popFont();
  218.             return;
  219.          case 37:
  220.             return;
  221.          case 38:
  222.             var2.popFont();
  223.             return;
  224.          case 39:
  225.             var2.popList();
  226.             var2.popLeftMargin(true);
  227.             return;
  228.          case 40:
  229.             var2.popFont();
  230.             var2.popFont();
  231.             return;
  232.          case 41:
  233.             var2.popPreformatted();
  234.             return;
  235.          default:
  236.       }
  237.    }
  238.  
  239.    private void drawOpen(int var1, HtmlPager var2) {
  240.       switch (var1) {
  241.          case 0:
  242.             String var7 = this.strings.nextElement();
  243.             var2.drawText(var7);
  244.             return;
  245.          case 1:
  246.             String var4 = this.strings.nextElement();
  247.             String var5 = this.strings.nextElement();
  248.             var2.pushAnchor(var4, var5);
  249.             return;
  250.          case 2:
  251.             var2.pushItalic();
  252.             return;
  253.          case 3:
  254.             var2.pushBold();
  255.             return;
  256.          case 4:
  257.             return;
  258.          case 5:
  259.             var2.pushFontSize(var2.getFontSize() - 1);
  260.             return;
  261.          case 6:
  262.             var2.pushRightMargin();
  263.             var2.pushLeftMargin(true);
  264.             return;
  265.          case 7:
  266.             return;
  267.          case 8:
  268.             var2.drawNewLine(false);
  269.             return;
  270.          case 9:
  271.             var2.pushCenter();
  272.             return;
  273.          case 10:
  274.             return;
  275.          case 11:
  276.             var2.pushFixedFont();
  277.             return;
  278.          case 12:
  279.             var2.drawNewLine(false);
  280.             return;
  281.          case 13:
  282.             var2.pushLeftMargin(true);
  283.             var2.pushListButton();
  284.             return;
  285.          case 14:
  286.             var2.pushLeftMargin(true);
  287.             return;
  288.          case 15:
  289.             var2.popLeftMargin(true);
  290.             var2.pushLeftMargin(false);
  291.             return;
  292.          case 16:
  293.             var2.pushItalic();
  294.             return;
  295.          case 17:
  296.             int var3 = getFontSize(this.strings.nextElement(), var2);
  297.             Color var9 = getColor(this.strings.nextElement(), var2.getFontColor());
  298.             var2.pushFontColor(var9);
  299.             var2.pushFontSize(var3);
  300.             return;
  301.          case 18:
  302.             var2.drawNewLine(true);
  303.             this.pushHeader(1, var2);
  304.             return;
  305.          case 19:
  306.             var2.drawNewLine(true);
  307.             this.pushHeader(2, var2);
  308.             return;
  309.          case 20:
  310.             var2.drawNewLine(true);
  311.             this.pushHeader(3, var2);
  312.             return;
  313.          case 21:
  314.             var2.drawNewLine(true);
  315.             this.pushHeader(4, var2);
  316.             return;
  317.          case 22:
  318.             var2.drawNewLine(true);
  319.             this.pushHeader(5, var2);
  320.             return;
  321.          case 23:
  322.             var2.drawNewLine(true);
  323.             this.pushHeader(6, var2);
  324.             return;
  325.          case 24:
  326.             var2.drawRule();
  327.             return;
  328.          case 25:
  329.             var2.pushItalic();
  330.             return;
  331.          case 26:
  332.             String var6 = this.strings.nextElement();
  333.             HtmlImage var8 = this.images.nextElement();
  334.             var2.drawImage(var8, var6);
  335.             return;
  336.          case 27:
  337.             var2.pushFixedFont();
  338.             return;
  339.          case 28:
  340.             var2.drawNewLine(false);
  341.             var2.drawListItem();
  342.             return;
  343.          case 29:
  344.             var2.pushPreformatted();
  345.             return;
  346.          case 30:
  347.             var2.pushLeftMargin(true);
  348.             var2.pushListButton();
  349.             return;
  350.          case 31:
  351.             var2.pushLeftMargin(true);
  352.             var2.pushListNumber();
  353.             return;
  354.          case 32:
  355.             var2.drawNewLine(true);
  356.             return;
  357.          case 33:
  358.             var2.pushPreformatted();
  359.             return;
  360.          case 34:
  361.             var2.pushFixedFont();
  362.             return;
  363.          case 35:
  364.             var2.pushFontSize(var2.getFontSize() + 1);
  365.             return;
  366.          case 36:
  367.             var2.pushBold();
  368.             return;
  369.          case 37:
  370.             return;
  371.          case 38:
  372.             var2.pushFixedFont();
  373.             return;
  374.          case 39:
  375.             var2.pushLeftMargin(true);
  376.             var2.pushListButton();
  377.             return;
  378.          case 40:
  379.             var2.pushFixedFont();
  380.             var2.pushBold();
  381.             return;
  382.          case 41:
  383.             var2.pushPreformatted();
  384.             return;
  385.          default:
  386.       }
  387.    }
  388.  
  389.    private static String get(Hashtable var0, String var1) {
  390.       return (String)var0.get(var1);
  391.    }
  392.  
  393.    private boolean parseTextItem(HtmlTokenizer var1) {
  394.       String var2;
  395.       if (this.endOfText == null) {
  396.          var2 = var1.getText();
  397.       } else {
  398.          var2 = var1.getPreformattedText(this.endOfText);
  399.       }
  400.  
  401.       if (var2 != null) {
  402.          this.codes.addElement(0);
  403.          this.strings.addElement(var2);
  404.          return true;
  405.       } else {
  406.          return false;
  407.       }
  408.    }
  409.  
  410.    protected synchronized void draw(HtmlPager var1) {
  411.       var1.setBase(this.base);
  412.       var1.setColors(this.bgColor, this.textColor, this.linkColor);
  413.       this.codes.reset();
  414.       this.strings.reset();
  415.       this.images.reset();
  416.  
  417.       while(this.codes.hasMoreElements()) {
  418.          int var2 = this.codes.nextElement();
  419.          if (var2 >= 0) {
  420.             this.drawOpen(var2, var1);
  421.          } else {
  422.             this.drawClose(-var2, var1);
  423.          }
  424.       }
  425.  
  426.       var1.finish();
  427.    }
  428.  
  429.    private static int getInt(String var0) {
  430.       try {
  431.          return Integer.parseInt(var0, 10);
  432.       } catch (Exception var1) {
  433.          return -1;
  434.       }
  435.    }
  436.  
  437.    public String getStart() {
  438.       return this.start;
  439.    }
  440.  
  441.    private static Color getColor(String var0, Color var1) {
  442.       if (var0 == null) {
  443.          return var1;
  444.       } else {
  445.          if (var0.charAt(0) == '#') {
  446.             var0 = var0.substring(1);
  447.          }
  448.  
  449.          try {
  450.             int var2 = Integer.parseInt(var0.substring(0, 2), 16);
  451.             int var3 = Integer.parseInt(var0.substring(2, 4), 16);
  452.             int var4 = Integer.parseInt(var0.substring(4, 6), 16);
  453.             return var2 >= 0 && var3 >= 0 && var4 >= 0 ? new Color(var2, var3, var4) : var1;
  454.          } catch (Exception var5) {
  455.             return var1;
  456.          }
  457.       }
  458.    }
  459.  
  460.    public String getURLString() {
  461.       return this.start == null ? this.location : this.location + "#" + this.start;
  462.    }
  463.  
  464.    private void fillLocationAndStart(URL var1) {
  465.       String var2 = var1.getProtocol();
  466.       String var3 = var1.getHost();
  467.       int var4 = var1.getPort();
  468.  
  469.       String var5;
  470.       for(var5 = var1.getFile(); var5.startsWith("/"); var5 = var5.substring(1)) {
  471.       }
  472.  
  473.       if (var4 < 0) {
  474.          this.location = var2 + "://" + var3 + "/" + var5;
  475.       } else {
  476.          this.location = var2 + "://" + var3 + ":" + var4 + "/" + var5;
  477.       }
  478.  
  479.       this.start = var1.getRef();
  480.    }
  481.  
  482.    private static int getFontSize(String var0, HtmlPager var1) {
  483.       if (var0 == null) {
  484.          return var1.getFontSize();
  485.       } else {
  486.          try {
  487.             if (var0.charAt(0) == '+') {
  488.                return var1.getFontSize() - Integer.parseInt(var0.substring(1), 10);
  489.             } else {
  490.                return var0.charAt(0) == '-' ? var1.getFontSize() + Integer.parseInt(var0.substring(1), 10) : 7 - Integer.parseInt(var0, 10);
  491.             }
  492.          } catch (Exception var2) {
  493.             return var1.getFontSize();
  494.          }
  495.       }
  496.    }
  497.  
  498.    private boolean parseCloseItem(HtmlTokenizer var1) {
  499.       int var2 = 1;
  500.  
  501.       while(!var1.getCloseTag(names[var2])) {
  502.          ++var2;
  503.          if (var2 >= 42) {
  504.             return false;
  505.          }
  506.       }
  507.  
  508.       this.codes.addElement(-var2);
  509.       if (var2 == 33 || var2 == 29 || var2 == 41) {
  510.          this.endOfText = null;
  511.       }
  512.  
  513.       return true;
  514.    }
  515.  
  516.    public String getTitle() {
  517.       return this.title;
  518.    }
  519.  
  520.    public HtmlDocument(URL var1) throws IOException {
  521.       this.base = var1;
  522.       this.fillLocationAndStart(var1);
  523.       this.parse(new HtmlTokenizer(var1.openStream()));
  524.       this.codes.trimToSize();
  525.       this.strings.trimToSize();
  526.       this.images.trimToSize();
  527.    }
  528.  
  529.    private boolean parseOpenItem(HtmlTokenizer var1) {
  530.       int var2 = 1;
  531.  
  532.       do {
  533.          Hashtable var3 = var1.getOpenTag(names[var2]);
  534.          if (var3 != null) {
  535.             this.codes.addElement(var2);
  536.             switch (var2) {
  537.                case 1:
  538.                   this.strings.addElement(get(var3, "HREF"));
  539.                   this.strings.addElement(get(var3, "NAME"));
  540.                   break;
  541.                case 4:
  542.                   String var4 = get(var3, "HREF");
  543.                   this.strings.addElement(var4);
  544.  
  545.                   try {
  546.                      this.base = new URL(var4);
  547.                   } catch (Exception var7) {
  548.                   }
  549.                   break;
  550.                case 7:
  551.                   this.bgColor = getColor(get(var3, "BGCOLOR"), this.bgColor);
  552.                   this.textColor = getColor(get(var3, "TEXT"), this.textColor);
  553.                   this.linkColor = getColor(get(var3, "LINK"), this.linkColor);
  554.                   break;
  555.                case 17:
  556.                   this.strings.addElement(get(var3, "SIZE"));
  557.                   this.strings.addElement(get(var3, "COLOR"));
  558.                   break;
  559.                case 26:
  560.                   int var5 = getInt(get(var3, "WIDTH"));
  561.                   int var6 = getInt(get(var3, "HEIGHT"));
  562.                   this.images.addElement(this.base, get(var3, "SRC"), var5, var6);
  563.                   this.strings.addElement(get(var3, "ALIGN"));
  564.                   break;
  565.                case 29:
  566.                case 41:
  567.                   this.endOfText = "/" + names[var2];
  568.                   break;
  569.                case 33:
  570.                   this.endOfText = "";
  571.                   break;
  572.                case 37:
  573.                   this.title = var1.getText();
  574.  
  575.                   while(!var1.getCloseTag(names[var2])) {
  576.                      var1.getTagOrText();
  577.                   }
  578.             }
  579.  
  580.             return true;
  581.          }
  582.  
  583.          ++var2;
  584.       } while(var2 < 42);
  585.  
  586.       return false;
  587.    }
  588.  
  589.    public String getLocation() {
  590.       return this.location;
  591.    }
  592. }
  593.