mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			1254 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			1254 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			Java
		
	
	
	
/* HTML.java -- HTML document tag constants
 | 
						|
   Copyright (C) 2002 Free Software Foundation, Inc.
 | 
						|
 | 
						|
This file is part of GNU Classpath.
 | 
						|
 | 
						|
GNU Classpath is free software; you can redistribute it and/or modify
 | 
						|
it under the terms of the GNU General Public License as published by
 | 
						|
the Free Software Foundation; either version 2, or (at your option)
 | 
						|
any later version.
 | 
						|
 | 
						|
GNU Classpath is distributed in the hope that it will be useful, but
 | 
						|
WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
General Public License for more details.
 | 
						|
 | 
						|
You should have received a copy of the GNU General Public License
 | 
						|
along with GNU Classpath; see the file COPYING.  If not, write to the
 | 
						|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
						|
02110-1301 USA.
 | 
						|
 | 
						|
Linking this library statically or dynamically with other modules is
 | 
						|
making a combined work based on this library.  Thus, the terms and
 | 
						|
conditions of the GNU General Public License cover the whole
 | 
						|
combination.
 | 
						|
 | 
						|
As a special exception, the copyright holders of this library give you
 | 
						|
permission to link this library with independent modules to produce an
 | 
						|
executable, regardless of the license terms of these independent
 | 
						|
modules, and to copy and distribute the resulting executable under
 | 
						|
terms of your choice, provided that you also meet, for each linked
 | 
						|
independent module, the terms and conditions of the license of that
 | 
						|
module.  An independent module is a module which is not derived from
 | 
						|
or based on this library.  If you modify this library, you may extend
 | 
						|
this exception to your version of the library, but you are not
 | 
						|
obligated to do so.  If you do not wish to do so, delete this
 | 
						|
exception statement from your version. */
 | 
						|
 | 
						|
 | 
						|
package javax.swing.text.html;
 | 
						|
 | 
						|
import java.io.Serializable;
 | 
						|
 | 
						|
import java.lang.reflect.Field;
 | 
						|
import java.lang.reflect.Modifier;
 | 
						|
 | 
						|
import java.util.Map;
 | 
						|
import java.util.TreeMap;
 | 
						|
 | 
						|
import javax.swing.text.AttributeSet;
 | 
						|
 | 
						|
/**
 | 
						|
 * HTML attribute and tag definitions.
 | 
						|
 * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
 | 
						|
 */
 | 
						|
