~ubuntu-branches/ubuntu/saucy/libhtmlcleaner-java/saucy-proposed

« back to all changes in this revision

Viewing changes to src/main/java/org/htmlcleaner/DefaultTagProvider.java

  • Committer: Package Import Robot
  • Author(s): Alexandre Rossi
  • Date: 2011-05-26 15:05:58 UTC
  • Revision ID: package-import@ubuntu.com-20110526150558-scdb2th5p2rmw1op
Tags: upstream-2.2
ImportĀ upstreamĀ versionĀ 2.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*  Copyright (c) 2006-2007, Vladimir Nikic
 
2
    All rights reserved.
 
3
 
 
4
    Redistribution and use of this software in source and binary forms,
 
5
    with or without modification, are permitted provided that the following
 
6
    conditions are met:
 
7
 
 
8
    * Redistributions of source code must retain the above
 
9
      copyright notice, this list of conditions and the
 
10
      following disclaimer.
 
11
 
 
12
    * Redistributions in binary form must reproduce the above
 
13
      copyright notice, this list of conditions and the
 
14
      following disclaimer in the documentation and/or other
 
15
      materials provided with the distribution.
 
16
 
 
17
    * The name of HtmlCleaner may not be used to endorse or promote
 
18
      products derived from this software without specific prior
 
19
      written permission.
 
20
 
 
21
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 
22
    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
23
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
24
    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 
25
    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 
26
    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 
27
    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 
28
    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 
29
    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 
30
    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 
31
    POSSIBILITY OF SUCH DAMAGE.
 
32
 
 
33
    You can contact Vladimir Nikic by sending e-mail to
 
34
    nikic_vladimir@yahoo.com. Please include the word "HtmlCleaner" in the
 
35
    subject line.
 
36
*/
 
37
 
 
38
package org.htmlcleaner;
 
39
 
 
40
import java.util.HashMap;
 
41
 
 
42
/**
 
43
 * This class is automatically created from ConfigFileTagProvider which reads
 
44
 * default XML configuration file with tag descriptions.
 
45
 * It is used as default tag info provider.
 
46
 * Class is created for performance purposes - parsing XML file requires some
 
47
 * processing time.
 
48
 */
 
