home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VCafe / JCLASS.BIN / KLG.JAR / jclass / util / JCString.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-12-05  |  11.9 KB  |  807 lines

  1. package jclass.util;
  2.  
  3. import java.applet.Applet;
  4. import java.applet.AppletContext;
  5. import java.awt.Color;
  6. import java.awt.Component;
  7. import java.awt.Container;
  8. import java.awt.Dimension;
  9. import java.awt.Font;
  10. import java.awt.FontMetrics;
  11. import java.awt.Graphics;
  12. import java.awt.Image;
  13. import java.awt.MediaTracker;
  14. import java.awt.Rectangle;
  15. import java.awt.image.ImageObserver;
  16. import java.net.URL;
  17. import java.util.Vector;
  18.  
  19. public class JCString extends JCVector {
  20.    public static final Integer UNDERLINE = new Integer(-2);
  21.    public static final Integer STRIKETHROUGH = new Integer(-3);
  22.    public static final Integer END_UNDERLINE = new Integer(-4);
  23.    public static final Integer END_STRIKETHROUGH = new Integer(-5);
  24.    public static final Integer HORIZ_SPACE = new Integer(-6);
  25.    public static final Integer VERT_SPACE = new Integer(-7);
  26.    public static final Integer NEWLINE = new Integer(-8);
  27.    public static final Integer RESET = new Integer(-9);
  28.    public static final Integer DEFAULT_FONT = new Integer(-10);
  29.    public static final Integer DEFAULT_COLOR = new Integer(-11);
  30.    public static final Integer TOP = new Integer(-17);
  31.    public static final Integer MIDDLE = new Integer(-18);
  32.    public static final Integer BOTTOM = new Integer(-19);
  33.    public static final Integer LEFT = new Integer(-17);
  34.    public static final Integer CENTER = new Integer(-18);
  35.    public static final Integer RIGHT = new Integer(-19);
  36.    public static final Integer HREF = new Integer(-21);
  37.    public static final Integer END_HREF = new Integer(-22);
  38.    public static final int STRING_LEFT = 0;
  39.    public static final int STRING_RIGHT = 1;
  40.    public static final int STRING_TOP = 2;
  41.    public static final int STRING_BOTTOM = 3;
  42.    static final int NOTFOUND = -1;
  43.    static final int DEFAULT_SPACE = 10;
  44.    static boolean underline;
  45.    static boolean strikethrough;
  46.    static Dimension size = new Dimension();
  47.    static Rectangle draw_rect = new Rectangle();
  48.    Rectangle url_rect;
  49.    String url;
  50.    JCVector url_rect_list;
  51.    JCVector url_list;
  52.    public static final int ALIGN_LEFT = 0;
  53.    public static final int ALIGN_CENTER = 1;
  54.    public static final int ALIGN_RIGHT = 2;
  55.    int x_offset;
  56.    int y_offset;
  57.    static boolean has_url;
  58.  
  59.    public JCString() {
  60.    }
  61.  
  62.    public JCString(int var1) {
  63.       super(var1);
  64.    }
  65.  
  66.    public JCString(String var1) {
  67.       super(1);
  68.       this.addString(var1);
  69.    }
  70.  
  71.    public JCString(String var1, Image var2, int var3) {
  72.       this(5);
  73.       if (var1 == null) {
  74.          this.add(var2);
  75.       } else if (var2 == null) {
  76.          this.add(var1);
  77.       } else {
  78.          switch (var3) {
  79.             case 0:
  80.                this.add(var1);
  81.                this.add(MIDDLE);
  82.                this.add(HORIZ_SPACE);
  83.                this.add(var2);
  84.                return;
  85.             case 1:
  86.             default:
  87.                this.add(var2);
  88.                this.add(MIDDLE);
  89.                this.add(HORIZ_SPACE);
  90.                this.add(var1);
  91.                return;
  92.             case 2:
  93.                this.add(var1);
  94.                this.add(NEWLINE);
  95.                this.add(VERT_SPACE);
  96.                this.add(new Integer(5));
  97.                this.add(var2);
  98.                return;
  99.             case 3:
  100.                this.add(var2);
  101.                this.add(NEWLINE);
  102.                this.add(VERT_SPACE);
  103.                this.add(new Integer(5));
  104.                this.add(var1);
  105.          }
  106.       }
  107.    }
  108.  
  109.    private void addString(String var1) {
  110.       int var2 = 0;
  111.  
  112.       int var4;
  113.       for(var4 = 0; (var4 = var1.indexOf("\n", var2)) != -1; var2 = var4 + 1) {
  114.          ((Vector)this).addElement(var1.substring(var2, var4));
  115.          ((Vector)this).addElement(NEWLINE);
  116.       }
  117.  
  118.       ((Vector)this).addElement(var1.substring(var2));
  119.    }
  120.  
  121.    private boolean isValue(Object var1) {
  122.       return var1 instanceof Integer && (Integer)var1 >= 0;
  123.    }
  124.  
  125.    public void add(Object var1) {
  126.       if (var1 != null) {
  127.          if (var1 instanceof String) {
  128.             this.addString((String)var1);
  129.          } else {
  130.             ((Vector)this).addElement(var1);
  131.          }
  132.       }
  133.    }
  134.  
  135.    public void add(int var1) {
  136.       ((Vector)this).addElement(new Integer(var1));
  137.    }
  138.  
  139.    public void add(int var1, Object var2) {
  140.       this.add(var1);
  141.       this.add(var2);
  142.    }
  143.  
  144.    private void init() {
  145.       strikethrough = false;
  146.       underline = false;
  147.    }
  148.  
  149.    private static void parseToken(Component var0, JCString var1, String var2) {
  150.       if (var2 != null) {
  151.          String var3 = null;
  152.          String var4 = var2;
  153.          int var5 = var2.indexOf(61);
  154.          if (var5 != -1) {
  155.             var4 = var2.substring(0, var5);
  156.             var3 = var2.substring(var5 + 1);
  157.          }
  158.  
  159.          if (var4.equalsIgnoreCase("DEFAULT_FONT")) {
  160.             var1.add(DEFAULT_FONT);
  161.          } else if (var4.equalsIgnoreCase("DEFAULT_COLOR")) {
  162.             var1.add(DEFAULT_COLOR);
  163.          } else if (!var4.equalsIgnoreCase("UNDERLINE") && !var4.equalsIgnoreCase("UL")) {
  164.             if (!var4.equalsIgnoreCase("/UNDERLINE") && !var4.equalsIgnoreCase("/UL")) {
  165.                if (!var4.equalsIgnoreCase("STRIKETHROUGH") && !var4.equalsIgnoreCase("ST")) {
  166.                   if (!var4.equalsIgnoreCase("/STRIKETHROUGH") && !var4.equalsIgnoreCase("/ST")) {
  167.                      if (var4.equalsIgnoreCase("HREF")) {
  168.                         var1.add(HREF);
  169.                         var1.add(var3);
  170.                      } else if (var4.equalsIgnoreCase("/HREF")) {
  171.                         var1.add(END_HREF);
  172.                      } else {
  173.                         if (var4.equalsIgnoreCase("ALIGN")) {
  174.                            if (var3.equalsIgnoreCase("TOP")) {
  175.                               var1.add(TOP);
  176.                               return;
  177.                            }
  178.  
  179.                            if (var3.equalsIgnoreCase("MIDDLE")) {
  180.                               var1.add(MIDDLE);
  181.                               return;
  182.                            }
  183.  
  184.                            if (var3.equalsIgnoreCase("BOTTOM")) {
  185.                               var1.add(BOTTOM);
  186.                               return;
  187.                            }
  188.                         } else if (var4.equalsIgnoreCase("HORIZ_SPACE")) {
  189.                            var1.add(HORIZ_SPACE);
  190.                            if (var3 != null) {
  191.                               var1.add(Integer.valueOf(var3));
  192.                               return;
  193.                            }
  194.                         } else if (var4.equalsIgnoreCase("VERT_SPACE")) {
  195.                            var1.add(VERT_SPACE);
  196.                            if (var3 != null) {
  197.                               var1.add(Integer.valueOf(var3));
  198.                               return;
  199.                            }
  200.                         } else {
  201.                            if (var4.equalsIgnoreCase("RESET")) {
  202.                               var1.add(RESET);
  203.                               return;
  204.                            }
  205.  
  206.                            if (var4.equalsIgnoreCase("COLOR")) {
  207.                               if (var3 != null) {
  208.                                  if (var3.equalsIgnoreCase("DEFAULT")) {
  209.                                     var1.add(DEFAULT_COLOR);
  210.                                     return;
  211.                                  }
  212.  
  213.                                  var1.add(JCUtilConverter.toColor(var3));
  214.                                  return;
  215.                               }
  216.                            } else if (!var4.equalsIgnoreCase("IMAGE") && !var4.equalsIgnoreCase("IMG")) {
  217.                               if (var4.equalsIgnoreCase("FONT")) {
  218.                                  if (var3 != null) {
  219.                                     if (var3.equalsIgnoreCase("DEFAULT")) {
  220.                                        var1.add(DEFAULT_FONT);
  221.                                        return;
  222.                                     }
  223.  
  224.                                     var1.add(JCUtilConverter.toFont(var3));
  225.                                     return;
  226.                                  }
  227.                               } else if (var4.equalsIgnoreCase("NEWLINE")) {
  228.                                  var1.add(NEWLINE);
  229.                               }
  230.                            } else if (var3 != null) {
  231.                               Image var6 = JCUtilConverter.toImage(var0, var3);
  232.                               if (var6 != null) {
  233.                                  var1.add(new JCImage(var6, var3));
  234.                                  return;
  235.                               }
  236.                            }
  237.                         }
  238.  
  239.                      }
  240.                   } else {
  241.                      var1.add(END_STRIKETHROUGH);
  242.                   }
  243.                } else {
  244.                   var1.add(STRIKETHROUGH);
  245.                }
  246.             } else {
  247.                var1.add(END_UNDERLINE);
  248.             }
  249.          } else {
  250.             var1.add(UNDERLINE);
  251.          }
  252.       }
  253.    }
  254.  
  255.    public static JCString parse(Component var0, String var1) {
  256.       if (var1 == null) {
  257.          return null;
  258.       } else {
  259.          JCString var2 = new JCString();
  260.          JCStringTokenizer var3 = new JCStringTokenizer(var1);
  261.  
  262.          while(var3.hasMoreTokens()) {
  263.             String var4 = var3.nextToken('[');
  264.             var2.add(var4);
  265.             if (var3.hasMoreTokens()) {
  266.                var4 = var3.nextToken(']').trim();
  267.                parseToken(var0, var2, var4);
  268.             }
  269.          }
  270.  
  271.          return var2;
  272.       }
  273.    }
  274.  
  275.    public static Applet getApplet(Component var0) {
  276.       if (var0 == null) {
  277.          return null;
  278.       } else {
  279.          Container var1 = var0.getParent();
  280.  
  281.          Container var2;
  282.          for(var2 = var0.getParent(); var2 != null && !(var2 instanceof Applet); var1 = var1 == null ? null : ((Component)var1).getParent()) {
  283.             var2 = var1;
  284.          }
  285.  
  286.          return (Applet)var2;
  287.       }
  288.    }
  289.  
  290.    private boolean addImage(Applet var1, URL var2, String var3) {
  291.       MediaTracker var4 = new MediaTracker(var1);
  292.       Image var5 = var1.getImage(var2, var3);
  293.       var4.addImage(var5, 0);
  294.  
  295.       try {
  296.          var4.waitForAll();
  297.       } catch (InterruptedException var6) {
  298.          return false;
  299.       }
  300.  
  301.       this.add(var5);
  302.       return true;
  303.    }
  304.  
  305.    public boolean addImage(Applet var1, String var2) {
  306.       return this.addImage(var1, var1.getDocumentBase(), var2);
  307.    }
  308.  
  309.    public boolean addImage(Applet var1, String var2, String var3) {
  310.       try {
  311.          this.addImage(var1, new URL(var2), var3);
  312.          return true;
  313.       } catch (Exception var4) {
  314.          return false;
  315.       }
  316.    }
  317.  
  318.    public int getHeight(Component var1, Font var2) {
  319.       return this.getSize(var1, var2).height;
  320.    }
  321.  
  322.    public int getWidth(Component var1, Font var2) {
  323.       return this.getSize(var1, var2).width;
  324.    }
  325.  
  326.    public Dimension getSize(Component var1, Font var2) {
  327.       Dimension var3 = new Dimension();
  328.       int var4 = 0;
  329.       int var5 = 0;
  330.       int var6 = 0;
  331.       if (var2 == null) {
  332.          var2 = var1.getFont();
  333.       }
  334.  
  335.       strikethrough = false;
  336.  
  337.       for(underline = false; (var4 = this.getLineSize(var1, var2, var4, var3)) != -1; var6 += var3.height) {
  338.          var5 = Math.max(var5, var3.width);
  339.       }
  340.  
  341.       var3.width = var5;
  342.       var3.height = var6;
  343.       return var3;
  344.    }
  345.  
  346.    static int stringWidth(FontMetrics var0, Font var1, String var2) {
  347.       return var0.stringWidth(var2) + (var1.isItalic() ? var1.getSize() / 3 + 1 : 0);
  348.    }
  349.  
  350.    public int getLineSize(Component var1, Font var2, int var3, Dimension var4) {
  351.       if (var3 >= ((Vector)this).size()) {
  352.          return -1;
  353.       } else {
  354.          int var6 = 0;
  355.          int var7 = 0;
  356.          int var8 = 0;
  357.          int var9 = 0;
  358.          int var10 = 0;
  359.          Graphics var11 = var1.getGraphics();
  360.  
  361.          int var5;
  362.          for(var5 = var3; var5 >= 0; --var5) {
  363.             if (super.elementData[var5] instanceof Font) {
  364.                var11.setFont((Font)super.elementData[var5]);
  365.                break;
  366.             }
  367.  
  368.             if (super.elementData[var5].equals(DEFAULT_FONT)) {
  369.                var11.setFont(var2);
  370.                break;
  371.             }
  372.          }
  373.  
  374.          if (var5 < 0 && var2 != null) {
  375.             var11.setFont(var2);
  376.          }
  377.  
  378.          FontMetrics var12 = var11.getFontMetrics();
  379.  
  380.          for(var5 = var3; var5 < ((Vector)this).size(); ++var5) {
  381.             if (super.elementData[var5] instanceof String) {
  382.                var10 = Math.max(var10, var12.getHeight());
  383.                Font var13 = var11.getFont();
  384.                String var14 = (String)super.elementData[var5];
  385.                var9 += var12.stringWidth(var14) + (var13.isItalic() ? var13.getSize() / 3 + 1 : 0);
  386.             } else if (super.elementData[var5] instanceof Font) {
  387.                var11.setFont((Font)super.elementData[var5]);
  388.                var12 = var11.getFontMetrics();
  389.             } else if (super.elementData[var5] instanceof Image) {
  390.                Image var16 = (Image)super.elementData[var5];
  391.                var10 = Math.max(var10, var16.getHeight((ImageObserver)null));
  392.                var9 += var16.getWidth((ImageObserver)null);
  393.             } else if (super.elementData[var5] instanceof JCImage) {
  394.                Image var17 = ((JCImage)super.elementData[var5]).image;
  395.                var10 = Math.max(var10, var17.getHeight((ImageObserver)null));
  396.                var9 += var17.getWidth((ImageObserver)null);
  397.             } else if (super.elementData[var5].equals(HREF)) {
  398.                ++var5;
  399.             } else if (super.elementData[var5].equals(DEFAULT_FONT)) {
  400.                var11.setFont(var2);
  401.                var12 = var11.getFontMetrics();
  402.             } else if (super.elementData[var5].equals(HORIZ_SPACE)) {
  403.                if (var5 < ((Vector)this).size() - 1) {
  404.                   Object var18 = super.elementData[var5 + 1];
  405.                   if (var18 instanceof Integer && ((Integer)var18 >= 0 || false)) {
  406.                      ++var5;
  407.                      var9 += (Integer)super.elementData[var5];
  408.                      continue;
  409.                   }
  410.                }
  411.  
  412.                var9 += 10;
  413.             } else if (super.elementData[var5].equals(VERT_SPACE)) {
  414.                if (var5 < ((Vector)this).size() - 1) {
  415.                   Object var19 = super.elementData[var5 + 1];
  416.                   if (var19 instanceof Integer && ((Integer)var19 >= 0 || false)) {
  417.                      ++var5;
  418.                      var6 = (Integer)super.elementData[var5];
  419.                      continue;
  420.                   }
  421.                }
  422.  
  423.                var6 = 10;
  424.             } else if (super.elementData[var5].equals(NEWLINE)) {
  425.                var7 += var10;
  426.                var8 = Math.max(var8, var9);
  427.                var9 = 0;
  428.                var10 = 0;
  429.                break;
  430.             }
  431.          }
  432.  
  433.          var4.width = Math.max(var8, var9);
  434.          var4.height = var7 + var10 + var6;
  435.          return var5 + 1;
  436.       }
  437.    }
  438.  
  439.    int getVertSpace(int var1, int var2) {
  440.       for(int var3 = var1; var3 < var2 && var3 < ((Vector)this).size(); ++var3) {
  441.          if (super.elementData[var3].equals(VERT_SPACE)) {
  442.             if (var3 < ((Vector)this).size() - 1) {
  443.                Object var4 = super.elementData[var3 + 1];
  444.                if (var4 instanceof Integer && ((Integer)var4 >= 0 || false)) {
  445.                   ++var3;
  446.                   return (Integer)super.elementData[var3];
  447.                }
  448.             }
  449.  
  450.             return 10;
  451.          }
  452.       }
  453.  
  454.       return 0;
  455.    }
  456.  
  457.    public void draw(Component var1, Graphics var2, Rectangle var3, int var4) {
  458.       int var5 = 0;
  459.       int var7 = var3.y;
  460.       this.url = null;
  461.       this.url_list = this.url_rect_list = null;
  462.       Font var8 = var2.getFont();
  463.       strikethrough = false;
  464.  
  465.       int var6;
  466.       for(underline = false; (var6 = this.getLineSize(var1, var8, var5, size)) != -1; var7 += size.height) {
  467.          int var9 = this.getVertSpace(var5, var6);
  468.          Dimension var10000 = size;
  469.          var10000.height -= var9;
  470.          var7 += var9;
  471.          draw_rect.reshape(var3.x, var7, size.width, size.height);
  472.          if (var4 == 1) {
  473.             Rectangle var11 = draw_rect;
  474.             var11.x += (var3.width - size.width) / 2;
  475.          } else if (var4 == 2) {
  476.             Rectangle var12 = draw_rect;
  477.             var12.x += var3.width - size.width;
  478.          }
  479.  
  480.          this.drawLine(var1, var2, var8, draw_rect, var5, var6);
  481.          var5 = var6;
  482.       }
  483.  
  484.    }
  485.  
  486.    public void setURLoffset(int var1, int var2) {
  487.       this.x_offset = var1;
  488.       this.y_offset = var2;
  489.    }
  490.  
  491.    private void startURL(int var1, int var2) {
  492.       this.url_rect = new Rectangle();
  493.       this.url_rect.x = var1;
  494.       this.url_rect.y = var2;
  495.       if (this.url_list == null) {
  496.          this.url_list = new JCVector();
  497.       }
  498.  
  499.       if (this.url_rect_list == null) {
  500.          this.url_rect_list = new JCVector();
  501.       }
  502.  
  503.    }
  504.  
  505.    private void endURL(Graphics var1, int var2, int var3) {
  506.       this.url_list.addElement(this.url);
  507.       this.url_rect.width = var2 - this.url_rect.x;
  508.       this.url_rect.height = var3 - this.url_rect.y;
  509.       this.url_rect.translate(this.x_offset, this.y_offset);
  510.       this.url_rect_list.addElement(this.url_rect);
  511.    }
  512.  
  513.    void drawLine(Component var1, Graphics var2, Font var3, Rectangle var4, int var5, int var6) {
  514.       Integer var7 = BOTTOM;
  515.       FontMetrics var8 = var2.getFontMetrics();
  516.       int var9 = var4.x;
  517.       int var10 = var4.y;
  518.  
  519.       for(int var11 = var5; var11 < var6 && var11 < ((Vector)this).size(); ++var11) {
  520.          if (super.elementData[var11] instanceof String) {
  521.             int var12 = var8.getHeight();
  522.             int var13 = var12 - var8.getAscent();
  523.             if (var7.equals(BOTTOM)) {
  524.                var10 = var4.y + var4.height - var13;
  525.             } else if (var7.equals(MIDDLE)) {
  526.                var10 = var4.y + (var4.height - var12) / 2 + var12 - var13;
  527.             } else if (var7.equals(TOP)) {
  528.                var10 = var4.y + var12 - var13;
  529.             }
  530.  
  531.             var2.drawString((String)super.elementData[var11], var9, var10);
  532.             if (this.url != null) {
  533.                this.startURL(var9, var10 - var12 + var13);
  534.             }
  535.  
  536.             Font var14 = var2.getFont();
  537.             String var15 = (String)super.elementData[var11];
  538.             int var19 = var8.stringWidth(var15) + (var14.isItalic() ? var14.getSize() / 3 + 1 : 0);
  539.             if (underline) {
  540.                var2.drawLine(var9, var10 + 1, var9 + var19, var10 + 1);
  541.             }
  542.  
  543.             if (strikethrough) {
  544.                var2.drawLine(var9, var10 - var12 / 2 + 3, var9 + var19, var10 - var12 / 2 + 3);
  545.             }
  546.  
  547.             var9 += var19;
  548.             if (this.url != null) {
  549.                this.endURL(var2, var9, var10 + var13);
  550.             }
  551.          } else if (!(super.elementData[var11] instanceof Image) && !(super.elementData[var11] instanceof JCImage)) {
  552.             if (super.elementData[var11] instanceof Font) {
  553.                var2.setFont((Font)super.elementData[var11]);
  554.                var8 = var2.getFontMetrics();
  555.             } else if (super.elementData[var11].equals(DEFAULT_FONT)) {
  556.                var2.setFont(var3);
  557.                var8 = var2.getFontMetrics();
  558.             } else if (super.elementData[var11].equals(DEFAULT_COLOR)) {
  559.                var2.setColor(var1.getForeground());
  560.             } else if (super.elementData[var11].equals(HREF)) {
  561.                underline = true;
  562.                ++var11;
  563.                this.url = (String)super.elementData[var11];
  564.             } else if (super.elementData[var11].equals(UNDERLINE)) {
  565.                underline = true;
  566.             } else if (super.elementData[var11].equals(END_UNDERLINE)) {
  567.                underline = false;
  568.             } else if (super.elementData[var11].equals(END_HREF)) {
  569.                underline = false;
  570.                this.url = null;
  571.             } else if (super.elementData[var11].equals(STRIKETHROUGH)) {
  572.                strikethrough = true;
  573.             } else if (super.elementData[var11].equals(END_STRIKETHROUGH)) {
  574.                strikethrough = false;
  575.             } else if (super.elementData[var11].equals(TOP)) {
  576.                var7 = TOP;
  577.             } else if (super.elementData[var11].equals(MIDDLE)) {
  578.                var7 = MIDDLE;
  579.             } else if (super.elementData[var11].equals(BOTTOM)) {
  580.                var7 = BOTTOM;
  581.             } else if (super.elementData[var11].equals(HORIZ_SPACE)) {
  582.                if (var11 < ((Vector)this).size() - 1) {
  583.                   Object var17 = super.elementData[var11 + 1];
  584.                   if (var17 instanceof Integer && ((Integer)var17 >= 0 || false)) {
  585.                      ++var11;
  586.                      var9 += (Integer)super.elementData[var11];
  587.                      continue;
  588.                   }
  589.                }
  590.  
  591.                var9 += 10;
  592.             } else if (super.elementData[var11].equals(RESET)) {
  593.                if (this.url == null) {
  594.                   underline = false;
  595.                }
  596.  
  597.                strikethrough = false;
  598.                var7 = BOTTOM;
  599.                var2.setColor(var1.getForeground());
  600.                var2.setFont(var3);
  601.                var8 = var2.getFontMetrics();
  602.             } else if (super.elementData[var11] instanceof Color) {
  603.                var2.setColor((Color)super.elementData[var11]);
  604.             } else if (super.elementData[var11].equals(NEWLINE)) {
  605.                return;
  606.             }
  607.          } else {
  608.             Object var16 = super.elementData[var11];
  609.             Image var18 = var16 instanceof Image ? (Image)var16 : ((JCImage)var16).image;
  610.             if (this.url != null) {
  611.                this.startURL(var9, var4.y);
  612.             }
  613.  
  614.             var2.drawImage(var18, var9, var4.y, (ImageObserver)null);
  615.             var9 += var18.getWidth((ImageObserver)null);
  616.             if (this.url != null) {
  617.                this.endURL(var2, var9, var4.y + var4.height);
  618.             }
  619.          }
  620.       }
  621.  
  622.    }
  623.  
  624.    public String getURL(int var1, int var2) {
  625.       if (this.url_rect_list != null) {
  626.          for(int var3 = 0; var3 < this.url_rect_list.size(); ++var3) {
  627.             if (((Rectangle)this.url_rect_list.elementAt(var3)).inside(var1, var2)) {
  628.                return (String)this.url_list.elementAt(var3);
  629.             }
  630.          }
  631.       }
  632.  
  633.       return null;
  634.    }
  635.  
  636.    public static String getURL(Applet var0, Object var1, int var2, int var3) {
  637.       String var4 = null;
  638.       if (var0 != null) {
  639.          try {
  640.             if (var0.getAppletContext() == null) {
  641.                var0 = null;
  642.             }
  643.          } catch (Exception var6) {
  644.             var0 = null;
  645.          }
  646.       }
  647.  
  648.       if (var1 instanceof JCString) {
  649.          var4 = ((JCString)var1).getURL(var2, var3);
  650.          if (var4 != null && var0 != null) {
  651.             int var5 = Math.max(var4.indexOf("TARGET="), var4.indexOf("target="));
  652.             if (var5 == -1) {
  653.                var0.showStatus(var4);
  654.             } else {
  655.                var0.showStatus(var4.substring(0, var5));
  656.             }
  657.          }
  658.  
  659.          has_url = true;
  660.       }
  661.  
  662.       if (var0 != null && has_url && var4 == null) {
  663.          var0.showStatus((String)null);
  664.       }
  665.  
  666.       if (var4 == null) {
  667.          has_url = false;
  668.       }
  669.  
  670.       return var4;
  671.    }
  672.  
  673.    public static boolean showURL(String var0, AppletContext var1, Applet var2) {
  674.       if (var0 != null && var1 != null) {
  675.          int var3 = var0.indexOf("TARGET=");
  676.          String var4 = var3 == -1 ? var0 : var0.substring(0, var3);
  677.          String var5 = var3 == -1 ? null : var0.substring(var3 + 7);
  678.  
  679.          try {
  680.             URL var6 = new URL(var2.getDocumentBase(), var4);
  681.             if (var5 == null) {
  682.                var1.showDocument(var6);
  683.             } else {
  684.                var1.showDocument(var6, var5);
  685.             }
  686.  
  687.             return true;
  688.          } catch (Exception var7) {
  689.             var2.showStatus("Invalid URL");
  690.             return false;
  691.          }
  692.       } else {
  693.          return false;
  694.       }
  695.    }
  696.  
  697.    public String getString() {
  698.       String var1 = new String();
  699.  
  700.       for(int var2 = 0; var2 < ((Vector)this).size(); ++var2) {
  701.          if (super.elementData[var2].equals(HREF)) {
  702.             ++var2;
  703.          } else if (super.elementData[var2] instanceof String) {
  704.             var1 = var1.concat((String)super.elementData[var2]);
  705.          } else if (super.elementData[var2].equals(NEWLINE)) {
  706.             var1 = var1.concat("\n");
  707.          }
  708.       }
  709.  
  710.       return var1;
  711.    }
  712.  
  713.    public Image getImage() {
  714.       for(int var1 = 0; var1 < ((Vector)this).size(); ++var1) {
  715.          if (super.elementData[var1] instanceof Image) {
  716.             return (Image)super.elementData[var1];
  717.          }
  718.  
  719.          if (super.elementData[var1] instanceof JCImage) {
  720.             return ((JCImage)super.elementData[var1]).image;
  721.          }
  722.       }
  723.  
  724.       return null;
  725.    }
  726.  
  727.    public String toString2() {
  728.       StringBuffer var1 = new StringBuffer();
  729.  
  730.       for(int var2 = 0; var2 < ((Vector)this).size(); ++var2) {
  731.          Object var3 = ((Vector)this).elementAt(var2);
  732.          String var4 = "";
  733.          if (var3 instanceof String) {
  734.             var4 = var3.toString();
  735.          } else if (var3 == DEFAULT_FONT) {
  736.             var4 = "[DEFAULT_FONT]";
  737.          } else if (var3 == DEFAULT_COLOR) {
  738.             var4 = "[DEFAULT_COLOR]";
  739.          } else if (var3 == UNDERLINE) {
  740.             var4 = "[UL]";
  741.          } else if (var3 == END_UNDERLINE) {
  742.             var4 = "[/UL]";
  743.          } else if (var3 == STRIKETHROUGH) {
  744.             var4 = "[ST]";
  745.          } else if (var3 == END_STRIKETHROUGH) {
  746.             var4 = "[/ST]";
  747.          } else if (var3 == HREF) {
  748.             StringBuffer var10000 = new StringBuffer("[HREF=");
  749.             ++var2;
  750.             var4 = var10000.append(((Vector)this).elementAt(var2)).append("]").toString();
  751.          } else if (var3 == END_HREF) {
  752.             var4 = "[/HREF]";
  753.          } else if (var3 == TOP) {
  754.             var4 = "[ALIGN=TOP]";
  755.          } else if (var3 == MIDDLE) {
  756.             var4 = "[ALIGN=MIDDLE]";
  757.          } else if (var3 == BOTTOM) {
  758.             var4 = "[ALIGN=BOTTOM]";
  759.          } else if (var3 == HORIZ_SPACE) {
  760.             var4 = "[HORIZ_SPACE";
  761.             if (var2 < ((Vector)this).size() - 1) {
  762.                Object var5 = super.elementData[var2 + 1];
  763.                if (var5 instanceof Integer && ((Integer)var5 >= 0 || false)) {
  764.                   StringBuffer var9 = (new StringBuffer(String.valueOf(var4))).append("=");
  765.                   ++var2;
  766.                   var4 = var9.append(super.elementData[var2]).toString();
  767.                }
  768.             }
  769.  
  770.             var4 = var4 + "]";
  771.          } else if (var3 == VERT_SPACE) {
  772.             var4 = "[VERT_SPACE";
  773.             if (var2 < ((Vector)this).size() - 1) {
  774.                Object var8 = super.elementData[var2 + 1];
  775.                if (var8 instanceof Integer && ((Integer)var8 >= 0 || false)) {
  776.                   StringBuffer var10 = (new StringBuffer(String.valueOf(var4))).append("=");
  777.                   ++var2;
  778.                   var4 = var10.append(super.elementData[var2]).toString();
  779.                }
  780.             }
  781.  
  782.             var4 = var4 + "]";
  783.          } else if (var3 == RESET) {
  784.             var4 = "[RESET]";
  785.          } else if (var3 == DEFAULT_COLOR) {
  786.             var4 = "[COLOR=DEFAULT]";
  787.          } else if (var3 instanceof Color) {
  788.             var4 = "[COLOR=" + JCUtilConverter.fromColor((Color)var3) + "]";
  789.          } else if (var3 instanceof Image) {
  790.             var4 = "";
  791.          } else if (var3 instanceof JCImage) {
  792.             var4 = "[IMG=" + ((JCImage)var3).file + "]";
  793.          } else if (var3 == DEFAULT_FONT) {
  794.             var4 = "[FONT=DEFAULT]";
  795.          } else if (var3 instanceof Font) {
  796.             var4 = "[FONT=" + JCUtilConverter.fromFont((Font)var3) + "]";
  797.          } else if (var3 == NEWLINE) {
  798.             var4 = "[NEWLINE]";
  799.          }
  800.  
  801.          var1.append(var4);
  802.       }
  803.  
  804.       return var1.toString();
  805.    }
  806. }
  807.