scripts/mir-setup/README: update with link to new doc on wiki
[mir.git] / source / mir / util / xml / html / HTMLSchemaInformation.java
1 package mir.util.xml.html;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 public class HTMLSchemaInformation {
9   private Map tags;
10
11   public HTMLSchemaInformation() {
12     tags = new HashMap();
13
14     addInlineTag("a");
15     addInlineTag("abbr");
16     addInlineTag("acronym");
17     addInlineTag("address");
18     addInlineTag("applet");
19     addInlineTag("area");
20     addInlineTag("b");
21     addInlineTag("base");
22     addInlineTag("basefont");
23     addInlineTag("bdo");
24     addInlineTag("big");
25     addInlineTag("blockquote");
26     addBlockTag("body", new String[] {"head"});
27     addBodylessTag("br");
28     addBodylessTag("button");
29     addInlineTag("caption");
30     addInlineTag("center");
31     addInlineTag("cite");
32     addInlineTag("code");
33     addInlineTag("col");
34     addInlineTag("colgroup");
35     addInlineTag("dd");
36     addInlineTag("del");
37     addInlineTag("dfn");
38     addInlineTag("dir");
39     addBlockTag("div");
40     addInlineTag("dl");
41     addInlineTag("dt");
42     addInlineTag("em");
43     addInlineTag("fieldset");
44     // Zapata: Removed because of frequent abuse by html writers
45     // addInlineTag("font");
46     addBlockTag("form");
47     addBodylessTag("frame");
48     addInlineTag("frameset");
49     addInlineTag("h1");
50     addInlineTag("h2");
51     addInlineTag("h3");
52     addInlineTag("h4");
53     addInlineTag("h5");
54     addInlineTag("h6");
55     addBlockTag("head");
56     addBodylessTag("hr");
57     addBlockTag("html");
58     addInlineTag("i");
59     addBlockTag("iframe");
60     addBodylessTag("img");
61     addBodylessTag("input");
62     addInlineTag("ins");
63     addInlineTag("isindex");
64     addInlineTag("kbd");
65     addInlineTag("label");
66     addInlineTag("legend");
67     addInlineTag("li");
68     addInlineTag("link");
69     addInlineTag("map");
70     addInlineTag("menu");
71     addBodylessTag("meta");
72     addBlockTag("noframes");
73     addInlineTag("noscript");
74     addBodylessTag("object");
75     addInlineTag("ol");
76     addInlineTag("optgroup");
77     addInlineTag("option");
78     addBlockTag("p", new String[] {"p"});
79     addInlineTag("param");
80     addInlineTag("pre");
81     addInlineTag("q");
82     addInlineTag("s");
83     addInlineTag("samp");
84     addInlineTag("script");
85     addInlineTag("select");
86     addInlineTag("small");
87     addInlineTag("span");
88     addInlineTag("strike");
89     addInlineTag("strong");
90     addInlineTag("style");
91     addInlineTag("sub");
92     addInlineTag("sup");
93     addBlockTag("table");
94     addBlockTag("tbody");
95     addBlockTag("td", new String[] {"td", "th"});
96     addInlineTag("textarea");
97     addInlineTag("tfoot");
98     addBlockTag("th", new String[] {"td", "th"});
99     addInlineTag("thead");
100     addInlineTag("title");
101     addBlockTag("tr", new String[] {"td", "th", "tr"});
102     addInlineTag("tt");
103     addInlineTag("u");
104     addInlineTag("ul");
105     addInlineTag("var");
106   }
107
108   public HTMLTagInformation lookupTag(String aTag) {
109     return (HTMLTagInformation) tags.get(aTag);
110   }
111
112   public void addInlineTag(String aTagName) {
113     addTag(aTagName, false, true, null);
114   }
115
116   public void addBodylessTag(String aTagName) {
117     addTag(aTagName, false, false, null);
118   }
119
120   public void addBlockTag(String aTagName) {
121     addTag(aTagName, true, true, null);
122   }
123
124   public void addBlockTag(String aTagName, String[] anAutoCloseList) {
125     addTag(aTagName, true, true, anAutoCloseList);
126   }
127
128   public void addTag(String aTagName, boolean anIsBlock, boolean aHasBody, String[] anAutoCloseList) {
129     HTMLTagInformation tagInformation = new HTMLTagInformation(aTagName, anIsBlock, aHasBody);
130
131     if (anAutoCloseList!=null) {
132       for (int i = 0; i < anAutoCloseList.length; i++) {
133         tagInformation.addAutoClosedTag(anAutoCloseList[i]);
134       }
135     }
136
137     tags.put(aTagName, tagInformation);
138   }
139
140   public class HTMLTagInformation {
141     private boolean isBlock;
142     private boolean hasBody;
143     private String tagName;
144     private List autoCloseList;
145
146     public HTMLTagInformation(String aTagName, boolean anIsBlock, boolean aHasBody) {
147       hasBody = aHasBody;
148       isBlock = anIsBlock;
149       tagName = aTagName;
150       autoCloseList = new ArrayList();
151     }
152
153     void addAutoClosedTag(String aTag) {
154       autoCloseList.add(aTag);
155     }
156
157     public boolean autoClose(String aTag) {
158       return autoCloseList.contains(aTag);
159     }
160
161     public boolean getIsBlock() {
162       return isBlock;
163     }
164
165     public boolean getHasBody() {
166       return hasBody;
167     }
168
169     public String getTagName() {
170       return tagName;
171     }
172   }
173 }