public class HTML
 | 
						|
{
 | 
						|
  /**
 | 
						|
   * Represents a HTML attribute.
 | 
						|
   */
 | 
						|
  public static final class Attribute
 | 
						|
  {
 | 
						|
    /**
 | 
						|
     * The action attribute
 | 
						|
     */
 | 
						|
    public static final Attribute ACTION = new Attribute("action");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The align attribute
 | 
						|
     */
 | 
						|
    public static final Attribute ALIGN = new Attribute("align");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The alink attribute
 | 
						|
     */
 | 
						|
    public static final Attribute ALINK = new Attribute("alink");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The alt attribute
 | 
						|
     */
 | 
						|
    public static final Attribute ALT = new Attribute("alt");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The archive attribute
 | 
						|
     */
 | 
						|
    public static final Attribute ARCHIVE = new Attribute("archive");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The background attribute
 | 
						|
     */
 | 
						|
    public static final Attribute BACKGROUND = new Attribute("background");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The bgcolor attribute
 | 
						|
     */
 | 
						|
    public static final Attribute BGCOLOR = new Attribute("bgcolor");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The border attribute
 | 
						|
     */
 | 
						|
    public static final Attribute BORDER = new Attribute("border");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The cellpadding attribute
 | 
						|
     */
 | 
						|
    public static final Attribute CELLPADDING = new Attribute("cellpadding");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The cellspacing attribute
 | 
						|
     */
 | 
						|
    public static final Attribute CELLSPACING = new Attribute("cellspacing");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The checked attribute
 | 
						|
     */
 | 
						|
    public static final Attribute CHECKED = new Attribute("checked");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The class attribute
 | 
						|
     */
 | 
						|
    public static final Attribute CLASS = new Attribute("class");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The classid attribute
 | 
						|
     */
 | 
						|
    public static final Attribute CLASSID = new Attribute("classid");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The clear attribute
 | 
						|
     */
 | 
						|
    public static final Attribute CLEAR = new Attribute("clear");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The code attribute
 | 
						|
     */
 | 
						|
    public static final Attribute CODE = new Attribute("code");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The codebase attribute
 | 
						|
     */
 | 
						|
    public static final Attribute CODEBASE = new Attribute("codebase");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The codetype attribute
 | 
						|
     */
 | 
						|
    public static final Attribute CODETYPE = new Attribute("codetype");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The color attribute
 | 
						|
     */
 | 
						|
    public static final Attribute COLOR = new Attribute("color");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The cols attribute
 | 
						|
     */
 | 
						|
    public static final Attribute COLS = new Attribute("cols");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The colspan attribute
 | 
						|
     */
 | 
						|
    public static final Attribute COLSPAN = new Attribute("colspan");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The comment attribute
 | 
						|
     */
 | 
						|
    public static final Attribute COMMENT = new Attribute("comment");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The compact attribute
 | 
						|
     */
 | 
						|
    public static final Attribute COMPACT = new Attribute("compact");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The content attribute
 | 
						|
     */
 | 
						|
    public static final Attribute CONTENT = new Attribute("content");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The coords attribute
 | 
						|
     */
 | 
						|
    public static final Attribute COORDS = new Attribute("coords");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The data attribute
 | 
						|
     */
 | 
						|
    public static final Attribute DATA = new Attribute("data");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The declare attribute
 | 
						|
     */
 | 
						|
    public static final Attribute DECLARE = new Attribute("declare");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The dir attribute
 | 
						|
     */
 | 
						|
    public static final Attribute DIR = new Attribute("dir");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The dummy attribute
 | 
						|
     */
 | 
						|
    public static final Attribute DUMMY = new Attribute("dummy");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The enctype attribute
 | 
						|
     */
 | 
						|
    public static final Attribute ENCTYPE = new Attribute("enctype");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The endtag attribute
 | 
						|
     */
 | 
						|
    public static final Attribute ENDTAG = new Attribute("endtag");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The face attribute
 | 
						|
     */
 | 
						|
    public static final Attribute FACE = new Attribute("face");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The frameborder attribute
 | 
						|
     */
 | 
						|
    public static final Attribute FRAMEBORDER = new Attribute("frameborder");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The halign attribute
 | 
						|
     */
 | 
						|
    public static final Attribute HALIGN = new Attribute("halign");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The height attribute
 | 
						|
     */
 | 
						|
    public static final Attribute HEIGHT = new Attribute("height");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The href attribute
 | 
						|
     */
 | 
						|
    public static final Attribute HREF = new Attribute("href");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The hspace attribute
 | 
						|
     */
 | 
						|
    public static final Attribute HSPACE = new Attribute("hspace");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The http-equiv attribute
 | 
						|
     */
 | 
						|
    public static final Attribute HTTPEQUIV = new Attribute("http-equiv");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The id attribute
 | 
						|
     */
 | 
						|
    public static final Attribute ID = new Attribute("id");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The ismap attribute
 | 
						|
     */
 | 
						|
    public static final Attribute ISMAP = new Attribute("ismap");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The lang attribute
 | 
						|
     */
 | 
						|
    public static final Attribute LANG = new Attribute("lang");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The language attribute
 | 
						|
     */
 | 
						|
    public static final Attribute LANGUAGE = new Attribute("language");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The link attribute
 | 
						|
     */
 | 
						|
    public static final Attribute LINK = new Attribute("link");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The lowsrc attribute
 | 
						|
     */
 | 
						|
    public static final Attribute LOWSRC = new Attribute("lowsrc");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The marginheight attribute
 | 
						|
     */
 | 
						|
    public static final Attribute MARGINHEIGHT = new Attribute("marginheight");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The marginwidth attribute
 | 
						|
     */
 | 
						|
    public static final Attribute MARGINWIDTH = new Attribute("marginwidth");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The maxlength attribute
 | 
						|
     */
 | 
						|
    public static final Attribute MAXLENGTH = new Attribute("maxlength");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The media attribute
 | 
						|
     */
 | 
						|
    static final Attribute MEDIA = new Attribute("media");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The method attribute
 | 
						|
     */
 | 
						|
    public static final Attribute METHOD = new Attribute("method");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The multiple attribute
 | 
						|
     */
 | 
						|
    public static final Attribute MULTIPLE = new Attribute("multiple");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The n attribute
 | 
						|
     */
 | 
						|
    public static final Attribute N = new Attribute("n");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The name attribute
 | 
						|
     */
 | 
						|
    public static final Attribute NAME = new Attribute("name");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The nohref attribute
 | 
						|
     */
 | 
						|
    public static final Attribute NOHREF = new Attribute("nohref");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The noresize attribute
 | 
						|
     */
 | 
						|
    public static final Attribute NORESIZE = new Attribute("noresize");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The noshade attribute
 | 
						|
     */
 | 
						|
    public static final Attribute NOSHADE = new Attribute("noshade");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The nowrap attribute
 | 
						|
     */
 | 
						|
    public static final Attribute NOWRAP = new Attribute("nowrap");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The prompt attribute
 | 
						|
     */
 | 
						|
    public static final Attribute PROMPT = new Attribute("prompt");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The rel attribute
 | 
						|
     */
 | 
						|
    public static final Attribute REL = new Attribute("rel");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The rev attribute
 | 
						|
     */
 | 
						|
    public static final Attribute REV = new Attribute("rev");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The rows attribute
 | 
						|
     */
 | 
						|
    public static final Attribute ROWS = new Attribute("rows");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The rowspan attribute
 | 
						|
     */
 | 
						|
    public static final Attribute ROWSPAN = new Attribute("rowspan");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The scrolling attribute
 | 
						|
     */
 | 
						|
    public static final Attribute SCROLLING = new Attribute("scrolling");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The selected attribute
 | 
						|
     */
 | 
						|
    public static final Attribute SELECTED = new Attribute("selected");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The shape attribute
 | 
						|
     */
 | 
						|
    public static final Attribute SHAPE = new Attribute("shape");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The shapes attribute
 | 
						|
     */
 | 
						|
    public static final Attribute SHAPES = new Attribute("shapes");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The size attribute
 | 
						|
     */
 | 
						|
    public static final Attribute SIZE = new Attribute("size");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The src attribute
 | 
						|
     */
 | 
						|
    public static final Attribute SRC = new Attribute("src");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The standby attribute
 | 
						|
     */
 | 
						|
    public static final Attribute STANDBY = new Attribute("standby");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The start attribute
 | 
						|
     */
 | 
						|
    public static final Attribute START = new Attribute("start");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The style attribute
 | 
						|
     */
 | 
						|
    public static final Attribute STYLE = new Attribute("style");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The target attribute
 | 
						|
     */
 | 
						|
    public static final Attribute TARGET = new Attribute("target");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The text attribute
 | 
						|
     */
 | 
						|
    public static final Attribute TEXT = new Attribute("text");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The title attribute
 | 
						|
     */
 | 
						|
    public static final Attribute TITLE = new Attribute("title");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The type attribute
 | 
						|
     */
 | 
						|
    public static final Attribute TYPE = new Attribute("type");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The usemap attribute
 | 
						|
     */
 | 
						|
    public static final Attribute USEMAP = new Attribute("usemap");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The valign attribute
 | 
						|
     */
 | 
						|
    public static final Attribute VALIGN = new Attribute("valign");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The value attribute
 | 
						|
     */
 | 
						|
    public static final Attribute VALUE = new Attribute("value");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The valuetype attribute
 | 
						|
     */
 | 
						|
    public static final Attribute VALUETYPE = new Attribute("valuetype");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The version attribute
 | 
						|
     */
 | 
						|
    public static final Attribute VERSION = new Attribute("version");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The vlink attribute
 | 
						|
     */
 | 
						|
    public static final Attribute VLINK = new Attribute("vlink");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The vspace attribute
 | 
						|
     */
 | 
						|
    public static final Attribute VSPACE = new Attribute("vspace");
 | 
						|
 | 
						|
    /**
 | 
						|
     *  The width attribute
 | 
						|
     */
 | 
						|
    public static final Attribute WIDTH = new Attribute("width");
 | 
						|
 | 
						|
    /**
 | 
						|
     * This is used to reflect the pseudo class for the a tag.
 | 
						|
     */
 | 
						|
    static final Attribute PSEUDO_CLASS = new Attribute("_pseudo");
 | 
						|
 | 
						|
    /**
 | 
						|
     * This is used to reflect the dynamic class for the a tag.
 | 
						|
     */
 | 
						|
    static final Attribute DYNAMIC_CLASS = new Attribute("_dynamic");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The attribute name.
 | 
						|
     */
 | 
						|
    private final String name;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates the attribute with the given name.
 | 
						|
     */
 | 
						|
    private Attribute(String a_name)
 | 
						|
    {
 | 
						|
      name = a_name;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the attribute name. The names of the built-in attributes
 | 
						|
     * are always returned in lowercase.
 | 
						|
     */
 | 
						|
    public String toString()
 | 
						|
    {
 | 
						|
      return name;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     *  Return an array of all attributes, declared in the HTML.Attribute
 | 
						|
     *  class. WARNING: attributes are the only public fields,
 | 
						|
     *  expected in this class.
 | 
						|
     */
 | 
						|
    static Attribute[] getAllAttributes()
 | 
						|
    {
 | 
						|
      Field[] f = Attribute.class.getFields();
 | 
						|
      Attribute[] attrs = new Attribute[ f.length ];
 | 
						|
      Field x;
 | 
						|
      int p = 0;
 | 
						|
      Attribute a;
 | 
						|
 | 
						|
      for (int i = 0; i < f.length; i++)
 | 
						|
        {
 | 
						|
          x = f [ i ];
 | 
						|
 | 
						|
          if ((x.getModifiers() & Modifier.STATIC) != 0)
 | 
						|
            {
 | 
						|
              if (x.getType().equals(Attribute.class))
 | 
						|
                {
 | 
						|
                  try
 | 
						|
                    {
 | 
						|
                      a = (Attribute) x.get(null);
 | 
						|
                      attrs [ p++ ] = a;
 | 
						|
                    }
 | 
						|
                  catch (Exception ex)
 | 
						|
                    {
 | 
						|
                      ex.printStackTrace(System.err);
 | 
						|
                      throw new Error("This should never happen, report a bug");
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
      return attrs;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Represents a HTML tag.
 | 
						|
   */
 | 
						|
  public static class Tag
 | 
						|
  {
 | 
						|
    /**
 | 
						|
     * The <a> tag
 | 
						|
     */
 | 
						|
    public static final Tag A = new Tag("a");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <address> tag
 | 
						|
     */
 | 
						|
    public static final Tag ADDRESS = new Tag("address");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <applet> tag
 | 
						|
     */
 | 
						|
    public static final Tag APPLET = new Tag("applet");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <area> tag
 | 
						|
     */
 | 
						|
    public static final Tag AREA = new Tag("area");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <b> tag
 | 
						|
     */
 | 
						|
    public static final Tag B = new Tag("b");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <base> tag
 | 
						|
     */
 | 
						|
    public static final Tag BASE = new Tag("base");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <basefont> tag
 | 
						|
     */
 | 
						|
    public static final Tag BASEFONT = new Tag("basefont");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <big> tag
 | 
						|
     */
 | 
						|
    public static final Tag BIG = new Tag("big");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <blockquote> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag BLOCKQUOTE = new Tag("blockquote", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <body> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag BODY = new Tag("body", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <br> tag , breaks flow.
 | 
						|
     */
 | 
						|
    public static final Tag BR = new Tag("br", BREAKS);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <caption> tag
 | 
						|
     */
 | 
						|
    public static final Tag CAPTION = new Tag("caption");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <center> tag , breaks flow.
 | 
						|
     */
 | 
						|
    public static final Tag CENTER = new Tag("center", BREAKS);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <cite> tag
 | 
						|
     */
 | 
						|
    public static final Tag CITE = new Tag("cite");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <code> tag
 | 
						|
     */
 | 
						|
    public static final Tag CODE = new Tag("code");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <dd> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag DD = new Tag("dd", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <dfn> tag
 | 
						|
     */
 | 
						|
    public static final Tag DFN = new Tag("dfn");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <dir> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag DIR = new Tag("dir", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <div> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag DIV = new Tag("div", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <dl> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag DL = new Tag("dl", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <dt> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag DT = new Tag("dt", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <em> tag
 | 
						|
     */
 | 
						|
    public static final Tag EM = new Tag("em");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <font> tag
 | 
						|
     */
 | 
						|
    public static final Tag FONT = new Tag("font");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <form> tag , breaks flow.
 | 
						|
     */
 | 
						|
    public static final Tag FORM = new Tag("form", BREAKS);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <frame> tag
 | 
						|
     */
 | 
						|
    public static final Tag FRAME = new Tag("frame");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <frameset> tag
 | 
						|
     */
 | 
						|
    public static final Tag FRAMESET = new Tag("frameset");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <h1> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag H1 = new Tag("h1", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <h2> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag H2 = new Tag("h2", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <h3> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag H3 = new Tag("h3", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <h4> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag H4 = new Tag("h4", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <h5> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag H5 = new Tag("h5", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <h6> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag H6 = new Tag("h6", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <head> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag HEAD = new Tag("head", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <hr> tag , breaks flow.
 | 
						|
     */
 | 
						|
    public static final Tag HR = new Tag("hr", BREAKS);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <html> tag , breaks flow.
 | 
						|
     */
 | 
						|
    public static final Tag HTML = new Tag("html", BREAKS);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <i> tag
 | 
						|
     */
 | 
						|
    public static final Tag I = new Tag("i");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <img> tag
 | 
						|
     */
 | 
						|
    public static final Tag IMG = new Tag("img");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <input> tag
 | 
						|
     */
 | 
						|
    public static final Tag INPUT = new Tag("input");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <isindex> tag , breaks flow.
 | 
						|
     */
 | 
						|
    public static final Tag ISINDEX = new Tag("isindex", BREAKS);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <kbd> tag
 | 
						|
     */
 | 
						|
    public static final Tag KBD = new Tag("kbd");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <li> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag LI = new Tag("li", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <link> tag
 | 
						|
     */
 | 
						|
    public static final Tag LINK = new Tag("link");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <map> tag
 | 
						|
     */
 | 
						|
    public static final Tag MAP = new Tag("map");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <menu> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag MENU = new Tag("menu", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <meta> tag
 | 
						|
     */
 | 
						|
    public static final Tag META = new Tag("meta");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <nobr> tag
 | 
						|
     */
 | 
						|
    static final Tag NOBR = new Tag("nobr");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <noframes> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag NOFRAMES = new Tag("noframes", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <object> tag
 | 
						|
     */
 | 
						|
    public static final Tag OBJECT = new Tag("object");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <ol> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag OL = new Tag("ol", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <option> tag
 | 
						|
     */
 | 
						|
    public static final Tag OPTION = new Tag("option");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <p> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag P = new Tag("p", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <param> tag
 | 
						|
     */
 | 
						|
    public static final Tag PARAM = new Tag("param");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <pre> tag , breaks flow, block tag, preformatted.
 | 
						|
     */
 | 
						|
    public static final Tag PRE = new Tag("pre", BREAKS | BLOCK | PREFORMATTED);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <s> tag
 | 
						|
     */
 | 
						|
    public static final Tag S = new Tag("s");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <samp> tag
 | 
						|
     */
 | 
						|
    public static final Tag SAMP = new Tag("samp");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <script> tag
 | 
						|
     */
 | 
						|
    public static final Tag SCRIPT = new Tag("script");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <select> tag
 | 
						|
     */
 | 
						|
    public static final Tag SELECT = new Tag("select");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <small> tag
 | 
						|
     */
 | 
						|
    public static final Tag SMALL = new Tag("small");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <span> tag
 | 
						|
     */
 | 
						|
    public static final Tag SPAN = new Tag("span");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <strike> tag
 | 
						|
     */
 | 
						|
    public static final Tag STRIKE = new Tag("strike");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <strong> tag
 | 
						|
     */
 | 
						|
    public static final Tag STRONG = new Tag("strong");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <style> tag
 | 
						|
     */
 | 
						|
    public static final Tag STYLE = new Tag("style");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <sub> tag
 | 
						|
     */
 | 
						|
    public static final Tag SUB = new Tag("sub");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <sup> tag
 | 
						|
     */
 | 
						|
    public static final Tag SUP = new Tag("sup");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <table> tag , block tag.
 | 
						|
     */
 | 
						|
    public static final Tag TABLE = new Tag("table", BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <td> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag TD = new Tag("td", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <textarea> tag , preformatted.
 | 
						|
     */
 | 
						|
    public static final Tag TEXTAREA = new Tag("textarea", PREFORMATTED);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <th> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag TH = new Tag("th", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <title> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag TITLE = new Tag("title", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <tr> tag , block tag.
 | 
						|
     */
 | 
						|
    public static final Tag TR = new Tag("tr", BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <tt> tag
 | 
						|
     */
 | 
						|
    public static final Tag TT = new Tag("tt");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <u> tag
 | 
						|
     */
 | 
						|
    public static final Tag U = new Tag("u");
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <ul> tag , breaks flow, block tag.
 | 
						|
     */
 | 
						|
    public static final Tag UL = new Tag("ul", BREAKS | BLOCK);
 | 
						|
 | 
						|
    /**
 | 
						|
     * The <var> tag
 | 
						|
     */
 | 
						|
    public static final Tag VAR = new Tag("var");
 | 
						|
 | 
						|
    /* Special tags */
 | 
						|
 | 
						|
    /**
 | 
						|
     * Total number of syntetic tags, delared in the Tag class.
 | 
						|
     * This must be adjusted if the new synthetic tags are declared.
 | 
						|
     * Otherwise the HTML.getAllTags() will not work as expected.
 | 
						|
     */
 | 
						|
    private static final int TOTAL_SYNTHETIC_TAGS = 3;
 | 
						|
 | 
						|
    /**
 | 
						|
     * All comments are labeled with this tag.
 | 
						|
     * This tag is not included into the array, returned by getAllTags().
 | 
						|
     * toString() returns 'comment'. HTML reader synthesizes this tag.
 | 
						|
     */
 | 
						|
    public static final Tag COMMENT = new Tag("comment", SYNTHETIC);
 | 
						|
 | 
						|
    /**
 | 
						|
     *  All text content is labeled with this tag.
 | 
						|
     *  This tag is not included into the array, returned by getAllTags().
 | 
						|
     *  toString() returns 'content'. HTML reader synthesizes this tag.
 | 
						|
     */
 | 
						|
    public static final Tag CONTENT = new Tag("content", SYNTHETIC);
 | 
						|
 | 
						|
    /**
 | 
						|
     * All text content must be in a paragraph element.
 | 
						|
     * If a paragraph didn't exist when content was encountered,
 | 
						|
     * a paragraph is manufactured.
 | 
						|
     * toString() returns 'p-implied'. HTML reader synthesizes this tag.
 | 
						|
     */
 | 
						|
    public static final Tag IMPLIED = new Tag("p-implied", SYNTHETIC);
 | 
						|
    final String name;
 | 
						|
    final int flags;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create the unitialised instance of HTML.Tag.
 | 
						|
     *
 | 
						|
     * The {@link #breaksFlow()}, {@link #isBlock()}
 | 
						|
     * and {@link #isPreformatted()} will always return false.
 | 
						|
     * The {@link #toString()} will return <code>null</code>.
 | 
						|
     *
 | 
						|
     * @since 1.3
 | 
						|
     */
 | 
						|
    public Tag()
 | 
						|
    {
 | 
						|
      name = null;
 | 
						|
      flags = 0;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates a new Tag with the specified id, and with causesBreak
 | 
						|
     * and isBlock set to false.
 | 
						|
     */
 | 
						|
    protected Tag(String id)
 | 
						|
    {
 | 
						|
      name = id;
 | 
						|
      flags = 0;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates a new Tag with the specified tag name and
 | 
						|
     * causesBreak and isBlock properties.
 | 
						|
     */
 | 
						|
    protected Tag(String id, boolean causesBreak, boolean isBlock)
 | 
						|
    {
 | 
						|
      int f = 0;
 | 
						|
 | 
						|
      if (causesBreak)
 | 
						|
        {
 | 
						|
          f |= BREAKS;
 | 
						|
        }
 | 
						|
 | 
						|
      if (isBlock)
 | 
						|
        {
 | 
						|
          f |= BLOCK;
 | 
						|
        }
 | 
						|
 | 
						|
      flags = f;
 | 
						|
      name = id;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a tag taking flags.
 | 
						|
     */
 | 
						|
    Tag(String id, int a_flags)
 | 
						|
    {
 | 
						|
      name = id;
 | 
						|
      flags = a_flags;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns true if this tag is a block tag, which is a tag used to
 | 
						|
     * add structure to a document.
 | 
						|
     */
 | 
						|
    public boolean isBlock()
 | 
						|
    {
 | 
						|
      return (flags & BLOCK) != 0;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns true if this tag is pre-formatted, which is true if
 | 
						|
     * the tag is either PRE or TEXTAREA
 | 
						|
     */
 | 
						|
    public boolean isPreformatted()
 | 
						|
    {
 | 
						|
      return (flags & PREFORMATTED) != 0;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns true if this tag causes a line break to the flow of text
 | 
						|
     */
 | 
						|
    public boolean breaksFlow()
 | 
						|
    {
 | 
						|
      return (flags & BREAKS) != 0;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the tag name. The names of the built-in tags are always
 | 
						|
     * returned in lowercase.
 | 
						|
     */
 | 
						|
    public String toString()
 | 
						|
    {
 | 
						|
      return name;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Return an array of HTML tags, declared in HTML.Tag class.
 | 
						|
     * WARNING: This method expects that the Tags are the only
 | 
						|
     * public fields declared in the Tag class.
 | 
						|
     */
 | 
						|
    static Tag[] getAllTags()
 | 
						|
    {
 | 
						|
      Field[] f = Tag.class.getFields();
 | 
						|
      Field x;
 | 
						|
 | 
						|
      // The syntetic tags are not included.
 | 
						|
      Tag[] tags = new Tag[ f.length - TOTAL_SYNTHETIC_TAGS ];
 | 
						|
      int p = 0;
 | 
						|
      Tag t;
 | 
						|
 | 
						|
      for (int i = 0; i < f.length; i++)
 | 
						|
        {
 | 
						|
          x = f [ i ];
 | 
						|
 | 
						|
          if ((x.getModifiers() & Modifier.STATIC) != 0)
 | 
						|
            {
 | 
						|
              if (x.getType().equals(Tag.class))
 | 
						|
                {
 | 
						|
                  try
 | 
						|
                    {
 | 
						|
                      t = (Tag) x.get(null);
 | 
						|
 | 
						|
                      if (!t.isSyntetic())
 | 
						|
                        {
 | 
						|
                          tags [ p++ ] = t;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                  catch (IllegalAccessException ex)
 | 
						|
                    {
 | 
						|
                      unexpected(ex);
 | 
						|
                    }
 | 
						|
                  catch (IllegalArgumentException ex)
 | 
						|
                    {
 | 
						|
                      unexpected(ex);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
      return tags;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns true for tags, generated by the html reader
 | 
						|
     * (COMMENT, CONTENT and IMPLIED).
 | 
						|
     */
 | 
						|
    boolean isSyntetic()
 | 
						|
    {
 | 
						|
      return (flags & SYNTHETIC) != 0;
 | 
						|
    }
 | 
						|
 | 
						|
    private static void unexpected(Exception ex)
 | 
						|
                            throws Error
 | 
						|
    {
 | 
						|
      throw new Error("This should never happen, report a bug", ex);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Represents an unknown HTML tag.
 | 
						|
   * @author Mark Wielaard (mark@klomp.org)
 | 
						|
   */
 | 
						|
  public static class UnknownTag
 | 
						|
    extends Tag
 | 
						|
    implements Serializable
 | 
						|
  {
 | 
						|
    private static final long serialVersionUID = -1534369342247250625L;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates a new UnknownTag with the specified name
 | 
						|
     * @param name The tag name.
 | 
						|
     *
 | 
						|
     */
 | 
						|
    public UnknownTag(String name)
 | 
						|
    {
 | 
						|
      super(name);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This value is returned for attributes without value that have no
 | 
						|
   * default value defined in the DTD.
 | 
						|
   */
 | 
						|
  public static final String NULL_ATTRIBUTE_VALUE = "#DEFAULT";
 | 
						|
 | 
						|
  /* Package level html tag flags */
 | 
						|
  static final int BREAKS = 1;
 | 
						|
  static final int BLOCK = 2;
 | 
						|
  static final int PREFORMATTED = 4;
 | 
						|
  static final int SYNTHETIC = 8;
 | 
						|
  private static Map<String,Tag> tagMap;
 | 
						|
  private static Map<String,Attribute> attrMap;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The public constructor (does nothing). It it seldom required to have
 | 
						|
   * an instance of this class, because all public fields and methods
 | 
						|
   * are static.
 | 
						|
   */
 | 
						|
  public HTML()
 | 
						|
  {
 | 
						|
    // Nothing to do here.
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the set of the recognized HTML attributes.
 | 
						|
   */
 | 
						|
  public static HTML.Attribute[] getAllAttributeKeys()
 | 
						|
  {
 | 
						|
    return Attribute.getAllAttributes();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the set of actual HTML tags that are recognized by
 | 
						|
   * the default HTML reader. The returned array does not include the
 | 
						|
   * COMMENT, CONTENT and IMPLIED tags.
 | 
						|
   */
 | 
						|
  public static HTML.Tag[] getAllTags()
 | 
						|
  {
 | 
						|
    return Tag.getAllTags();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns an htl attribute constant for the given attribute name.
 | 
						|
   * @param attName the attribute name, case insensitive
 | 
						|
   */
 | 
						|
  public static Attribute getAttributeKey(String attName)
 | 
						|
  {
 | 
						|
    if (attrMap == null)
 | 
						|
      {
 | 
						|
        // Create the map on demand.
 | 
						|
        attrMap = new TreeMap<String,Attribute>();
 | 
						|
 | 
						|
        Attribute[] attrs = getAllAttributeKeys();
 | 
						|
 | 
						|
        for (int i = 0; i < attrs.length; i++)
 | 
						|
          {
 | 
						|
            attrMap.put(attrs [ i ].toString(), attrs [ i ]);
 | 
						|
          }
 | 
						|
      }
 | 
						|
 | 
						|
    return attrMap.get(attName.toLowerCase());
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Searches the value of given attribute in the provided set.
 | 
						|
   * If the value is found (String type expected), tries to parse it as
 | 
						|
   * an integer value. If succeded, returns the obtained integer value.
 | 
						|
   *
 | 
						|
   * For example:<p><code>
 | 
						|
   * SimpleAttributeSet ase = new SimpleAttributeSet();
 | 
						|
   * ase.addAttribute(HTML.getAttributeKey("size"),"222");
 | 
						|
   * System.out.println(
 | 
						|
   *  HTML.getIntegerAttributeValue
 | 
						|
   *     (ase, HTML.getAttributeKey("size"), 333)); // prints "222"
 | 
						|
   * System.out.println(
 | 
						|
   *  HTML.getIntegerAttributeValue
 | 
						|
   *     (ase, HTML.getAttributeKey("width"), 333)); // prints "333".
 | 
						|
   * </code></p>
 | 
						|
   *
 | 
						|
   *
 | 
						|
   * @param set The attribute set to search in. If the set contains the
 | 
						|
   * given attribute, it must by a type of String.
 | 
						|
   * @param attribute The html attribute to search in
 | 
						|
   * @param defaultValue The value that is returned if the attribute is not
 | 
						|
   * found in the given set or if the NumberFormatException was thrown
 | 
						|
   * during the parsing.
 | 
						|
   */
 | 
						|
  public static int getIntegerAttributeValue(AttributeSet set,
 | 
						|
                                             HTML.Attribute attribute,
 | 
						|
                                             int defaultValue
 | 
						|
                                            )
 | 
						|
  {
 | 
						|
    Object v = set.getAttribute(attribute);
 | 
						|
 | 
						|
    if (v == null)
 | 
						|
      {
 | 
						|
        return defaultValue;
 | 
						|
      }
 | 
						|
 | 
						|
    try
 | 
						|
      {
 | 
						|
        return Integer.parseInt(v.toString().trim());
 | 
						|
      }
 | 
						|
    catch (Exception ex)
 | 
						|
      {
 | 
						|
        return defaultValue;
 | 
						|
      }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns a HTML tag constant for the given HTML attribute name.
 | 
						|
   * If the tag is unknown, the null is returned.
 | 
						|
   * @param tagName the tag name, case insensitive
 | 
						|
   */
 | 
						|
  public static Tag getTag(String tagName)
 | 
						|
  {
 | 
						|
    if (tagMap == null)
 | 
						|
      {
 | 
						|
        // Create the mao on demand.
 | 
						|
        tagMap = new TreeMap<String,Tag>();
 | 
						|
 | 
						|
        Tag[] tags = getAllTags();
 | 
						|
 | 
						|
        for (int i = 0; i < tags.length; i++)
 | 
						|
          {
 | 
						|
            tagMap.put(tags [ i ].toString(), tags [ i ]);
 | 
						|
          }
 | 
						|
      }
 | 
						|
 | 
						|
    return tagMap.get(tagName.toLowerCase());
 | 
						|
  }
 | 
						|
}
 |