rebuilding head
[mir.git] / source / mir / util / xml / html / HTMLSchemaInformation.java
diff --git a/source/mir/util/xml/html/HTMLSchemaInformation.java b/source/mir/util/xml/html/HTMLSchemaInformation.java
new file mode 100755 (executable)
index 0000000..5856214
--- /dev/null
@@ -0,0 +1,170 @@
+package mir.util.xml.html;
+
+import java.util.*;
+
+public class HTMLSchemaInformation {
+  private Map tags;
+
+  public HTMLSchemaInformation() {
+    tags = new HashMap();
+
+    addInlineTag("a");
+    addInlineTag("abbr");
+    addInlineTag("acronym");
+    addInlineTag("address");
+    addInlineTag("applet");
+    addInlineTag("area");
+    addInlineTag("b");
+    addInlineTag("base");
+    addInlineTag("basefont");
+    addInlineTag("bdo");
+    addInlineTag("big");
+    addInlineTag("blockquote");
+    addBlockTag("body", new String[] {"head"});
+    addBodylessTag("br");
+    addBodylessTag("button");
+    addInlineTag("caption");
+    addInlineTag("center");
+    addInlineTag("cite");
+    addInlineTag("code");
+    addInlineTag("col");
+    addInlineTag("colgroup");
+    addInlineTag("dd");
+    addInlineTag("del");
+    addInlineTag("dfn");
+    addInlineTag("dir");
+    addBlockTag("div");
+    addInlineTag("dl");
+    addInlineTag("dt");
+    addInlineTag("em");
+    addInlineTag("fieldset");
+    // Zapata: Removed because of frequent abuse by html writers
+    // addInlineTag("font");
+    addBlockTag("form");
+    addBodylessTag("frame");
+    addInlineTag("frameset");
+    addInlineTag("h1");
+    addInlineTag("h2");
+    addInlineTag("h3");
+    addInlineTag("h4");
+    addInlineTag("h5");
+    addInlineTag("h6");
+    addBlockTag("head");
+    addBodylessTag("hr");
+    addBlockTag("html");
+    addInlineTag("i");
+    addBlockTag("iframe");
+    addBodylessTag("img");
+    addBodylessTag("input");
+    addInlineTag("ins");
+    addInlineTag("isindex");
+    addInlineTag("kbd");
+    addInlineTag("label");
+    addInlineTag("legend");
+    addInlineTag("li");
+    addInlineTag("link");
+    addInlineTag("map");
+    addInlineTag("menu");
+    addBodylessTag("meta");
+    addBlockTag("noframes");
+    addInlineTag("noscript");
+    addBodylessTag("object");
+    addInlineTag("ol");
+    addInlineTag("optgroup");
+    addInlineTag("option");
+    addBlockTag("p", new String[] {"p"});
+    addInlineTag("param");
+    addInlineTag("pre");
+    addInlineTag("q");
+    addInlineTag("s");
+    addInlineTag("samp");
+    addInlineTag("script");
+    addInlineTag("select");
+    addInlineTag("small");
+    addInlineTag("span");
+    addInlineTag("strike");
+    addInlineTag("strong");
+    addInlineTag("style");
+    addInlineTag("sub");
+    addInlineTag("sup");
+    addBlockTag("table");
+    addBlockTag("tbody");
+    addBlockTag("td", new String[] {"td", "th"});
+    addInlineTag("textarea");
+    addInlineTag("tfoot");
+    addBlockTag("th", new String[] {"td", "th"});
+    addInlineTag("thead");
+    addInlineTag("title");
+    addBlockTag("tr", new String[] {"td", "th", "tr"});
+    addInlineTag("tt");
+    addInlineTag("u");
+    addInlineTag("ul");
+    addInlineTag("var");
+  }
+
+  public HTMLTagInformation lookupTag(String aTag) {
+    return (HTMLTagInformation) tags.get(aTag);
+  }
+
+  public void addInlineTag(String aTagName) {
+    addTag(aTagName, false, true, null);
+  }
+
+  public void addBodylessTag(String aTagName) {
+    addTag(aTagName, false, false, null);
+  }
+
+  public void addBlockTag(String aTagName) {
+    addTag(aTagName, true, true, null);
+  }
+
+  public void addBlockTag(String aTagName, String[] anAutoCloseList) {
+    addTag(aTagName, true, true, anAutoCloseList);
+  }
+
+  public void addTag(String aTagName, boolean anIsBlock, boolean aHasBody, String[] anAutoCloseList) {
+    HTMLTagInformation tagInformation = new HTMLTagInformation(aTagName, anIsBlock, aHasBody);
+
+    if (anAutoCloseList!=null) {
+      for (int i = 0; i < anAutoCloseList.length; i++) {
+        tagInformation.addAutoClosedTag(anAutoCloseList[i]);
+      }
+    }
+
+    tags.put(aTagName, tagInformation);
+  }
+
+  public class HTMLTagInformation {
+    private boolean isBlock;
+    private boolean hasBody;
+    private String tagName;
+    private List autoCloseList;
+
+    public HTMLTagInformation(String aTagName, boolean anIsBlock, boolean aHasBody) {
+      hasBody = aHasBody;
+      isBlock = anIsBlock;
+      tagName = aTagName;
+      autoCloseList = new ArrayList();
+    }
+
+    void addAutoClosedTag(String aTag) {
+      autoCloseList.add(aTag);
+    }
+
+    public boolean autoClose(String aTag) {
+      return autoCloseList.contains(aTag);
+    }
+
+    public boolean getIsBlock() {
+      return isBlock;
+    }
+
+    public boolean getHasBody() {
+      return hasBody;
+    }
+
+    public String getTagName() {
+      return tagName;
+    }
+  }
+}
\ No newline at end of file