home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 7: Programming / CDAT7.iso / Share / Java / JDesignerPro / Jdp3_0.exe / data1.cab / Program_Files / JDPMain.jar / JDPBrowser.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-03-19  |  19.6 KB  |  1,560 lines

  1. import java.awt.BorderLayout;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Dimension;
  6. import java.awt.Event;
  7. import java.awt.Font;
  8. import java.awt.FontMetrics;
  9. import java.awt.Graphics;
  10. import java.awt.Image;
  11. import java.awt.Panel;
  12. import java.awt.PrintJob;
  13. import java.awt.Rectangle;
  14. import java.awt.Scrollbar;
  15. import java.awt.image.ImageObserver;
  16. import java.io.File;
  17. import java.io.FileInputStream;
  18. import java.io.InputStream;
  19. import java.net.URL;
  20. import java.util.Date;
  21. import java.util.Properties;
  22. import java.util.StringTokenizer;
  23. import java.util.Vector;
  24.  
  25. public class JDPBrowser extends JDPClassLayout {
  26.    Dimension Bounds;
  27.    static boolean activated;
  28.    Vector byteLine;
  29.    boolean centerOff;
  30.    int currXpos;
  31.    int currYpos;
  32.    String currentDoc;
  33.    int currentFontLevel;
  34.    int currentLevel;
  35.    boolean displayErrors = true;
  36.    String docName;
  37.    Vector docTags;
  38.    byte[] docText;
  39.    boolean dropEvent;
  40.    // $FF: renamed from: fm java.awt.FontMetrics
  41.    FontMetrics field_0;
  42.    // $FF: renamed from: gr java.awt.Graphics
  43.    Graphics field_1;
  44.    Vector imageArray;
  45.    int imageBottomPos;
  46.    Vector imageLocArray;
  47.    int indent;
  48.    int[] intArray;
  49.    int ipos;
  50.    String[] keyWords;
  51.    Vector lastDoc;
  52.    String lastDocPath;
  53.    Vector lastDocPos;
  54.    Vector lastFont;
  55.    int lastYpos;
  56.    long lastredraw;
  57.    int lineCount;
  58.    int[] lineWidths;
  59.    Vector linkDoc;
  60.    Vector linkPos;
  61.    Vector links;
  62.    boolean matchCompleteWords = true;
  63.    int maxWidth;
  64.    Image offscreen;
  65.    Rectangle offscreensize;
  66.    Font preFont;
  67.    int rightBlockIndent;
  68.    int rightIndent;
  69.    Color saveColor;
  70.    Font[] saveFont;
  71.    Scrollbar scrollEast;
  72.    String tString;
  73.    char thisChar;
  74.    int thisLength;
  75.    String thisString;
  76.    JDPHtmlTag thisTag;
  77.    JDPHtmlTagRef thisTagRef;
  78.    Date timenow;
  79.    int totalImages;
  80.    int totalLinks;
  81.    int[] widths;
  82.    String wwwPath;
  83.    int defaultFontSize = 14;
  84.    Color textHighlightText;
  85.    Color textHighlight;
  86.    Dimension paintDimension;
  87.  
  88.    public void paint(Graphics var1) {
  89.       this.update(var1);
  90.    }
  91.  
  92.    public void printPages() {
  93.       PrintJob var1 = ((Component)this).getToolkit().getPrintJob(super.user.jdpMainWindow, "JDP Help Print", (Properties)null);
  94.       if (var1 != null) {
  95.          Dimension var2 = var1.getPageDimension();
  96.          var2 = new Dimension(780, 1015);
  97.          this.setDimension(var2);
  98.          int var4 = this.lastYpos;
  99.          this.lastYpos = 0;
  100.  
  101.          for(this.currYpos = 1; this.currYpos > this.lastYpos; this.lastYpos += var2.height - 15) {
  102.             Graphics var3 = var1.getGraphics();
  103.             this.update(var3);
  104.             var3.dispose();
  105.          }
  106.  
  107.          this.setDimension((Dimension)null);
  108.          var1.end();
  109.          this.lastYpos = var4;
  110.          ((Component)this).repaint();
  111.       }
  112.  
  113.    }
  114.  
  115.    public String getFullDocname() {
  116.       return this.currentDoc;
  117.    }
  118.  
  119.    public boolean setFullDocname(String var1) {
  120.       return this.setDocname(var1);
  121.    }
  122.  
  123.    public void setFontSize(int var1) {
  124.       this.defaultFontSize = var1;
  125.       ((Component)this).setFont(new Font("TimesRoman", 0, this.defaultFontSize));
  126.       this.lastFont.setElementAt(((Component)this).getFont(), 0);
  127.       ((Component)this).repaint();
  128.    }
  129.  
  130.    public int getFontSize() {
  131.       return this.defaultFontSize;
  132.    }
  133.  
  134.    public void setKeywords(String[] var1) {
  135.       this.keyWords = var1;
  136.    }
  137.  
  138.    public Dimension minimumSize() {
  139.       Dimension var1 = new Dimension(10, 10);
  140.       return var1;
  141.    }
  142.  
  143.    public void update(Graphics var1) {
  144.       Rectangle var2 = ((Component)this).bounds();
  145.       this.Bounds = ((Component)this).size();
  146.       if (this.paintDimension != null) {
  147.          var2.width = this.paintDimension.width;
  148.          var2.height = this.paintDimension.height;
  149.          this.Bounds.width = this.paintDimension.width;
  150.          this.Bounds.height = this.paintDimension.height;
  151.       }
  152.  
  153.       if (this.offscreen == null || var2.width != this.offscreensize.width || var2.height != this.offscreensize.height) {
  154.          try {
  155.             if (var2.width < 10) {
  156.                var2.width = 10;
  157.             }
  158.  
  159.             if (var2.height < 10) {
  160.                var2.height = 10;
  161.             }
  162.  
  163.             this.offscreen = ((Component)this).createImage(var2.width, var2.height);
  164.          } catch (Exception var39) {
  165.             return;
  166.          }
  167.  
  168.          this.offscreensize = var2;
  169.          if (this.offscreen == null) {
  170.             return;
  171.          }
  172.  
  173.          this.field_1 = this.offscreen.getGraphics();
  174.          this.field_1.setFont(((Component)this).getFont());
  175.       }
  176.  
  177.       Color var3 = ((Component)this).getBackground();
  178.       this.field_1.setFont((Font)this.lastFont.elementAt(0));
  179.       this.field_0 = this.field_1.getFontMetrics();
  180.       this.indent = 8;
  181.       byte var4 = 25;
  182.       int var5 = this.field_0.getHeight() - 1;
  183.       this.rightIndent = 0;
  184.       this.rightBlockIndent = 0;
  185.       int var6 = var5;
  186.       if (this.lastYpos < 0) {
  187.          this.lastYpos = 0;
  188.       }
  189.  
  190.       this.currYpos = 5 - this.lastYpos + var5;
  191.       int var7 = 0;
  192.       int var8 = -this.lastYpos;
  193.       this.currXpos = 8;
  194.       this.field_1.setColor(var3);
  195.       this.field_1.fillRect(0, 0, var2.width, var2.height);
  196.       this.field_1.setColor(Color.black);
  197.       this.widths = this.field_0.getWidths();
  198.       this.centerOff = true;
  199.       boolean var9 = false;
  200.       boolean var10 = true;
  201.       byte var11 = 5;
  202.       if (this.scrollEast != null && this.scrollEast.isVisible()) {
  203.          var11 = 15;
  204.       }
  205.  
  206.       this.maxWidth = this.Bounds.width - var11 - this.indent;
  207.       int var12 = 0;
  208.       int[] var13 = new int[20];
  209.       int[] var14 = new int[20];
  210.       Color var15 = Color.black;
  211.       Color var16 = Color.blue;
  212.       Color var17 = Color.magenta;
  213.       Color var18 = Color.yellow;
  214.       this.links = new Vector(300, 300);
  215.       this.linkDoc = new Vector(300, 300);
  216.       this.linkPos = new Vector(300, 300);
  217.       this.totalLinks = 0;
  218.       this.totalImages = 0;
  219.       boolean var19 = true;
  220.       boolean var20 = false;
  221.       int var21 = 0;
  222.       boolean var22 = false;
  223.       this.imageBottomPos = 0;
  224.       short var23 = 32;
  225.       if (this.docTags == null) {
  226.          if (this.scrollEast != null) {
  227.             this.scrollEast.hide();
  228.          }
  229.  
  230.          this.field_1.setColor(Color.black);
  231.       } else {
  232.          for(int var24 = 0; var24 < this.docTags.size(); ++var24) {
  233.             this.thisTagRef = (JDPHtmlTagRef)this.docTags.elementAt(var24);
  234.             this.thisTag = this.thisTagRef.tag;
  235.             if (this.thisTag.id != 44) {
  236.                this.thisString = new String(this.docText, 0, var7, this.thisTagRef.pos - var7);
  237.                if (this.currYpos > -var2.height) {
  238.                   var22 = true;
  239.                }
  240.  
  241.                if (this.currYpos > var2.height + this.lastYpos) {
  242.                   var22 = false;
  243.                }
  244.  
  245.                if (this.currXpos < 8 || this.indent < 8) {
  246.                   this.indent = 8;
  247.                   this.currXpos = 8;
  248.                }
  249.  
  250.                if (var20) {
  251.                   this.field_1.setFont(this.preFont);
  252.                   this.field_0 = this.field_1.getFontMetrics();
  253.                   int var25 = super.user.u.StringWidth(this.field_1, " ");
  254.                   var5 = this.field_0.getHeight();
  255.                   StringTokenizer var26 = new StringTokenizer(this.thisString, "\n\t", true);
  256.  
  257.                   while(var26.hasMoreTokens()) {
  258.                      this.tString = var26.nextToken();
  259.                      if (this.tString.equals("\n")) {
  260.                         this.currXpos = 8;
  261.                         this.currYpos += var5;
  262.                      } else if (this.tString.equals("\t")) {
  263.                         this.currXpos += 4 * var25;
  264.                      } else {
  265.                         if (var22) {
  266.                            var12 = super.user.u.StringWidth(this.field_1, this.tString);
  267.                            if (!this.isKeyword(this.tString)) {
  268.                               this.field_1.drawString(this.tString, this.currXpos, this.currYpos);
  269.                            } else {
  270.                               this.saveColor = this.field_1.getColor();
  271.                               this.field_1.setColor(this.textHighlight);
  272.                               this.field_1.fillRect(this.currXpos, this.currYpos - var5 + 5, var12, var5);
  273.                               this.field_1.setColor(this.textHighlightText);
  274.                               this.field_1.drawString(this.tString, this.currXpos, this.currYpos);
  275.                               this.field_1.setColor(this.saveColor);
  276.                            }
  277.  
  278.                            if (var9) {
  279.                               this.links.addElement(new Rectangle());
  280.                               ((Rectangle)this.links.elementAt(this.totalLinks++)).reshape(this.currXpos, this.currYpos - var5 + 3, var12, var5);
  281.                               this.linkDoc.addElement(this.linkDoc.elementAt(this.totalLinks - 1));
  282.                               if (this.field_1.getFont().isBold()) {
  283.                                  this.field_1.drawLine(this.currXpos, this.currYpos + 2, this.currXpos + var12, this.currYpos + 2);
  284.                               }
  285.  
  286.                               this.field_1.drawLine(this.currXpos, this.currYpos + 1, this.currXpos + var12, this.currYpos + 1);
  287.                            }
  288.                         }
  289.  
  290.                         this.currXpos += var12;
  291.                      }
  292.                   }
  293.  
  294.                   this.field_1.setFont((Font)this.lastFont.elementAt(this.currentFontLevel));
  295.                   this.field_0 = this.field_1.getFontMetrics();
  296.                   var5 = this.field_0.getHeight();
  297.                } else {
  298.                   var12 = this.bytesWidth(this.docText, var7, this.thisTagRef.pos - var7);
  299.                   if (!this.centerOff && var21 != 0) {
  300.                      this.currXpos = (this.maxWidth - var21) / 2;
  301.                      if (this.currXpos < this.indent) {
  302.                         this.currXpos = this.indent;
  303.                      }
  304.                   }
  305.  
  306.                   if (var10 && this.thisTagRef.pos > var7) {
  307.                      if (this.field_0.getHeight() != var5 && var19) {
  308.                         this.currYpos = this.currYpos + (int)(0.6 * (double)this.field_0.getHeight()) - var5;
  309.                      }
  310.  
  311.                      var19 = false;
  312.                      var5 = this.field_0.getHeight();
  313.  
  314.                      for(int var42 = 0; var42 <= this.lineCount; ++var42) {
  315.                         if (var22) {
  316.                            this.tString = (String)this.byteLine.elementAt(var42);
  317.                            if (!this.isKeyword(this.tString)) {
  318.                               this.field_1.drawString(this.tString, this.currXpos, this.currYpos);
  319.                            } else {
  320.                               this.saveColor = this.field_1.getColor();
  321.                               this.field_1.setColor(this.textHighlight);
  322.                               this.field_1.fillRect(this.currXpos, this.currYpos - var5 + 5, this.lineWidths[var42], var5);
  323.                               this.field_1.setColor(this.textHighlightText);
  324.                               this.field_1.drawString(this.tString, this.currXpos, this.currYpos);
  325.                               this.field_1.setColor(this.saveColor);
  326.                            }
  327.  
  328.                            if (var9) {
  329.                               this.links.addElement(new Rectangle());
  330.                               ((Rectangle)this.links.elementAt(this.totalLinks++)).reshape(this.currXpos, this.currYpos - var5 + 3, this.lineWidths[var42], var5);
  331.                               this.linkDoc.addElement(this.linkDoc.elementAt(this.totalLinks - 1));
  332.                               if (this.field_1.getFont().isBold()) {
  333.                                  this.field_1.drawLine(this.currXpos, this.currYpos + 2, this.currXpos + this.lineWidths[var42], this.currYpos + 2);
  334.                               }
  335.  
  336.                               this.field_1.drawLine(this.currXpos, this.currYpos + 1, this.currXpos + this.lineWidths[var42], this.currYpos + 1);
  337.                            }
  338.                         }
  339.  
  340.                         if (var42 < this.lineCount) {
  341.                            this.currYpos += var5;
  342.                            this.currXpos = this.indent;
  343.                         }
  344.                      }
  345.  
  346.                      var8 = this.currYpos + var6;
  347.                      this.currXpos += var12;
  348.                   }
  349.                }
  350.  
  351.                var21 = 0;
  352.                var7 = this.thisTagRef.pos;
  353.                switch (this.thisTag.id) {
  354.                   case 1:
  355.                      if (!this.thisTagRef.isEnd) {
  356.                         if (this.thisTagRef.getAttribute("href") != null) {
  357.                            this.field_1.setColor(var16);
  358.                            var9 = true;
  359.                            if (this.linkDoc.size() > this.totalLinks) {
  360.                               this.linkDoc.setElementAt(this.thisTagRef.getAttribute("href"), this.totalLinks);
  361.                            } else {
  362.                               this.linkDoc.addElement(this.thisTagRef.getAttribute("href"));
  363.                            }
  364.                         }
  365.  
  366.                         if (this.thisTagRef.getAttribute("name") != null) {
  367.                            Vector var58 = new Vector();
  368.                            var58.addElement(this.thisTagRef.getAttribute("name"));
  369.                            var58.addElement(Integer.toString(this.currYpos + this.lastYpos - 40));
  370.                            this.linkPos.addElement(var58);
  371.                         }
  372.                      } else {
  373.                         this.field_1.setColor(var15);
  374.                         var9 = false;
  375.                      }
  376.                      break;
  377.                   case 3:
  378.                   case 35:
  379.                      Font var57 = this.field_1.getFont();
  380.                      if (!this.thisTagRef.isEnd) {
  381.                         if (this.lastFont.size() > this.currentFontLevel) {
  382.                            this.lastFont.setElementAt(var57, this.currentFontLevel++);
  383.                         } else {
  384.                            ++this.currentFontLevel;
  385.                            this.lastFont.addElement(var57);
  386.                         }
  387.  
  388.                         if (!var57.isBold()) {
  389.                            this.field_1.setFont(new Font(var57.getName(), var57.getStyle() + 1, var57.getSize()));
  390.                         }
  391.                      } else {
  392.                         this.field_1.setFont((Font)this.lastFont.elementAt(this.currentFontLevel += -1));
  393.                      }
  394.  
  395.                      this.field_0 = this.field_1.getFontMetrics();
  396.                      this.widths = this.field_0.getWidths();
  397.                      break;
  398.                   case 5:
  399.                      Color var48 = this.parseColors(this.thisTagRef.getAttribute("bgcolor"));
  400.                      if (var48 != null) {
  401.                         Color var56 = this.field_1.getColor();
  402.                         this.field_1.setColor(var48);
  403.                         this.field_1.fillRect(1, 1, this.Bounds.width - 2, this.Bounds.height - 2);
  404.                         this.field_1.setColor(var56);
  405.                      }
  406.  
  407.                      var48 = this.parseColors(this.thisTagRef.getAttribute("text"));
  408.                      if (var48 != null) {
  409.                         this.field_1.setColor(var48);
  410.                         var15 = var48;
  411.                      }
  412.  
  413.                      var48 = this.parseColors(this.thisTagRef.getAttribute("link"));
  414.                      if (var48 != null) {
  415.                         var16 = var48;
  416.                      }
  417.  
  418.                      var48 = this.parseColors(this.thisTagRef.getAttribute("vlink"));
  419.                      if (var48 != null) {
  420.                         ;
  421.                      }
  422.  
  423.                      var48 = this.parseColors(this.thisTagRef.getAttribute("alink"));
  424.                      if (var48 != null) {
  425.                         ;
  426.                      }
  427.                      break;
  428.                   case 6:
  429.                      if (this.currXpos != this.indent) {
  430.                         this.currYpos += var6;
  431.                         this.currXpos = this.indent;
  432.                      }
  433.  
  434.                      if (!this.centerOff) {
  435.                         var21 = this.calcTotalWidth(var24);
  436.                      } else {
  437.                         var21 = 0;
  438.                      }
  439.                      break;
  440.                   case 9:
  441.                      if (!this.thisTagRef.isEnd) {
  442.                         var13[(this.indent - 5) / var4] = this.thisTag.id;
  443.                         var14[(this.indent - 5) / var4] = 1;
  444.                      } else {
  445.                         for(this.currYpos += var5; this.currYpos < var8 && var6 > 0; this.currYpos += var6) {
  446.                         }
  447.  
  448.                         var8 = this.currYpos;
  449.                      }
  450.  
  451.                      this.currXpos = this.indent;
  452.                      break;
  453.                   case 10:
  454.                      for(this.currYpos += var6; this.currYpos < var8 && var6 > 0; this.currYpos += var6) {
  455.                      }
  456.  
  457.                      this.currXpos = this.indent + var4;
  458.                      this.maxWidth = this.Bounds.width - var11 - this.currXpos;
  459.                      break;
  460.                   case 13:
  461.                      while(this.currYpos <= var8 && var6 > 0) {
  462.                         this.currYpos += var6;
  463.                      }
  464.  
  465.                      this.currXpos = this.indent;
  466.                      this.maxWidth = this.Bounds.width - var11 - this.currXpos;
  467.                      break;
  468.                   case 15:
  469.                   case 16:
  470.                   case 17:
  471.                   case 18:
  472.                   case 19:
  473.                   case 20:
  474.                      int var63 = this.defaultFontSize;
  475.                      if (this.thisTag.id == 15) {
  476.                         var63 = this.defaultFontSize + 14;
  477.                      }
  478.  
  479.                      if (this.thisTag.id == 16) {
  480.                         var63 = this.defaultFontSize + 8;
  481.                      }
  482.  
  483.                      if (this.thisTag.id == 17) {
  484.                         var63 = this.defaultFontSize + 6;
  485.                      }
  486.  
  487.                      if (this.thisTag.id == 18) {
  488.                         var63 = this.defaultFontSize + 1;
  489.                      }
  490.  
  491.                      if (this.thisTag.id == 19) {
  492.                         var63 = this.defaultFontSize - 2;
  493.                      }
  494.  
  495.                      if (this.thisTag.id == 20) {
  496.                         var63 = this.defaultFontSize - 4;
  497.                      }
  498.  
  499.                      Font var55 = this.field_1.getFont();
  500.                      if (!this.thisTagRef.isEnd) {
  501.                         this.currYpos -= var6;
  502.                         if (this.lastFont.size() > this.currentFontLevel) {
  503.                            this.lastFont.setElementAt(var55, this.currentFontLevel++);
  504.                         } else {
  505.                            ++this.currentFontLevel;
  506.                            this.lastFont.addElement(var55);
  507.                         }
  508.  
  509.                         this.field_1.setFont(new Font(var55.getName(), 1, var63));
  510.                         this.field_0 = this.field_1.getFontMetrics();
  511.                         var5 = this.field_0.getHeight();
  512.                         this.currYpos += var5;
  513.                         if (this.currXpos != this.indent) {
  514.                            while(this.currYpos < var8) {
  515.                               this.currYpos += var5;
  516.                            }
  517.                         }
  518.  
  519.                         if (this.centerOff) {
  520.                            this.currXpos = this.indent;
  521.                         }
  522.                      } else {
  523.                         this.field_1.setFont((Font)this.lastFont.elementAt(this.currentFontLevel += -1));
  524.                         this.field_0 = this.field_1.getFontMetrics();
  525.                         var5 = this.field_0.getHeight();
  526.                         if (this.currXpos != this.indent) {
  527.                            while(this.currYpos < var8) {
  528.                               this.currYpos += var5;
  529.                            }
  530.                         }
  531.  
  532.                         this.indent = 8;
  533.  
  534.                         for(this.rightIndent = 0; this.imageBottomPos != 0 && this.currYpos < this.imageBottomPos && var6 > 0; this.currYpos += var6) {
  535.                         }
  536.  
  537.                         this.imageBottomPos = 0;
  538.                         this.currXpos = this.indent;
  539.                      }
  540.  
  541.                      this.widths = this.field_0.getWidths();
  542.                      break;
  543.                   case 22:
  544.                      while(this.imageBottomPos != 0 && this.currYpos < this.imageBottomPos && var6 > 0) {
  545.                         this.currYpos += var6;
  546.                      }
  547.  
  548.                      if (this.currXpos != this.indent) {
  549.                         this.imageBottomPos = 0;
  550.                         this.currYpos += 8;
  551.                         this.currXpos = this.indent;
  552.                      }
  553.  
  554.                      if (var22) {
  555.                         Color var66 = this.field_1.getColor();
  556.                         Color var44 = JDPUtils.darker(var3);
  557.                         var44 = JDPUtils.darker(var44);
  558.                         this.field_1.setColor(var44);
  559.                         this.field_1.drawLine(this.currXpos, this.currYpos, this.maxWidth, this.currYpos);
  560.                         this.field_1.drawLine(this.currXpos, this.currYpos, this.currXpos, this.currYpos + 2);
  561.                         var44 = JDPUtils.brighter(var3);
  562.                         var44 = JDPUtils.brighter(var44);
  563.                         this.field_1.setColor(var44);
  564.                         this.field_1.drawLine(this.maxWidth, this.currYpos, this.maxWidth, this.currYpos + 2);
  565.                         this.field_1.drawLine(this.currXpos, this.currYpos + 2, this.maxWidth, this.currYpos + 2);
  566.                         this.field_1.setColor(var66);
  567.                      }
  568.  
  569.                      this.currYpos = this.currYpos + var6 + 4;
  570.                      var8 = this.currYpos;
  571.                      this.currXpos = this.indent;
  572.                      break;
  573.                   case 24:
  574.                      Font var54 = this.field_1.getFont();
  575.                      if (!this.thisTagRef.isEnd) {
  576.                         if (this.lastFont.size() > this.currentFontLevel) {
  577.                            this.lastFont.setElementAt(var54, this.currentFontLevel++);
  578.                         } else {
  579.                            ++this.currentFontLevel;
  580.                            this.lastFont.addElement(var54);
  581.                         }
  582.  
  583.                         this.field_1.setFont(new Font(var54.getName(), var54.getStyle() + 2, var54.getSize()));
  584.                      } else {
  585.                         this.field_1.setFont((Font)this.lastFont.elementAt(this.currentFontLevel += -1));
  586.                      }
  587.  
  588.                      this.field_0 = this.field_1.getFontMetrics();
  589.                      this.widths = this.field_0.getWidths();
  590.                      break;
  591.                   case 25:
  592.                      String var27 = this.thisTagRef.getAttribute("src");
  593.                      String var59 = this.thisTagRef.getAttribute("align");
  594.                      int var29 = 0;
  595.                      int var30 = 0;
  596.                      if (this.thisTagRef.getAttribute("width") != null) {
  597.                         var29 = Integer.parseInt(this.thisTagRef.getAttribute("width"));
  598.                      }
  599.  
  600.                      if (this.thisTagRef.getAttribute("width") != null) {
  601.                         var30 = Integer.parseInt(this.thisTagRef.getAttribute("height"));
  602.                      }
  603.  
  604.                      if (var59 == null) {
  605.                         var59 = "";
  606.                      }
  607.  
  608.                      String var31 = this.lastDocPath.substring(super.user.wwwroot.length()) + var27;
  609.                      var31 = super.user.u.replace(var31, "/", File.separator);
  610.                      if (!JDesignerPro.executable) {
  611.                         if (var27.substring(0, 4).compareTo("http") != 0) {
  612.                            if (var27.substring(0, 1).equals("/")) {
  613.                               var27 = this.wwwPath + var27;
  614.                            } else {
  615.                               var27 = this.lastDocPath + var27;
  616.                            }
  617.                         }
  618.                      } else {
  619.                         var27 = var31;
  620.                      }
  621.  
  622.                      try {
  623.                         try {
  624.                            Image var62 = null;
  625.                            int var64 = this.imageLocArray.indexOf(var27);
  626.                            if (var64 >= 0) {
  627.                               var62 = (Image)this.imageArray.elementAt(var64);
  628.                            } else {
  629.                               this.imageLocArray.addElement(var27);
  630.                               var64 = this.imageLocArray.size() - 1;
  631.                               this.imageArray.addElement((Object)null);
  632.                               JDPImageLoader var68 = new JDPImageLoader(super.user, this, var27, var64);
  633.                               (new Thread(var68)).start();
  634.                            }
  635.  
  636.                            if (var62 != null) {
  637.                               if (var29 == 0) {
  638.                                  var29 = var62.getWidth((ImageObserver)null);
  639.                               }
  640.  
  641.                               if (var30 == 0) {
  642.                                  var30 = var62.getHeight((ImageObserver)null);
  643.                               }
  644.                            }
  645.  
  646.                            var12 = var29;
  647.                            if (var62 != null && var22) {
  648.                               if (var59.compareTo("right") != 0 && var59.compareTo("RIGHT") != 0) {
  649.                                  this.field_1.drawImage(var62, this.currXpos, this.currYpos - var5, var29, var30, (ImageObserver)null);
  650.                               } else {
  651.                                  this.field_1.drawImage(var62, this.maxWidth - var29, this.currYpos - var5, var29, var30, (ImageObserver)null);
  652.                               }
  653.                            }
  654.  
  655.                            String var69 = this.thisTagRef.getAttribute("border");
  656.                            if (var22 && var69 != null && var69.compareTo("0") != 0) {
  657.                               this.field_1.setColor(var16);
  658.                               if (var59.compareTo("right") != 0 && var59.compareTo("RIGHT") != 0) {
  659.                                  this.field_1.drawRect(this.currXpos, this.currYpos - var5, var29, var30);
  660.                               } else {
  661.                                  this.field_1.drawRect(this.maxWidth - var29, this.currYpos - var5, var29, var30);
  662.                               }
  663.  
  664.                               this.field_1.setColor(var15);
  665.                            }
  666.  
  667.                            if (var22 && var9) {
  668.                               this.links.addElement(new Rectangle());
  669.                               if (var59.compareTo("right") != 0 && var59.compareTo("RIGHT") != 0) {
  670.                                  ((Rectangle)this.links.elementAt(this.totalLinks++)).reshape(this.currXpos, this.currYpos - var5, var29, var30);
  671.                               } else {
  672.                                  ((Rectangle)this.links.elementAt(this.totalLinks++)).reshape(this.maxWidth - var29, this.currYpos - var5, var29, var30);
  673.                               }
  674.  
  675.                               this.linkDoc.addElement(this.linkDoc.elementAt(this.totalLinks - 1));
  676.                            }
  677.  
  678.                            if (var59.equals("")) {
  679.                               this.currYpos = this.currYpos - var6 + var30;
  680.                               this.currXpos += var29 + 5;
  681.                               var8 = this.currYpos + var6;
  682.                            } else if (var59.compareTo("right") != 0 && var59.compareTo("RIGHT") != 0) {
  683.                               if (var59.compareTo("left") != 0 && var59.compareTo("LEFT") != 0) {
  684.                                  if (var59.compareTo("top") != 0 && var59.compareTo("TOP") != 0) {
  685.                                     this.currXpos = this.indent;
  686.                                     this.currYpos = this.currYpos - var6 + var30;
  687.                                     var8 = this.currYpos + var30;
  688.                                  } else {
  689.                                     this.currYpos = this.currYpos - var6 + var30;
  690.                                     this.currXpos = this.indent;
  691.                                  }
  692.                               } else {
  693.                                  this.currXpos = this.indent + var29;
  694.                               }
  695.                            } else {
  696.                               this.rightIndent = var29 + 10;
  697.                               var8 = this.currYpos + var6 - 10;
  698.                               this.imageBottomPos = this.currYpos - var5 + var30;
  699.                            }
  700.                         } catch (Exception var37) {
  701.                            var12 = var29;
  702.                            ((Throwable)var37).printStackTrace();
  703.                         }
  704.                      } catch (Exception var38) {
  705.                         var12 = var29;
  706.                         ((Throwable)var38).printStackTrace();
  707.                      }
  708.                      break;
  709.                   case 28:
  710.                      while(this.currYpos < var8 && var6 > 0) {
  711.                         this.currYpos += var6;
  712.                      }
  713.  
  714.                      this.currXpos = this.indent;
  715.                      if (var13[(this.indent - 5) / var4] == 31) {
  716.                         String var61 = Integer.toString(var14[(this.indent - 5) / var4]++) + ".";
  717.                         this.field_1.drawString(var61, this.currXpos - super.user.u.StringWidth(this.field_1, var61) - 2, this.currYpos);
  718.                      } else if (var13[(this.indent - 5) / var4] == 39 || var13[(this.indent - 5) / var4] == 29) {
  719.                         this.field_1.fillArc(this.currXpos - 13, this.currYpos - 7, 6, 6, 0, 360);
  720.                      }
  721.                      break;
  722.                   case 29:
  723.                   case 31:
  724.                   case 39:
  725.                   case 54:
  726.                      if (this.thisTagRef.isEnd) {
  727.                         this.indent -= var4;
  728.                         this.currYpos += var5;
  729.                         this.maxWidth += var4;
  730.                         var8 = this.currYpos;
  731.                      } else {
  732.                         if (this.currXpos != this.indent) {
  733.                            while(this.currYpos < var8) {
  734.                               this.currYpos += var6;
  735.                            }
  736.                         }
  737.  
  738.                         this.indent += var4;
  739.                         var13[(this.indent - 5) / var4] = this.thisTag.id;
  740.                         var14[(this.indent - 5) / var4] = 1;
  741.                         this.maxWidth -= var4;
  742.                      }
  743.  
  744.                      this.currXpos = this.indent;
  745.                      break;
  746.                   case 32:
  747.                      if (!this.thisTagRef.isEnd && var23 != 32) {
  748.                         String var28 = this.thisTagRef.getAttribute("align");
  749.                         if (var28 != null && var28.equals("center")) {
  750.                            this.centerOff = false;
  751.                            this.calcTotalWidth(var24);
  752.                         }
  753.  
  754.                         if (this.currXpos != this.indent) {
  755.                            this.currYpos += var6;
  756.                         } else {
  757.                            while(this.currYpos < var8) {
  758.                               this.currYpos += var6;
  759.                            }
  760.                         }
  761.  
  762.                         if (!this.centerOff) {
  763.                            var21 = this.calcTotalWidth(var24);
  764.                         } else {
  765.                            var21 = 0;
  766.                         }
  767.  
  768.                         this.rightIndent = 0;
  769.                         this.currXpos = this.indent;
  770.  
  771.                         for(this.currYpos += var6; this.imageBottomPos != 0 && this.currYpos < this.imageBottomPos && var6 > 0; this.currYpos += var6) {
  772.                         }
  773.  
  774.                         this.imageBottomPos = 0;
  775.                      } else if (this.thisTagRef.isEnd) {
  776.                         this.currXpos = this.indent;
  777.                         this.centerOff = true;
  778.                         var21 = 0;
  779.                      }
  780.                      break;
  781.                   case 33:
  782.                      if (!this.thisTagRef.isEnd) {
  783.                         var20 = true;
  784.                         this.currXpos = 8;
  785.                         this.currYpos += var5;
  786.                      } else {
  787.                         var20 = false;
  788.                         this.currXpos = 8;
  789.                         this.currYpos += var5;
  790.                      }
  791.                      break;
  792.                   case 36:
  793.                      var10 = this.thisTagRef.isEnd;
  794.                      break;
  795.                   case 40:
  796.                      while(this.currYpos < var8 && var6 > 0) {
  797.                         this.currYpos += var6;
  798.                      }
  799.  
  800.                      if (!this.thisTagRef.isEnd) {
  801.                         this.indent += var4;
  802.                         this.currXpos = this.indent;
  803.                         this.rightBlockIndent += var4;
  804.                         this.maxWidth = this.Bounds.width - var11 - this.currXpos;
  805.                      } else if (this.indent >= var4) {
  806.                         this.indent -= var4;
  807.                         this.currXpos = this.indent;
  808.                         this.rightBlockIndent -= var4;
  809.                         this.maxWidth = this.Bounds.width - var11 - this.currXpos;
  810.                      }
  811.                      break;
  812.                   case 50:
  813.                      this.centerOff = this.thisTagRef.isEnd;
  814.                      if (this.centerOff) {
  815.                         var21 = 0;
  816.                      } else {
  817.                         var21 = this.calcTotalWidth(var24);
  818.                      }
  819.                      break;
  820.                   case 51:
  821.                      Font var53 = this.field_1.getFont();
  822.                      if (this.thisTagRef.isEnd) {
  823.                         this.field_1.setFont((Font)this.lastFont.elementAt(this.currentFontLevel += -1));
  824.                      } else {
  825.                         if (this.lastFont.size() > this.currentFontLevel) {
  826.                            this.lastFont.setElementAt(var53, this.currentFontLevel++);
  827.                         } else {
  828.                            ++this.currentFontLevel;
  829.                            this.lastFont.addElement(var53);
  830.                         }
  831.  
  832.                         String var32 = this.thisTagRef.getAttribute("name");
  833.  
  834.                         String var33;
  835.                         for(var33 = this.thisTagRef.getAttribute("size"); this.currYpos < var8 && var6 > 0 && this.currXpos == this.indent; this.currYpos += var6) {
  836.                         }
  837.  
  838.                         int var34 = this.defaultFontSize;
  839.                         if (var33 != null) {
  840.                            if (var33.substring(0, 1).compareTo("+") == 0) {
  841.                               var34 += Integer.parseInt(var33.substring(1)) * 2;
  842.                            } else if (var33.substring(0, 1).compareTo("-") == 0) {
  843.                               var34 -= Integer.parseInt(var33.substring(1)) * 2;
  844.                            } else {
  845.                               var34 = Integer.parseInt(var33);
  846.                               if (var34 < 6) {
  847.                                  var34 = 8 + var34 * 2;
  848.                               }
  849.  
  850.                               var34 = var34 * this.defaultFontSize / 14;
  851.                            }
  852.                         }
  853.  
  854.                         if (var32 != null) {
  855.                            Font var35 = new Font(var32, var53.getStyle(), var34);
  856.                            this.field_1.setFont(var35);
  857.                         } else {
  858.                            Font var70 = new Font(var53.getName(), var53.getStyle(), var34);
  859.                            this.field_1.setFont(var70);
  860.                         }
  861.                      }
  862.  
  863.                      this.field_0 = this.field_1.getFontMetrics();
  864.                      this.widths = this.field_0.getWidths();
  865.                      break;
  866.                   case 55:
  867.                      if (!this.thisTagRef.isEnd) {
  868.                         Color var43 = this.parseColors(this.thisTagRef.getAttribute("text"));
  869.                         if (var43 != null) {
  870.                            this.field_1.setColor(var43);
  871.                         }
  872.                      } else {
  873.                         this.field_1.setColor(var15);
  874.                      }
  875.                      break;
  876.                   case 56:
  877.                      if (!this.thisTagRef.isEnd) {
  878.                         this.currYpos -= 3;
  879.                      } else {
  880.                         this.currYpos += 3;
  881.                      }
  882.                }
  883.  
  884.                if (this.thisTag.id != 5) {
  885.                   var23 = this.thisTag.id;
  886.                } else {
  887.                   var23 = 32;
  888.                }
  889.             }
  890.          }
  891.  
  892.          this.currYpos += this.lastYpos;
  893.          if (this.currYpos <= this.Bounds.height && this.lastYpos == 0) {
  894.             if (this.scrollEast != null) {
  895.                this.scrollEast.hide();
  896.             }
  897.          } else {
  898.             if (this.scrollEast == null) {
  899.                this.scrollEast = new Scrollbar(1, this.lastYpos, this.Bounds.height, 0, this.currYpos);
  900.                ((Container)this).add("East", this.scrollEast);
  901.             }
  902.  
  903.             this.scrollEast.move(this.Bounds.width - 14, 2);
  904.             this.scrollEast.resize(12, this.Bounds.height - 4);
  905.             this.scrollEast.show();
  906.             int var41 = 0;
  907.             if (System.getProperty("java.vendor").startsWith("Netscape") && System.getProperty("java.version").compareTo("1.1.5") < 0 || System.getProperty("java.vendor").startsWith("Microsoft") && System.getProperty("java.version").compareTo("1.1.4") < 0) {
  908.                var41 = this.Bounds.height;
  909.             }
  910.  
  911.             this.scrollEast.setValues(this.lastYpos, this.Bounds.height, 0, this.currYpos - var41);
  912.          }
  913.  
  914.          this.field_1.setColor(JDPUtils.darker(var3));
  915.          this.field_1.drawLine(0, 0, this.Bounds.width, 0);
  916.          this.field_1.drawLine(0, 0, 0, this.Bounds.height);
  917.          this.field_1.setColor(Color.black);
  918.          this.field_1.drawLine(1, 1, this.Bounds.width - 1, 1);
  919.          this.field_1.drawLine(1, 1, 1, this.Bounds.height - 1);
  920.          this.field_1.setColor(JDPUtils.brighter(var3));
  921.          this.field_1.drawLine(this.Bounds.width - 1, 0, this.Bounds.width - 1, this.Bounds.height - 1);
  922.          this.field_1.drawLine(0, this.Bounds.height - 1, this.Bounds.width - 1, this.Bounds.height - 1);
  923.          this.field_1.setColor(var3);
  924.          this.field_1.drawLine(this.Bounds.width - 2, 1, this.Bounds.width - 2, this.Bounds.height - 2);
  925.          this.field_1.drawLine(1, this.Bounds.height - 2, this.Bounds.width - 2, this.Bounds.height - 2);
  926.          this.field_1.setColor(Color.black);
  927.          var1.drawImage(this.offscreen, 0, 0, this.Bounds.width, this.Bounds.height, (ImageObserver)null);
  928.       }
  929.    }
  930.  
  931.    int bytesWidth(byte[] var1, int var2, int var3) {
  932.       this.lineCount = -1;
  933.       int var4 = 0;
  934.       int var5 = var2;
  935.       int var7 = 0;
  936.       int var8 = this.currXpos;
  937.       boolean var9 = false;
  938.       this.byteLine = new Vector(10, 5);
  939.  
  940.       int var6;
  941.       for(var6 = 0; var6 < var3; ++var6) {
  942.          byte var10 = var1[var2 + var6];
  943.          if (var10 >= 0 && var10 < this.widths.length) {
  944.             var4 += this.widths[var10];
  945.          }
  946.  
  947.          if (var4 > this.maxWidth - 5 - (var8 - this.indent) - this.rightIndent - this.rightBlockIndent) {
  948.             int var11 = var2 + var6;
  949.             this.checkLineWidth();
  950.  
  951.             for(this.lineWidths[this.lineCount + 1] = var4; var11 > var5 && var1[var11] != 32; --var11) {
  952.                if (var1[var11] >= 0 && var1[var5] < this.widths.length) {
  953.                   this.lineWidths[this.lineCount + 1] = var4 - this.widths[var1[var11]];
  954.                }
  955.             }
  956.  
  957.             if (var11 == var5) {
  958.                ++this.lineCount;
  959.                this.byteLine.addElement(new String(var1, 0, var5, var2 + var6 - var5));
  960.             } else {
  961.                ++this.lineCount;
  962.                this.byteLine.addElement(new String(var1, 0, var5, var11 - var5));
  963.  
  964.                while(var11 < var2 + var3 && var1[var11] == 32) {
  965.                   ++var11;
  966.                }
  967.  
  968.                var6 = var11 - var2;
  969.             }
  970.  
  971.             var5 = var2 + var6;
  972.             if (var1[var5] >= 0 && var1[var5] < this.widths.length) {
  973.                var4 = this.widths[var1[var5]];
  974.             }
  975.  
  976.             var7 = var6 + 1;
  977.             var8 = this.indent;
  978.             var9 = true;
  979.          }
  980.       }
  981.  
  982.       if (var6 - var7 > 0) {
  983.          if (var1.length > var5 + var6 - var7 + 1 && var9) {
  984.             ++this.lineCount;
  985.             this.byteLine.addElement(new String(var1, 0, var5, var6 - var7 + 1));
  986.          } else {
  987.             ++this.lineCount;
  988.             this.byteLine.addElement(new String(var1, 0, var5, var6 - var7));
  989.          }
  990.  
  991.          this.lineWidths[this.lineCount] = var4;
  992.       }
  993.  
  994.       return var4;
  995.    }
  996.  
  997.    int calcTotalWidth(int var1) {
  998.       JDPHtmlTagRef var2 = (JDPHtmlTagRef)this.docTags.elementAt(var1);
  999.       JDPHtmlTag var3 = var2.tag;
  1000.       int var4 = 0;
  1001.       int var5 = var2.pos;
  1002.       int var6 = 0;
  1003.       this.saveFont[var6] = this.field_1.getFont();
  1004.       ++var1;
  1005.  
  1006.       for(; var1 < this.docTags.size(); ++var1) {
  1007.          var2 = (JDPHtmlTagRef)this.docTags.elementAt(var1);
  1008.          var3 = var2.tag;
  1009.          this.bytesWidth(this.docText, var5, var2.pos - var5);
  1010.          var4 += this.bytesWidth(this.docText, var5, var2.pos - var5);
  1011.          if (var3.id == 3) {
  1012.             Font var7 = this.field_1.getFont();
  1013.             if (!var2.isEnd) {
  1014.                this.saveFont[var6++] = var7;
  1015.                this.field_1.setFont(new Font(var7.getName(), var7.getStyle() + 1, var7.getSize()));
  1016.             } else {
  1017.                --var6;
  1018.                this.field_1.setFont(this.saveFont[var6]);
  1019.             }
  1020.  
  1021.             this.field_0 = this.field_1.getFontMetrics();
  1022.             this.widths = this.field_0.getWidths();
  1023.          }
  1024.  
  1025.          if (var3.id == 51) {
  1026.             Font var15 = this.field_1.getFont();
  1027.             if (!var2.isEnd) {
  1028.                this.saveFont[var6++] = var15;
  1029.                String var8 = var2.getAttribute("name");
  1030.                String var9 = var2.getAttribute("size");
  1031.                int var10 = this.defaultFontSize;
  1032.                if (var9 != null) {
  1033.                   if (var9.substring(0, 1).compareTo("+") == 0) {
  1034.                      var10 += Integer.parseInt(var9.substring(1)) * 2;
  1035.                   } else if (var9.substring(0, 1).compareTo("-") == 0) {
  1036.                      var10 -= Integer.parseInt(var9.substring(1)) * 2;
  1037.                   } else {
  1038.                      var10 = Integer.parseInt(var9);
  1039.                      if (var10 < 6) {
  1040.                         var10 = 8 + var10 * 2;
  1041.                      }
  1042.  
  1043.                      var10 = var10 * this.defaultFontSize / 14;
  1044.                   }
  1045.                }
  1046.  
  1047.                if (var8 != null) {
  1048.                   Font var11 = new Font(var8, var15.getStyle(), var10);
  1049.                   this.field_1.setFont(var11);
  1050.                } else {
  1051.                   Font var19 = new Font(var15.getName(), var15.getStyle(), var10);
  1052.                   this.field_1.setFont(var19);
  1053.                }
  1054.             } else {
  1055.                if (var6 > 0) {
  1056.                   --var6;
  1057.                }
  1058.  
  1059.                this.field_1.setFont(this.saveFont[var6]);
  1060.             }
  1061.  
  1062.             this.field_0 = this.field_1.getFontMetrics();
  1063.             this.widths = this.field_0.getWidths();
  1064.          }
  1065.  
  1066.          if (var3.id == 15 || var3.id == 16 || var3.id == 17 || var3.id == 18 || var3.id == 19 || var3.id == 20) {
  1067.             int var16 = this.defaultFontSize;
  1068.             if (var3.id == 15) {
  1069.                var16 = this.defaultFontSize + 14;
  1070.             }
  1071.  
  1072.             if (var3.id == 16) {
  1073.                var16 = this.defaultFontSize + 8;
  1074.             }
  1075.  
  1076.             if (var3.id == 17) {
  1077.                var16 = this.defaultFontSize + 6;
  1078.             }
  1079.  
  1080.             if (var3.id == 18) {
  1081.                var16 = this.defaultFontSize + 1;
  1082.             }
  1083.  
  1084.             if (var3.id == 19) {
  1085.                var16 = this.defaultFontSize - 2;
  1086.             }
  1087.  
  1088.             if (var3.id == 20) {
  1089.                var16 = this.defaultFontSize - 4;
  1090.             }
  1091.  
  1092.             Font var17 = this.field_1.getFont();
  1093.             if (!var2.isEnd) {
  1094.                this.saveFont[var6++] = var17;
  1095.                this.field_1.setFont(new Font(var17.getName(), 1, var16));
  1096.             } else {
  1097.                --var6;
  1098.                this.field_1.setFont(this.saveFont[var6]);
  1099.             }
  1100.  
  1101.             this.field_0 = this.field_1.getFontMetrics();
  1102.             this.widths = this.field_0.getWidths();
  1103.          }
  1104.  
  1105.          var5 = var2.pos;
  1106.          if (var3.id == 50) {
  1107.             var1 = this.docTags.size();
  1108.          }
  1109.  
  1110.          if (var3.id == 6) {
  1111.             var1 = this.docTags.size();
  1112.          }
  1113.  
  1114.          if (var3.id == 32) {
  1115.             var1 = this.docTags.size();
  1116.          }
  1117.       }
  1118.  
  1119.       this.field_1.setFont(this.saveFont[0]);
  1120.       return var4;
  1121.    }
  1122.  
  1123.    void checkLineWidth() {
  1124.       if (this.lineCount + 5 > this.lineWidths.length) {
  1125.          int[] var1 = this.lineWidths;
  1126.          this.lineWidths = new int[this.lineCount + 100];
  1127.          System.arraycopy(var1, 0, this.lineWidths, 0, this.lineCount);
  1128.       }
  1129.  
  1130.    }
  1131.  
  1132.    Color parseColors(String var1) {
  1133.       if (var1 == null) {
  1134.          return null;
  1135.       } else {
  1136.          if (var1.startsWith("#") || var1.startsWith("x") || var1.startsWith("X")) {
  1137.             var1 = var1.substring(1);
  1138.          }
  1139.  
  1140.          try {
  1141.             int var2 = 0;
  1142.  
  1143.             do {
  1144.                this.intArray[var2] = var1.charAt(var2);
  1145.                if (this.intArray[var2] < 58) {
  1146.                   int[] var10000 = this.intArray;
  1147.                   var10000[var2] -= 48;
  1148.                } else if (this.intArray[var2] < 71) {
  1149.                   int[] var5 = this.intArray;
  1150.                   var5[var2] -= 55;
  1151.                } else {
  1152.                   int[] var6 = this.intArray;
  1153.                   var6[var2] -= 87;
  1154.                }
  1155.  
  1156.                ++var2;
  1157.             } while(var2 < 6);
  1158.          } catch (Exception var4) {
  1159.             System.out.println(var1);
  1160.             ((Throwable)var4).printStackTrace();
  1161.          }
  1162.  
  1163.          return new Color(this.intArray[0] * 16 + this.intArray[1], this.intArray[2] * 16 + this.intArray[3], this.intArray[4] * 16 + this.intArray[5]);
  1164.       }
  1165.    }
  1166.  
  1167.    public boolean forward() {
  1168.       if (this.currentLevel + 1 < this.lastDoc.size()) {
  1169.          this.lastYpos = 0;
  1170.          ++this.currentLevel;
  1171.  
  1172.          try {
  1173.             this.lastYpos = Integer.parseInt((String)this.lastDocPos.elementAt(this.currentLevel));
  1174.          } catch (Exception var1) {
  1175.          }
  1176.  
  1177.          this.lastDocPath = null;
  1178.          return this.loadHtmlDoc((String)this.lastDoc.elementAt(this.currentLevel));
  1179.       } else {
  1180.          return false;
  1181.       }
  1182.    }
  1183.  
  1184.    public String getDocname() {
  1185.       return this.docName;
  1186.    }
  1187.  
  1188.    public boolean setDocname(String var1) {
  1189.       this.lastYpos = 0;
  1190.       this.displayErrors = true;
  1191.       return this.loadHtmlDoc(var1);
  1192.    }
  1193.  
  1194.    public boolean setDocname(String var1, boolean var2) {
  1195.       this.lastYpos = 0;
  1196.       this.displayErrors = var2;
  1197.       return this.loadHtmlDoc(var1);
  1198.    }
  1199.  
  1200.    public void setDimension(Dimension var1) {
  1201.       this.paintDimension = var1;
  1202.    }
  1203.  
  1204.    public boolean getMatchCompleteWords() {
  1205.       return this.matchCompleteWords;
  1206.    }
  1207.  
  1208.    public void setMatchCompleteWords(boolean var1) {
  1209.       this.matchCompleteWords = var1;
  1210.    }
  1211.  
  1212.    public boolean back() {
  1213.       if (this.currentLevel > 0) {
  1214.          if (this.lastDocPos.size() > this.currentLevel) {
  1215.             this.lastDocPos.setElementAt(Integer.toString(this.lastYpos), this.currentLevel);
  1216.          } else {
  1217.             this.lastDocPos.addElement(Integer.toString(this.lastYpos));
  1218.          }
  1219.  
  1220.          --this.currentLevel;
  1221.          this.lastYpos = Integer.parseInt((String)this.lastDocPos.elementAt(this.currentLevel));
  1222.          this.lastDocPath = null;
  1223.          return this.loadHtmlDoc((String)this.lastDoc.elementAt(this.currentLevel));
  1224.       } else {
  1225.          return false;
  1226.       }
  1227.    }
  1228.  
  1229.    public boolean handleEvent(Event var1) {
  1230.       int var2 = this.lastYpos;
  1231.       switch (var1.id) {
  1232.          case 202:
  1233.          case 205:
  1234.             ((Component)this).repaint();
  1235.             this.dropEvent = false;
  1236.             return false;
  1237.          case 502:
  1238.             for(int var3 = 0; var3 < this.totalLinks; ++var3) {
  1239.                if (this.links.elementAt(var3) != null && ((Rectangle)this.links.elementAt(var3)).inside(var1.x, var1.y)) {
  1240.                   if (((String)this.linkDoc.elementAt(var3)).toLowerCase().equals("back")) {
  1241.                      if (!this.back()) {
  1242.                         return true;
  1243.                      }
  1244.                   } else {
  1245.                      ++this.currentLevel;
  1246.                      if (this.lastDocPos.size() > this.currentLevel) {
  1247.                         this.lastDocPos.setElementAt(Integer.toString(this.lastYpos), this.currentLevel - 1);
  1248.                      } else {
  1249.                         this.lastDocPos.addElement(Integer.toString(this.lastYpos));
  1250.                      }
  1251.  
  1252.                      if (!this.loadHtmlDoc((String)this.linkDoc.elementAt(var3))) {
  1253.                         return true;
  1254.                      }
  1255.                   }
  1256.  
  1257.                   this.lastYpos = 0;
  1258.                   ((Component)this).repaint();
  1259.                   return true;
  1260.                }
  1261.             }
  1262.  
  1263.             this.keyWords = null;
  1264.             ((Component)this).repaint();
  1265.             return false;
  1266.          case 601:
  1267.             this.dropEvent = true;
  1268.             this.lastYpos -= 20;
  1269.             if (this.lastYpos < 0) {
  1270.                this.lastYpos = 0;
  1271.             }
  1272.  
  1273.             if (var2 != this.lastYpos) {
  1274.                ((Component)this).repaint(1, 1, this.Bounds.width - 2, this.Bounds.height - 2);
  1275.             }
  1276.  
  1277.             return true;
  1278.          case 602:
  1279.             this.dropEvent = true;
  1280.             this.lastYpos += 20;
  1281.             if (this.lastYpos > this.currYpos - this.Bounds.height) {
  1282.                this.lastYpos = this.currYpos - this.Bounds.height + 10;
  1283.             }
  1284.  
  1285.             if (var2 != this.lastYpos) {
  1286.                ((Component)this).repaint(1, 1, this.Bounds.width - 2, this.Bounds.height - 2);
  1287.             }
  1288.  
  1289.             return true;
  1290.          case 603:
  1291.             this.dropEvent = true;
  1292.             this.lastYpos = this.lastYpos - this.Bounds.height + 10;
  1293.             if (this.lastYpos < 0) {
  1294.                this.lastYpos = 0;
  1295.             }
  1296.  
  1297.             if (var2 != this.lastYpos) {
  1298.                ((Component)this).repaint(1, 1, this.Bounds.width - 2, this.Bounds.height - 2);
  1299.             }
  1300.  
  1301.             return true;
  1302.          case 604:
  1303.             this.dropEvent = true;
  1304.             this.lastYpos = this.lastYpos + this.Bounds.height - 10;
  1305.             if (this.lastYpos > this.currYpos - this.Bounds.height) {
  1306.                this.lastYpos = this.currYpos - this.Bounds.height + 10;
  1307.             }
  1308.  
  1309.             if (var2 != this.lastYpos) {
  1310.                ((Component)this).repaint(1, 1, this.Bounds.width - 2, this.Bounds.height - 2);
  1311.             }
  1312.  
  1313.             return true;
  1314.          case 605:
  1315.             if (this.dropEvent) {
  1316.                this.dropEvent = false;
  1317.                return true;
  1318.             }
  1319.  
  1320.             if (this.scrollEast != null) {
  1321.                this.lastYpos = this.scrollEast.getValue();
  1322.             }
  1323.  
  1324.             if (this.lastYpos > this.currYpos - this.Bounds.height) {
  1325.                this.lastYpos = this.currYpos - this.Bounds.height + 10;
  1326.             }
  1327.  
  1328.             if (var2 != this.lastYpos) {
  1329.                ((Component)this).repaint(1, 1, this.Bounds.width - 2, this.Bounds.height - 2);
  1330.             }
  1331.  
  1332.             return true;
  1333.          default:
  1334.             this.dropEvent = false;
  1335.             if (super.user.jdpMainWindow != null) {
  1336.                if (super.user.jdpMainWindow.getCursorType() == 3) {
  1337.                   return false;
  1338.                }
  1339.  
  1340.                for(int var4 = 0; var4 < this.totalLinks; ++var4) {
  1341.                   if (this.links.elementAt(var4) != null && ((Rectangle)this.links.elementAt(var4)).inside(var1.x, var1.y)) {
  1342.                      super.user.jdpMainWindow.setCursor(12);
  1343.                      return false;
  1344.                   }
  1345.                }
  1346.  
  1347.                super.user.jdpMainWindow.setCursor(0);
  1348.             }
  1349.  
  1350.             return false;
  1351.       }
  1352.    }
  1353.  
  1354.    public void layout() {
  1355.       ((Component)this).repaint();
  1356.    }
  1357.  
  1358.    public Dimension preferredSize() {
  1359.       return this.minimumSize();
  1360.    }
  1361.  
  1362.    public void InitClass(JDPUser var1, Panel var2, String var3) {
  1363.       activated = JDPUser.classactivated;
  1364.       if (!activated) {
  1365.          System.out.println("Software Violation - this class may only be used in conjunction with JDesignerPro.");
  1366.       } else {
  1367.          super.user = var1;
  1368.          if (var1.plainFontSize > 0) {
  1369.             this.defaultFontSize = var1.plainFontSize + 3;
  1370.          } else {
  1371.             this.defaultFontSize = 14;
  1372.          }
  1373.  
  1374.          this.textHighlightText = JDPUtils.getTextHighlightText();
  1375.          this.textHighlight = JDPUtils.getTextHighlight();
  1376.          ((Component)this).setFont(new Font("TimesRoman", 0, this.defaultFontSize));
  1377.          ((Container)this).setLayout(new BorderLayout());
  1378.          super.user = var1;
  1379.          super.targetPanel = var2;
  1380.          this.preFont = new Font("Courier", 0, this.defaultFontSize - 2);
  1381.          this.byteLine = new Vector(10, 20);
  1382.          this.lineWidths = new int[5000];
  1383.          this.lastDoc = new Vector(10, 5);
  1384.          this.lastDocPos = new Vector(10, 5);
  1385.          this.lastFont = new Vector(10, 5);
  1386.          this.lastFont.addElement(((Component)this).getFont());
  1387.          this.saveFont = new Font[1000];
  1388.          this.intArray = new int[6];
  1389.          this.imageArray = new Vector(20, 50);
  1390.          this.imageLocArray = new Vector(20, 50);
  1391.          if (this.loadHtmlDoc(var3)) {
  1392.             ;
  1393.          }
  1394.       }
  1395.    }
  1396.  
  1397.    boolean loadHtmlDoc(String var1) {
  1398.       if (var1.length() == 0) {
  1399.          return false;
  1400.       } else if (this.docName != null && this.docName.equals(var1)) {
  1401.          return true;
  1402.       } else {
  1403.          this.docName = var1;
  1404.          var1 = var1.replace('\\', '/');
  1405.          String var4 = var1;
  1406.          String var5 = var1;
  1407.          int var6 = var1.indexOf("#");
  1408.          if (var6 >= 0) {
  1409.             String var7 = var1.substring(var6 + 1);
  1410.             if (var6 == 0) {
  1411.                for(int var19 = 0; var19 < this.linkPos.size(); ++var19) {
  1412.                   Vector var9 = (Vector)this.linkPos.elementAt(var19);
  1413.                   if (((String)var9.elementAt(0)).equals(var7)) {
  1414.                      this.lastYpos = Integer.parseInt((String)var9.elementAt(1));
  1415.                      ((Component)this).repaint();
  1416.                      return false;
  1417.                   }
  1418.                }
  1419.  
  1420.                return false;
  1421.             }
  1422.  
  1423.             var1 = var1.substring(0, var6);
  1424.             var4 = var1;
  1425.          }
  1426.  
  1427.          try {
  1428.             if (super.user.mainmsg != null) {
  1429.                super.user.mainmsg.setStatusMsg("Loading document...", 0);
  1430.             }
  1431.  
  1432.             if (!var1.startsWith("http")) {
  1433.                if (var1.startsWith("/")) {
  1434.                   var1 = super.user.wwwroot + var1.substring(1);
  1435.                } else {
  1436.                   if (this.lastDocPath == null || !this.lastDocPath.startsWith(super.user.wwwroot)) {
  1437.                      this.lastDocPath = super.user.wwwroot;
  1438.                      this.wwwPath = super.user.wwwroot;
  1439.                   }
  1440.  
  1441.                   if (var1.indexOf("/") > 0) {
  1442.                      String var10001 = this.lastDocPath;
  1443.                      this.lastDocPath = var10001 + var1.substring(0, var1.lastIndexOf("/") + 1);
  1444.                      var1 = var1.substring(var1.lastIndexOf("/") + 1);
  1445.                      var4 = var1;
  1446.                   }
  1447.  
  1448.                   var1 = this.lastDocPath + var1;
  1449.                }
  1450.             }
  1451.  
  1452.             if (JDesignerPro.executable && var5.indexOf(File.separator) < 0) {
  1453.                if (!var5.startsWith("\\") && !var5.startsWith("/")) {
  1454.                   var5 = this.lastDocPath.substring(super.user.wwwroot.length()) + var4;
  1455.                } else {
  1456.                   var5 = var5.substring(1);
  1457.                   var1 = super.user.JDesignerPro.wwwroot + var5.replace('\\', '/');
  1458.                }
  1459.  
  1460.                var5 = super.user.u.replace(var5, "/", File.separator);
  1461.             }
  1462.  
  1463.             this.lastDocPath = var1.substring(0, var1.lastIndexOf("/") + 1);
  1464.             int var15 = var1.indexOf("/");
  1465.             var15 = var1.indexOf("/", var15 + 1);
  1466.             var15 = var1.indexOf("/", var15 + 1);
  1467.             this.wwwPath = var1.substring(0, var15);
  1468.             InputStream var3;
  1469.             if (JDesignerPro.executable && !var4.substring(0, 4).equals("http")) {
  1470.                FileInputStream var8 = new FileInputStream(var5);
  1471.                var3 = (InputStream)var8;
  1472.                this.currentDoc = var5;
  1473.             } else {
  1474.                URL var2 = new URL(var1);
  1475.                var3 = var2.openStream();
  1476.                this.currentDoc = var1;
  1477.             }
  1478.  
  1479.             JDPHtmlDoc var18 = new JDPHtmlDoc();
  1480.  
  1481.             try {
  1482.                new JDPHtmlParser(var3, var18);
  1483.             } catch (Exception var10) {
  1484.                System.out.println("Could not open document " + var1);
  1485.                super.user.mainmsg.setStatusMsg("Could not open document " + var1, 20);
  1486.             }
  1487.  
  1488.             this.docText = var18.getText();
  1489.             this.docTags = var18.getTags();
  1490.             var3.close();
  1491.             Object var13 = null;
  1492.          } catch (Exception var11) {
  1493.             if (this.displayErrors) {
  1494.                if (super.user.mainmsg != null) {
  1495.                   if (JDesignerPro.executable && (var4 == null || var4.length() <= 4 || !var4.substring(0, 4).equals("http"))) {
  1496.                      super.user.mainmsg.setStatusMsg("Could not locate file " + var5, 20);
  1497.                      System.out.println("Could not locate file " + var5);
  1498.                   } else {
  1499.                      super.user.mainmsg.setStatusMsg("Could not locate document " + var1, 20);
  1500.                      System.out.println("Could not locate document " + var1);
  1501.                   }
  1502.                }
  1503.             } else {
  1504.                super.user.mainmsg.clearStatusMsg();
  1505.             }
  1506.  
  1507.             return false;
  1508.          }
  1509.  
  1510.          if (super.user.mainmsg != null) {
  1511.             super.user.mainmsg.clearStatusMsg();
  1512.          }
  1513.  
  1514.          ((Component)this).repaint();
  1515.          if (this.lastDoc.size() > this.currentLevel) {
  1516.             this.lastDoc.setElementAt(this.currentDoc, this.currentLevel);
  1517.          } else {
  1518.             this.lastDoc.addElement(this.currentDoc);
  1519.          }
  1520.  
  1521.          return true;
  1522.       }
  1523.    }
  1524.  
  1525.    boolean isKeyword(String var1) {
  1526.       if (this.keyWords == null) {
  1527.          return false;
  1528.       } else {
  1529.          var1 = var1.toLowerCase();
  1530.          this.thisLength = var1.length();
  1531.  
  1532.          for(int var2 = 0; var2 < this.keyWords.length; ++var2) {
  1533.             this.ipos = var1.indexOf(this.keyWords[var2]);
  1534.             if (this.ipos >= 0) {
  1535.                if (!this.matchCompleteWords) {
  1536.                   return true;
  1537.                }
  1538.  
  1539.                if (this.ipos > 0) {
  1540.                   this.thisChar = var1.charAt(this.ipos - 1);
  1541.                }
  1542.  
  1543.                if (this.ipos == 0 || (this.thisChar < 'A' || this.thisChar > 'Z') && (this.thisChar < 'a' || this.thisChar > 'z')) {
  1544.                   if (this.ipos + this.keyWords[var2].length() >= this.thisLength) {
  1545.                      return true;
  1546.                   }
  1547.  
  1548.                   this.thisChar = var1.charAt(this.ipos + this.keyWords[var2].length());
  1549.                   if ((this.thisChar < 'A' || this.thisChar > 'Z') && (this.thisChar < 'a' || this.thisChar > 'z')) {
  1550.                      return true;
  1551.                   }
  1552.                }
  1553.             }
  1554.          }
  1555.  
  1556.          return false;
  1557.       }
  1558.    }
  1559. }
  1560.