68d21273c6792e4548bf3e1c246a965d40b71e3b
[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     addInlineTag("font");
42     addBlockTag("form");
43     addBodylessTag("frame");
44     addInlineTag("frameset");
45     addInlineTag("h1");
46     addInlineTag("h2");
47     addInlineTag("h3");
48     addInlineTag("h4");
49     addInlineTag("h5");
50     addInlineTag("h6");
51     addBlockTag("head");
52     addBodylessTag("hr");
53     addBlockTag("html");
54     addInlineTag("i");
55     addBlockTag("iframe");
56     addBodylessTag("img");
57     addBodylessTag("input");
58     addInlineTag("ins");
59     addInlineTag("isindex");
60     addInlineTag("kbd");
61     addInlineTag("label");
62     addInlineTag("legend");
63     addInlineTag("li");
64     addInlineTag("link");
65     addInlineTag("map");
66     addInlineTag("menu");
67     addBodylessTag("meta");
68     addBlockTag("noframes");
69     addInlineTag("noscript");
70     addBodylessTag("object");
71     addInlineTag("ol");
72     addInlineTag("optgroup");
73     addInlineTag("option");
74     addBlockTag("p", new String[] {"p"});
75     addInlineTag("param");
76     addInlineTag("pre");
77     addInlineTag("q");
78     addInlineTag("s");
79     addInlineTag("samp");
80     addInlineTag("script");
81     addInlineTag("select");
82     addInlineTag("small");
83     addInlineTag("span");
84     addInlineTag("strike");
85     addInlineTag("strong");
86     addInlineTag("style");
87     addInlineTag("sub");
88     addInlineTag("sup");
89     addBlockTag("table");
90     addBlockTag("tbody");
91     addBlockTag("td", new String[] {"td", "th"});
92     addInlineTag("textarea");
93     addInlineTag("tfoot");
94     addBlockTag("th", new String[] {"td", "th"});
95     addInlineTag("thead");
96     addInlineTag("title");
97     addBlockTag("tr", new String[] {"td", "th", "tr"});
98     addInlineTag("tt");
99     addInlineTag("u");
100     addInlineTag("ul");
101     addInlineTag("var");
102   }
103
104   public HTMLTagInformation lookupTag(String aTag) {
105     return (HTMLTagInformation) tags.get(aTag);
106   }
107
108   public void addInlineTag(String aTagName) {
109     addTag(aTagName, false, true, null);
110   }
111
112   public void addBodylessTag(String aTagName) {
113     addTag(aTagName, false, false, null);
114   }
115
116   public void addBlockTag(String aTagName) {
117     addTag(aTagName, true, true, null);
118   }
119
120   public void addBlockTag(String aTagName, String[] anAutoCloseList) {
121     addTag(aTagName, true, true, anAutoCloseList);
122   }
123
124   public void addTag(String aTagName, boolean anIsBlock, boolean aHasBody, String[] anAutoCloseList) {
125     HTMLTagInformation tagInformation = new HTMLTagInformation(aTagName, anIsBlock, aHasBody);
126
127     if (anAutoCloseList!=null) {
128       for (int i = 0; i < anAutoCloseList.length; i++) {
129         tagInformation.addAutoClosedTag(anAutoCloseList[i]);
130       }
131     }
132
133     tags.put(aTagName, tagInformation);
134   }
135
136   public class HTMLTagInformation {
137     private boolean isBlock;
138     private boolean hasBody;
139     private String tagName;
140     private List autoCloseList;
141
142     public HTMLTagInformation(String aTagName, boolean anIsBlock, boolean aHasBody) {
143       hasBody = aHasBody;
144       isBlock = anIsBlock;
145       tagName = aTagName;
146       autoCloseList = new ArrayList();
147     }
148
149     void addAutoClosedTag(String aTag) {
150       autoCloseList.add(aTag);
151     }
152
153     public boolean autoClose(String aTag) {
154       return autoCloseList.contains(aTag);
155     }
156
157     public boolean getIsBlock() {
158       return isBlock;
159     }
160
161     public boolean getHasBody() {
162       return hasBody;
163     }
164
165     public String getTagName() {
166       return tagName;
167     }
168   }
169 }