--- /dev/null
+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