49
public class DefaultTagProvider extends HashMap<String, TagInfo> implements ITagInfoProvider {
 
50
 
 
51
    // singleton instance, used if no other TagInfoProvider is specified
 
52
    private static DefaultTagProvider _instance;
 
53
 
 
54
    /**
 
55
     * @return Singleton instance of this class.
 
56
     */
 
57
    public static synchronized DefaultTagProvider getInstance() {
 
58
        if (_instance == null) {
 
59
            _instance = new DefaultTagProvider();
 
60
        }
 
61
        return _instance;
 
62
    }
 
63
 
 
64
    public DefaultTagProvider() {
 
65
        TagInfo tagInfo;
 
66
 
 
67
        tagInfo = new TagInfo("div", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
68
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
69
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
70
        this.put("div", tagInfo);
 
71
 
 
72
        tagInfo = new TagInfo("span", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
73
        this.put("span", tagInfo);
 
74
 
 
75
        tagInfo = new TagInfo("meta", TagInfo.CONTENT_NONE, TagInfo.HEAD, false, false, false);
 
76
        this.put("meta", tagInfo);
 
77
 
 
78
        tagInfo = new TagInfo("link", TagInfo.CONTENT_NONE, TagInfo.HEAD, false, false, false);
 
79
        this.put("link", tagInfo);
 
80
 
 
81
        tagInfo = new TagInfo("title",  TagInfo.CONTENT_TEXT, TagInfo.HEAD, false, true, false);
 
82
        this.put("title", tagInfo);
 
83
 
 
84
        tagInfo = new TagInfo("style",  TagInfo.CONTENT_TEXT, TagInfo.HEAD, false, false, false);
 
85
        this.put("style", tagInfo);
 
86
 
 
87
        tagInfo = new TagInfo("bgsound", TagInfo.CONTENT_NONE, TagInfo.HEAD, false, false, false);
 
88
        this.put("bgsound", tagInfo);
 
89
 
 
90
        tagInfo = new TagInfo("h1", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
91
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
92
        tagInfo.defineCloseBeforeTags("h1,h2,h3,h4,h5,h6,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
93
        this.put("h1", tagInfo);
 
94
 
 
95
        tagInfo = new TagInfo("h2", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
96
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
97
        tagInfo.defineCloseBeforeTags("h1,h2,h3,h4,h5,h6,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
98
        this.put("h2", tagInfo);
 
99
 
 
100
        tagInfo = new TagInfo("h3", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
101
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
102
        tagInfo.defineCloseBeforeTags("h1,h2,h3,h4,h5,h6,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
103
        this.put("h3", tagInfo);
 
104
 
 
105
        tagInfo = new TagInfo("h4", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
106
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
107
        tagInfo.defineCloseBeforeTags("h1,h2,h3,h4,h5,h6,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
108
        this.put("h4", tagInfo);
 
109
 
 
110
        tagInfo = new TagInfo("h5", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
111
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
112
        tagInfo.defineCloseBeforeTags("h1,h2,h3,h4,h5,h6,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
113
        this.put("h5", tagInfo);
 
114
 
 
115
        tagInfo = new TagInfo("h6", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
116
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
117
        tagInfo.defineCloseBeforeTags("h1,h2,h3,h4,h5,h6,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
118
        this.put("h6", tagInfo);
 
119
 
 
120
        tagInfo = new TagInfo("p", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
121
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
122
        tagInfo.defineCloseBeforeTags("p,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
123
        this.put("p", tagInfo);
 
124
 
 
125
        tagInfo = new TagInfo("strong", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
126
        this.put("strong", tagInfo);
 
127
 
 
128
        tagInfo = new TagInfo("em", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
129
        this.put("em", tagInfo);
 
130
 
 
131
        tagInfo = new TagInfo("abbr", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
132
        this.put("abbr", tagInfo);
 
133
 
 
134
        tagInfo = new TagInfo("acronym", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
135
        this.put("acronym", tagInfo);
 
136
 
 
137
        tagInfo = new TagInfo("address", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
138
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
139
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
140
        this.put("address", tagInfo);
 
141
 
 
142
        tagInfo = new TagInfo("bdo", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
143
        this.put("bdo", tagInfo);
 
144
 
 
145
        tagInfo = new TagInfo("blockquote", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
146
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
147
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
148
        this.put("blockquote", tagInfo);
 
149
 
 
150
        tagInfo = new TagInfo("cite", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
151
        this.put("cite", tagInfo);
 
152
 
 
153
        tagInfo = new TagInfo("q", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
154
        this.put("q", tagInfo);
 
155
 
 
156
        tagInfo = new TagInfo("code", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
157
        this.put("code", tagInfo);
 
158
 
 
159
        tagInfo = new TagInfo("ins", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
160
        this.put("ins", tagInfo);
 
161
 
 
162
        tagInfo = new TagInfo("del", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
163
        this.put("del", tagInfo);
 
164
 
 
165
        tagInfo = new TagInfo("dfn", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
166
        this.put("dfn", tagInfo);
 
167
 
 
168
        tagInfo = new TagInfo("kbd", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
169
        this.put("kbd", tagInfo);
 
170
 
 
171
        tagInfo = new TagInfo("pre", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
172
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
173
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
174
        this.put("pre", tagInfo);
 
175
 
 
176
        tagInfo = new TagInfo("samp", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
177
        this.put("samp", tagInfo);
 
178
 
 
179
        tagInfo = new TagInfo("listing", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
180
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
181
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
182
        this.put("listing", tagInfo);
 
183
 
 
184
        tagInfo = new TagInfo("var", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
185
        this.put("var", tagInfo);
 
186
 
 
187
        tagInfo = new TagInfo("br", TagInfo.CONTENT_NONE, TagInfo.BODY, false, false, false);
 
188
        this.put("br", tagInfo);
 
189
 
 
190
        tagInfo = new TagInfo("wbr", TagInfo.CONTENT_NONE, TagInfo.BODY, false, false, false);
 
191
        this.put("wbr", tagInfo);
 
192
 
 
193
        tagInfo = new TagInfo("nobr", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
194
        tagInfo.defineCloseBeforeTags("nobr");
 
195
        this.put("nobr", tagInfo);
 
196
 
 
197
        tagInfo = new TagInfo("xmp",  TagInfo.CONTENT_TEXT, TagInfo.BODY, false, false, false);
 
198
        this.put("xmp", tagInfo);
 
199
 
 
200
        tagInfo = new TagInfo("a", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
201
        tagInfo.defineCloseBeforeTags("a");
 
202
        this.put("a", tagInfo);
 
203
 
 
204
        tagInfo = new TagInfo("base", TagInfo.CONTENT_NONE, TagInfo.HEAD, false, false, false);
 
205
        this.put("base", tagInfo);
 
206
 
 
207
        tagInfo = new TagInfo("img", TagInfo.CONTENT_NONE, TagInfo.BODY, false, false, false);
 
208
        this.put("img", tagInfo);
 
209
 
 
210
        tagInfo = new TagInfo("area", TagInfo.CONTENT_NONE, TagInfo.BODY, false, false, false);
 
211
        tagInfo.defineFatalTags("map");
 
212
        tagInfo.defineCloseBeforeTags("area");
 
213
        this.put("area", tagInfo);
 
214
 
 
215
        tagInfo = new TagInfo("map", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
216
        tagInfo.defineCloseBeforeTags("map");
 
217
        this.put("map", tagInfo);
 
218
 
 
219
        tagInfo = new TagInfo("object", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
220
        this.put("object", tagInfo);
 
221
 
 
222
        tagInfo = new TagInfo("param", TagInfo.CONTENT_NONE, TagInfo.BODY, false, false, false);
 
223
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
224
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
225
        this.put("param", tagInfo);
 
226
 
 
227
        tagInfo = new TagInfo("applet", TagInfo.CONTENT_ALL, TagInfo.BODY, true, false, false);
 
228
        this.put("applet", tagInfo);
 
229
 
 
230
        tagInfo = new TagInfo("xml", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
231
        this.put("xml", tagInfo);
 
232
 
 
233
        tagInfo = new TagInfo("ul", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
234
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
235
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
236
        this.put("ul", tagInfo);
 
237
 
 
238
        tagInfo = new TagInfo("ol", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
239
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
240
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
241
        this.put("ol", tagInfo);
 
242
 
 
243
        tagInfo = new TagInfo("li", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
244
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
245
        tagInfo.defineCloseBeforeTags("li,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
246
        this.put("li", tagInfo);
 
247
 
 
248
        tagInfo = new TagInfo("dl", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
249
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
250
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
251
        this.put("dl", tagInfo);
 
252
 
 
253
        tagInfo = new TagInfo("dt", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
254
        tagInfo.defineCloseBeforeTags("dt,dd");
 
255
        this.put("dt", tagInfo);
 
256
 
 
257
        tagInfo = new TagInfo("dd", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
258
        tagInfo.defineCloseBeforeTags("dt,dd");
 
259
        this.put("dd", tagInfo);
 
260
 
 
261
        tagInfo = new TagInfo("menu", TagInfo.CONTENT_ALL, TagInfo.BODY, true, false, false);
 
262
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
263
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
264
        this.put("menu", tagInfo);
 
265
 
 
266
        tagInfo = new TagInfo("dir", TagInfo.CONTENT_ALL, TagInfo.BODY, true, false, false);
 
267
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
268
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
269
        this.put("dir", tagInfo);
 
270
 
 
271
        tagInfo = new TagInfo("table", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
272
        tagInfo.defineAllowedChildrenTags("tr,tbody,thead,tfoot,colgroup,col,form,caption,tr");
 
273
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
274
        tagInfo.defineCloseBeforeTags("tr,thead,tbody,tfoot,caption,colgroup,table,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param");
 
275
        this.put("table", tagInfo);
 
276
 
 
277
        tagInfo = new TagInfo("tr", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
278
        tagInfo.defineFatalTags("table");
 
279
        tagInfo.defineRequiredEnclosingTags("tbody");
 
280
        tagInfo.defineAllowedChildrenTags("td,th");
 
281
        tagInfo.defineHigherLevelTags("thead,tfoot");
 
282
        tagInfo.defineCloseBeforeTags("tr,td,th,caption,colgroup");
 
283
        this.put("tr", tagInfo);
 
284
 
 
285
        tagInfo = new TagInfo("td", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
286
        tagInfo.defineFatalTags("table");
 
287
        tagInfo.defineRequiredEnclosingTags("tr");
 
288
        tagInfo.defineCloseBeforeTags("td,th,caption,colgroup");
 
289
        this.put("td", tagInfo);
 
290
 
 
291
        tagInfo = new TagInfo("th", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
292
        tagInfo.defineFatalTags("table");
 
293
        tagInfo.defineRequiredEnclosingTags("tr");
 
294
        tagInfo.defineCloseBeforeTags("td,th,caption,colgroup");
 
295
        this.put("th", tagInfo);
 
296
 
 
297
        tagInfo = new TagInfo("tbody", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
298
        tagInfo.defineFatalTags("table");
 
299
        tagInfo.defineAllowedChildrenTags("tr,form");
 
300
        tagInfo.defineCloseBeforeTags("td,th,tr,tbody,thead,tfoot,caption,colgroup");
 
301
        this.put("tbody", tagInfo);
 
302
 
 
303
        tagInfo = new TagInfo("thead", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
304
        tagInfo.defineFatalTags("table");
 
305
        tagInfo.defineAllowedChildrenTags("tr,form");
 
306
        tagInfo.defineCloseBeforeTags("td,th,tr,tbody,thead,tfoot,caption,colgroup");
 
307
        this.put("thead", tagInfo);
 
308
 
 
309
        tagInfo = new TagInfo("tfoot", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
310
        tagInfo.defineFatalTags("table");
 
311
        tagInfo.defineAllowedChildrenTags("tr,form");
 
312
        tagInfo.defineCloseBeforeTags("td,th,tr,tbody,thead,tfoot,caption,colgroup");
 
313
        this.put("tfoot", tagInfo);
 
314
 
 
315
        tagInfo = new TagInfo("col", TagInfo.CONTENT_NONE, TagInfo.BODY, false, false, false);
 
316
        tagInfo.defineFatalTags("table");
 
317
        this.put("col", tagInfo);
 
318
 
 
319
        tagInfo = new TagInfo("colgroup", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
320
        tagInfo.defineFatalTags("table");
 
321
        tagInfo.defineAllowedChildrenTags("col");
 
322
        tagInfo.defineCloseBeforeTags("td,th,tr,tbody,thead,tfoot,caption,colgroup");
 
323
        this.put("colgroup", tagInfo);
 
324
 
 
325
        tagInfo = new TagInfo("caption", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
326
        tagInfo.defineFatalTags("table");
 
327
        tagInfo.defineCloseBeforeTags("td,th,tr,tbody,thead,tfoot,caption,colgroup");
 
328
        this.put("caption", tagInfo);
 
329
 
 
330
        tagInfo = new TagInfo("form", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, true);
 
331
        tagInfo.defineForbiddenTags("form");
 
332
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
333
        tagInfo.defineCloseBeforeTags("option,optgroup,textarea,select,fieldset,p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
334
        this.put("form", tagInfo);
 
335
 
 
336
        tagInfo = new TagInfo("input", TagInfo.CONTENT_NONE, TagInfo.BODY, false, false, false);
 
337
        tagInfo.defineCloseBeforeTags("select,optgroup,option");
 
338
        this.put("input", tagInfo);
 
339
 
 
340
        tagInfo = new TagInfo("textarea", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
341
        tagInfo.defineCloseBeforeTags("select,optgroup,option");
 
342
        this.put("textarea", tagInfo);
 
343
 
 
344
        tagInfo = new TagInfo("select", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, true);
 
345
        tagInfo.defineAllowedChildrenTags("option,optgroup");
 
346
        tagInfo.defineCloseBeforeTags("option,optgroup,select");
 
347
        this.put("select", tagInfo);
 
348
 
 
349
        tagInfo = new TagInfo("option",  TagInfo.CONTENT_TEXT, TagInfo.BODY, false, false, true);
 
350
        tagInfo.defineFatalTags("select");
 
351
        tagInfo.defineCloseBeforeTags("option");
 
352
        this.put("option", tagInfo);
 
353
 
 
354
        tagInfo = new TagInfo("optgroup", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, true);
 
355
        tagInfo.defineFatalTags("select");
 
356
        tagInfo.defineAllowedChildrenTags("option");
 
357
        tagInfo.defineCloseBeforeTags("optgroup");
 
358
        this.put("optgroup", tagInfo);
 
359
 
 
360
        tagInfo = new TagInfo("button", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
361
        tagInfo.defineCloseBeforeTags("select,optgroup,option");
 
362
        this.put("button", tagInfo);
 
363
 
 
364
        tagInfo = new TagInfo("label", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
365
        this.put("label", tagInfo);
 
366
 
 
367
        tagInfo = new TagInfo("fieldset", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
368
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
369
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
370
        this.put("fieldset", tagInfo);
 
371
 
 
372
        tagInfo = new TagInfo("legend", TagInfo.CONTENT_TEXT, TagInfo.BODY, false, false, false);
 
373
        tagInfo.defineRequiredEnclosingTags("fieldset");
 
374
        tagInfo.defineCloseBeforeTags("legend");
 
375
        this.put("legend", tagInfo);
 
376
 
 
377
        tagInfo = new TagInfo("isindex", TagInfo.CONTENT_NONE, TagInfo.BODY, true, false, false);
 
378
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
379
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
380
        this.put("isindex", tagInfo);
 
381
 
 
382
        tagInfo = new TagInfo("script", TagInfo.CONTENT_ALL, TagInfo.HEAD_AND_BODY, false, false, false);
 
383
        this.put("script", tagInfo);
 
384
 
 
385
        tagInfo = new TagInfo("noscript", TagInfo.CONTENT_ALL, TagInfo.HEAD_AND_BODY, false, false, false);
 
386
        this.put("noscript", tagInfo);
 
387
 
 
388
        tagInfo = new TagInfo("b", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
389
        tagInfo.defineCloseInsideCopyAfterTags("u,i,tt,sub,sup,big,small,strike,blink,s");
 
390
        this.put("b", tagInfo);
 
391
 
 
392
        tagInfo = new TagInfo("i", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
393
        tagInfo.defineCloseInsideCopyAfterTags("b,u,tt,sub,sup,big,small,strike,blink,s");
 
394
        this.put("i", tagInfo);
 
395
 
 
396
        tagInfo = new TagInfo("u", TagInfo.CONTENT_ALL, TagInfo.BODY, true, false, false);
 
397
        tagInfo.defineCloseInsideCopyAfterTags("b,i,tt,sub,sup,big,small,strike,blink,s");
 
398
        this.put("u", tagInfo);
 
399
 
 
400
        tagInfo = new TagInfo("tt", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
401
        tagInfo.defineCloseInsideCopyAfterTags("b,u,i,sub,sup,big,small,strike,blink,s");
 
402
        this.put("tt", tagInfo);
 
403
 
 
404
        tagInfo = new TagInfo("sub", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
405
        tagInfo.defineCloseInsideCopyAfterTags("b,u,i,tt,sup,big,small,strike,blink,s");
 
406
        this.put("sub", tagInfo);
 
407
 
 
408
        tagInfo = new TagInfo("sup", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
409
        tagInfo.defineCloseInsideCopyAfterTags("b,u,i,tt,sub,big,small,strike,blink,s");
 
410
        this.put("sup", tagInfo);
 
411
 
 
412
        tagInfo = new TagInfo("big", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
413
        tagInfo.defineCloseInsideCopyAfterTags("b,u,i,tt,sub,sup,small,strike,blink,s");
 
414
        this.put("big", tagInfo);
 
415
 
 
416
        tagInfo = new TagInfo("small", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
417
        tagInfo.defineCloseInsideCopyAfterTags("b,u,i,tt,sub,sup,big,strike,blink,s");
 
418
        this.put("small", tagInfo);
 
419
 
 
420
        tagInfo = new TagInfo("strike", TagInfo.CONTENT_ALL, TagInfo.BODY, true, false, false);
 
421
        tagInfo.defineCloseInsideCopyAfterTags("b,u,i,tt,sub,sup,big,small,blink,s");
 
422
        this.put("strike", tagInfo);
 
423
 
 
424
        tagInfo = new TagInfo("blink", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
425
        tagInfo.defineCloseInsideCopyAfterTags("b,u,i,tt,sub,sup,big,small,strike,s");
 
426
        this.put("blink", tagInfo);
 
427
 
 
428
        tagInfo = new TagInfo("marquee", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
429
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
430
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
431
        this.put("marquee", tagInfo);
 
432
 
 
433
        tagInfo = new TagInfo("s", TagInfo.CONTENT_ALL, TagInfo.BODY, true, false, false);
 
434
        tagInfo.defineCloseInsideCopyAfterTags("b,u,i,tt,sub,sup,big,small,strike,blink");
 
435
        this.put("s", tagInfo);
 
436
 
 
437
        tagInfo = new TagInfo("hr", TagInfo.CONTENT_NONE, TagInfo.BODY, false, false, false);
 
438
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
439
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
440
        this.put("hr", tagInfo);
 
441
 
 
442
        tagInfo = new TagInfo("font", TagInfo.CONTENT_ALL, TagInfo.BODY, true, false, false);
 
443
        this.put("font", tagInfo);
 
444
 
 
445
        tagInfo = new TagInfo("basefont", TagInfo.CONTENT_NONE, TagInfo.BODY, true, false, false);
 
446
        this.put("basefont", tagInfo);
 
447
 
 
448
        tagInfo = new TagInfo("center", TagInfo.CONTENT_ALL, TagInfo.BODY, true, false, false);
 
449
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
450
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
451
        this.put("center", tagInfo);
 
452
 
 
453
        tagInfo = new TagInfo("comment", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
454
        this.put("comment", tagInfo);
 
455
 
 
456
        tagInfo = new TagInfo("server", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
457
        this.put("server", tagInfo);
 
458
 
 
459
        tagInfo = new TagInfo("iframe", TagInfo.CONTENT_ALL, TagInfo.BODY, false, false, false);
 
460
        this.put("iframe", tagInfo);
 
461
 
 
462
        tagInfo = new TagInfo("embed", TagInfo.CONTENT_NONE, TagInfo.BODY, false, false, false);
 
463
        tagInfo.defineCloseBeforeCopyInsideTags("a,bdo,strong,em,q,b,i,u,tt,sub,sup,big,small,strike,s,font");
 
464
        tagInfo.defineCloseBeforeTags("p,address,label,abbr,acronym,dfn,kbd,samp,var,cite,code,param,xml");
 
465
        this.put("embed", tagInfo);
 
466
    }
 
467
 
 
468
    public TagInfo getTagInfo(String tagName) {
 
469
        return get(tagName);
 
470
    }
 
471
 
 
472
    /**
 
473
     * Removes tag info with specified name.
 
474
     * @param tagName Name of the tag to be removed from the tag provider.
 
475
     */
 
476
    public void removeTagInfo(String tagName) {
 
477
        if (tagName != null) {
 
478
            remove(tagName.toLowerCase());
 
479
        }
 
480
    }
 
481
 
 
482
    /**
 
483
     * Sets new tag info.
 
484
     * @param tagInfo tag info to be added to the provider.
 
485
     */
 
486
    public void addTagInfo(TagInfo tagInfo) {
 
487
        if (tagInfo != null) {
 
488
            put(tagInfo.getName().toLowerCase(), tagInfo);
 
489
        }
 
490
    }
 
491
 
 
492
}