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