parser/htmlparser/src/nsElementTable.cpp

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:936629392db2
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=2 sw=2 et tw=78: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
8 #include "nsIAtom.h"
9 #include "nsElementTable.h"
10
11 /*****************************************************************************
12 Now it's time to list all the html elements all with their capabilities...
13 ******************************************************************************/
14
15 // The Element Table (sung to the tune of Modern Major General)
16
17 const nsHTMLElement gHTMLElements[] = {
18 {
19 /*tag*/ eHTMLTag_unknown,
20 /*parent,leaf*/ kNone, true
21 },
22 {
23 /*tag*/ eHTMLTag_a,
24 /*parent,leaf*/ kSpecial, false
25 },
26 {
27 /*tag*/ eHTMLTag_abbr,
28 /*parent,leaf*/ kPhrase, false
29 },
30 {
31 /*tag*/ eHTMLTag_acronym,
32 /*parent,leaf*/ kPhrase, false
33 },
34 {
35 /*tag*/ eHTMLTag_address,
36 /*parent,leaf*/ kBlock, false
37 },
38 {
39 /*tag*/ eHTMLTag_applet,
40 /*parent,leaf*/ kSpecial, false
41 },
42 {
43 /*tag*/ eHTMLTag_area,
44 /*parent,leaf*/ kNone, true
45 },
46 {
47 /*tag*/ eHTMLTag_article,
48 /*parent,leaf*/ kBlock, false
49 },
50 {
51 /*tag*/ eHTMLTag_aside,
52 /*parent,leaf*/ kBlock, false
53 },
54 {
55 /*tag*/ eHTMLTag_audio,
56 /*parent,leaf*/ kSpecial, false
57 },
58 {
59 /*tag*/ eHTMLTag_b,
60 /*parent,leaf*/ kFontStyle, false
61 },
62 {
63 /*tag*/ eHTMLTag_base,
64 /*parent,leaf*/ kHeadContent, true
65 },
66 {
67 /*tag*/ eHTMLTag_basefont,
68 /*parent,leaf*/ kSpecial, true
69 },
70 {
71 /*tag*/ eHTMLTag_bdo,
72 /*parent,leaf*/ kSpecial, false
73 },
74 {
75 /*tag*/ eHTMLTag_bgsound,
76 /*parent,leaf*/ (kFlowEntity|kHeadMisc), true
77 },
78 {
79 /*tag*/ eHTMLTag_big,
80 /*parent,leaf*/ kFontStyle, false
81 },
82 {
83 /*tag*/ eHTMLTag_blockquote,
84 /*parent,leaf*/ kBlock, false
85 },
86 {
87 /*tag*/ eHTMLTag_body,
88 /*parent,leaf*/ kHTMLContent, false
89 },
90 {
91 /*tag*/ eHTMLTag_br,
92 /*parent,leaf*/ kSpecial, true
93 },
94 {
95 /*tag*/ eHTMLTag_button,
96 /*parent,leaf*/ kFormControl, false
97 },
98 {
99 /*tag*/ eHTMLTag_canvas,
100 /*parent,leaf*/ kSpecial, false
101 },
102 {
103 /*tag*/ eHTMLTag_caption,
104 /*parent,leaf*/ kNone, false
105 },
106 {
107 /*tag*/ eHTMLTag_center,
108 /*parent,leaf*/ kBlock, false
109 },
110 {
111 /*tag*/ eHTMLTag_cite,
112 /*parent,leaf*/ kPhrase, false
113 },
114 {
115 /*tag*/ eHTMLTag_code,
116 /*parent,leaf*/ kPhrase, false
117 },
118 {
119 /*tag*/ eHTMLTag_col,
120 /*parent,leaf*/ kNone, true
121 },
122 {
123 /*tag*/ eHTMLTag_colgroup,
124 /*parent,leaf*/ kNone, false
125 },
126 {
127 /*tag*/ eHTMLTag_content,
128 /*parent,leaf*/ kNone, false
129 },
130 {
131 /*tag*/ eHTMLTag_data,
132 /*parent,leaf*/ kPhrase, false
133 },
134 {
135 /*tag*/ eHTMLTag_datalist,
136 /*parent,leaf*/ kSpecial, false
137 },
138 {
139 /*tag*/ eHTMLTag_dd,
140 /*parent,leaf*/ kInlineEntity, false
141 },
142 {
143 /*tag*/ eHTMLTag_del,
144 /*parent,leaf*/ kFlowEntity, false
145 },
146 {
147 /*tag*/ eHTMLTag_dfn,
148 /*parent,leaf*/ kPhrase, false
149 },
150 {
151 /*tag*/ eHTMLTag_dir,
152 /*parent,leaf*/ kList, false
153 },
154 {
155 /*tag*/ eHTMLTag_div,
156 /*parent,leaf*/ kBlock, false
157 },
158 {
159 /*tag*/ eHTMLTag_dl,
160 /*parent,leaf*/ kBlock, false
161 },
162 {
163 /*tag*/ eHTMLTag_dt,
164 /*parent,leaf*/ kInlineEntity, false
165 },
166 {
167 /*tag*/ eHTMLTag_em,
168 /*parent,leaf*/ kPhrase, false
169 },
170 {
171 /*tag*/ eHTMLTag_embed,
172 /*parent,leaf*/ kSpecial, true
173 },
174 {
175 /*tag*/ eHTMLTag_fieldset,
176 /*parent,leaf*/ kBlock, false
177 },
178 {
179 /*tag*/ eHTMLTag_figcaption,
180 /*parent,leaf*/ kPhrase, false
181 },
182 {
183 /*tag*/ eHTMLTag_figure,
184 /*parent,leaf*/ kBlock, false
185 },
186 {
187 /*tag*/ eHTMLTag_font,
188 /*parent,leaf*/ kFontStyle, false
189 },
190 {
191 /*tag*/ eHTMLTag_footer,
192 /*parent,leaf*/ kBlock, false
193 },
194 {
195 /*tag*/ eHTMLTag_form,
196 /*parent,leaf*/ kBlock, false
197 },
198 {
199 /*tag*/ eHTMLTag_frame,
200 /*parent,leaf*/ kNone, true
201 },
202 {
203 /*tag*/ eHTMLTag_frameset,
204 /*parent,leaf*/ kHTMLContent, false
205 },
206 {
207 /*tag*/ eHTMLTag_h1,
208 /*parent,leaf*/ kHeading, false
209 },
210 {
211 /*tag*/ eHTMLTag_h2,
212 /*parent,leaf*/ kHeading, false
213 },
214 {
215 /*tag*/ eHTMLTag_h3,
216 /*parent,leaf*/ kHeading, false
217 },
218 {
219 /*tag*/ eHTMLTag_h4,
220 /*parent,leaf*/ kHeading, false
221 },
222 {
223 /*tag*/ eHTMLTag_h5,
224 /*parent,leaf*/ kHeading, false
225 },
226 {
227 /*tag*/ eHTMLTag_h6,
228 /*parent,leaf*/ kHeading, false
229 },
230 {
231 /*tag*/ eHTMLTag_head,
232 /*parent,leaf*/ kHTMLContent, false
233 },
234 {
235 /*tag*/ eHTMLTag_header,
236 /*parent,leaf*/ kBlock, false
237 },
238 {
239 /*tag*/ eHTMLTag_hgroup,
240 /*parent,leaf*/ kBlock, false
241 },
242 {
243 /*tag*/ eHTMLTag_hr,
244 /*parent,leaf*/ kBlock, true
245 },
246 {
247 /*tag*/ eHTMLTag_html,
248 /*parent,leaf*/ kNone, false
249 },
250 {
251 /*tag*/ eHTMLTag_i,
252 /*parent,leaf*/ kFontStyle, false
253 },
254 {
255 /*tag*/ eHTMLTag_iframe,
256 /*parent,leaf*/ kSpecial, false
257 },
258 {
259 /*tag*/ eHTMLTag_image,
260 /*parent,leaf*/ kSpecial, true
261 },
262 {
263 /*tag*/ eHTMLTag_img,
264 /*parent,leaf*/ kSpecial, true
265 },
266 {
267 /*tag*/ eHTMLTag_input,
268 /*parent,leaf*/ kFormControl, true
269 },
270 {
271 /*tag*/ eHTMLTag_ins,
272 /*parent,leaf*/ kFlowEntity, false
273 },
274 {
275 /*tag*/ eHTMLTag_kbd,
276 /*parent,leaf*/ kPhrase, false
277 },
278 {
279 /*tag*/ eHTMLTag_keygen,
280 /*parent,leaf*/ kFlowEntity, true
281 },
282 {
283 /*tag*/ eHTMLTag_label,
284 /*parent,leaf*/ kFormControl, false
285 },
286 {
287 /*tag*/ eHTMLTag_legend,
288 /*parent,leaf*/ kNone, false
289 },
290 {
291 /*tag*/ eHTMLTag_li,
292 /*parent,leaf*/ kBlockEntity, false
293 },
294 {
295 /*tag*/ eHTMLTag_link,
296 /*parent,leaf*/ kAllTags - kHeadContent, true
297 },
298 {
299 /*tag*/ eHTMLTag_listing,
300 /*parent,leaf*/ kPreformatted, false
301 },
302 {
303 /*tag*/ eHTMLTag_main,
304 /*parent,leaf*/ kBlock, false
305 },
306 {
307 /*tag*/ eHTMLTag_map,
308 /*parent,leaf*/ kSpecial, false
309 },
310 {
311 /*tag*/ eHTMLTag_mark,
312 /*parent,leaf*/ kSpecial, false
313 },
314 {
315 /*tag*/ eHTMLTag_marquee,
316 /*parent,leaf*/ kSpecial, false
317 },
318 {
319 /*tag*/ eHTMLTag_menu,
320 /*parent,leaf*/ kList, false
321 },
322 {
323 /*tag*/ eHTMLTag_menuitem,
324 /*parent,leaf*/ kFlowEntity, false
325 },
326 {
327 /*tag*/ eHTMLTag_meta,
328 /*parent,leaf*/ kHeadContent, true
329 },
330 {
331 /*tag*/ eHTMLTag_meter,
332 /*parent,leaf*/ kFormControl, false
333 },
334 {
335 /*tag*/ eHTMLTag_multicol,
336 /*parent,leaf*/ kBlock, false
337 },
338 {
339 /*tag*/ eHTMLTag_nav,
340 /*parent,leaf*/ kBlock, false
341 },
342 {
343 /*tag*/ eHTMLTag_nobr,
344 /*parent,leaf*/ kExtensions, false
345 },
346 {
347 /*tag*/ eHTMLTag_noembed,
348 /*parent,leaf*/ kFlowEntity, false
349 },
350 {
351 /*tag*/ eHTMLTag_noframes,
352 /*parent,leaf*/ kFlowEntity, false
353 },
354 {
355 /*tag*/ eHTMLTag_noscript,
356 /*parent,leaf*/ kFlowEntity|kHeadMisc, false
357 },
358 {
359 /*tag*/ eHTMLTag_object,
360 /*parent,leaf*/ kSpecial, false
361 },
362 {
363 /*tag*/ eHTMLTag_ol,
364 /*parent,leaf*/ kList, false
365 },
366 {
367 /*tag*/ eHTMLTag_optgroup,
368 /*parent,leaf*/ kNone, false
369 },
370 {
371 /*tag*/ eHTMLTag_option,
372 /*parent,leaf*/ kNone, false
373 },
374 {
375 /*tag*/ eHTMLTag_output,
376 /*parent,leaf*/ kSpecial, false
377 },
378 {
379 /*tag*/ eHTMLTag_p,
380 /*parent,leaf*/ kBlock, false
381 },
382 {
383 /*tag*/ eHTMLTag_param,
384 /*parent,leaf*/ kSpecial, true
385 },
386 {
387 /*tag*/ eHTMLTag_plaintext,
388 /*parent,leaf*/ kExtensions, false
389 },
390 {
391 /*tag*/ eHTMLTag_pre,
392 /*parent,leaf*/ kBlock|kPreformatted, false
393 },
394 {
395 /*tag*/ eHTMLTag_progress,
396 /*parent,leaf*/ kFormControl, false
397 },
398 {
399 /*tag*/ eHTMLTag_q,
400 /*parent,leaf*/ kSpecial, false
401 },
402 {
403 /*tag*/ eHTMLTag_s,
404 /*parent,leaf*/ kFontStyle, false
405 },
406 {
407 /*tag*/ eHTMLTag_samp,
408 /*parent,leaf*/ kPhrase, false
409 },
410 {
411 /*tag*/ eHTMLTag_script,
412 /*parent,leaf*/ (kSpecial|kHeadContent), false
413 },
414 {
415 /*tag*/ eHTMLTag_section,
416 /*parent,leaf*/ kBlock, false
417 },
418 {
419 /*tag*/ eHTMLTag_select,
420 /*parent,leaf*/ kFormControl, false
421 },
422 {
423 /*tag*/ eHTMLTag_shadow,
424 /*parent,leaf*/ kFlowEntity, false
425 },
426 {
427 /*tag*/ eHTMLTag_small,
428 /*parent,leaf*/ kFontStyle, false
429 },
430 {
431 /*tag*/ eHTMLTag_source,
432 /*parent,leaf*/ kSpecial, true
433 },
434 {
435 /*tag*/ eHTMLTag_span,
436 /*parent,leaf*/ kSpecial, false
437 },
438 {
439 /*tag*/ eHTMLTag_strike,
440 /*parent,leaf*/ kFontStyle, false
441 },
442 {
443 /*tag*/ eHTMLTag_strong,
444 /*parent,leaf*/ kPhrase, false
445 },
446 {
447 /*tag*/ eHTMLTag_style,
448 /*parent,leaf*/ kAllTags - kHeadContent, false
449 },
450 {
451 /*tag*/ eHTMLTag_sub,
452 /*parent,leaf*/ kSpecial, false
453 },
454 {
455 /*tag*/ eHTMLTag_sup,
456 /*parent,leaf*/ kSpecial, false
457 },
458 {
459 /*tag*/ eHTMLTag_table,
460 /*parent,leaf*/ kBlock, false
461 },
462 {
463 /*tag*/ eHTMLTag_tbody,
464 /*parent,leaf*/ kNone, false
465 },
466 {
467 /*tag*/ eHTMLTag_td,
468 /*parent,leaf*/ kNone, false
469 },
470 {
471 /*tag*/ eHTMLTag_textarea,
472 /*parent,leaf*/ kFormControl, false
473 },
474 {
475 /*tag*/ eHTMLTag_tfoot,
476 /*parent,leaf*/ kNone, false
477 },
478 {
479 /*tag*/ eHTMLTag_th,
480 /*parent,leaf*/ kNone, false
481 },
482 {
483 /*tag*/ eHTMLTag_thead,
484 /*parent,leaf*/ kNone, false
485 },
486 {
487 /*tag*/ eHTMLTag_template,
488 /*parent,leaf*/ kNone, false
489 },
490 {
491 /*tag*/ eHTMLTag_time,
492 /*parent,leaf*/ kPhrase, false
493 },
494 {
495 /*tag*/ eHTMLTag_title,
496 /*parent,leaf*/ kHeadContent, false
497 },
498 {
499 /*tag*/ eHTMLTag_tr,
500 /*parent,leaf*/ kNone, false
501 },
502 {
503 /*tag*/ eHTMLTag_track,
504 /*parent,leaf*/ kSpecial, true
505 },
506 {
507 /*tag*/ eHTMLTag_tt,
508 /*parent,leaf*/ kFontStyle, false
509 },
510 {
511 /*tag*/ eHTMLTag_u,
512 /*parent,leaf*/ kFontStyle, false
513 },
514 {
515 /*tag*/ eHTMLTag_ul,
516 /*parent,leaf*/ kList, false
517 },
518 {
519 /*tag*/ eHTMLTag_var,
520 /*parent,leaf*/ kPhrase, false
521 },
522 {
523 /*tag*/ eHTMLTag_video,
524 /*parent,leaf*/ kSpecial, false
525 },
526 {
527 /*tag*/ eHTMLTag_wbr,
528 /*parent,leaf*/ kExtensions, true
529 },
530 {
531 /*tag*/ eHTMLTag_xmp,
532 /*parent,leaf*/ kInlineEntity|kPreformatted, false
533 },
534 {
535 /*tag*/ eHTMLTag_text,
536 /*parent,leaf*/ kFlowEntity, true
537 },
538 {
539 /*tag*/ eHTMLTag_whitespace,
540 /*parent,leaf*/ kFlowEntity|kHeadMisc, true
541 },
542 {
543 /*tag*/ eHTMLTag_newline,
544 /*parent,leaf*/ kFlowEntity|kHeadMisc, true
545 },
546 {
547 /*tag*/ eHTMLTag_comment,
548 /*parent,leaf*/ kFlowEntity|kHeadMisc, false
549 },
550 {
551 /*tag*/ eHTMLTag_entity,
552 /*parent,leaf*/ kFlowEntity, false
553 },
554 {
555 /*tag*/ eHTMLTag_doctypeDecl,
556 /*parent,leaf*/ kFlowEntity, false
557 },
558 {
559 /*tag*/ eHTMLTag_markupDecl,
560 /*parent,leaf*/ kFlowEntity, false
561 },
562 {
563 /*tag*/ eHTMLTag_instruction,
564 /*parent,leaf*/ kFlowEntity, false
565 },
566 {
567 /*tag*/ eHTMLTag_userdefined,
568 /*parent,leaf*/ (kFlowEntity|kHeadMisc), false
569 },
570 };
571
572 /*********************************************************************************************/
573
574 bool nsHTMLElement::IsContainer(eHTMLTags aChild)
575 {
576 return !gHTMLElements[aChild].mLeaf;
577 }
578
579 bool nsHTMLElement::IsMemberOf(int32_t aSet) const
580 {
581 return TestBits(aSet,mParentBits);
582 }
583
584 #ifdef DEBUG
585 void CheckElementTable()
586 {
587 for (eHTMLTags t = eHTMLTag_unknown; t <= eHTMLTag_userdefined; t = eHTMLTags(t + 1)) {
588 NS_ASSERTION(gHTMLElements[t].mTagID == t, "gHTMLElements entries does match tag list.");
589 }
590 }
591 #endif

mercurial