Line data Source code
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_details,
148 : /*parent,leaf*/ kBlock, false
149 : },
150 : {
151 : /*tag*/ eHTMLTag_dfn,
152 : /*parent,leaf*/ kPhrase, false
153 : },
154 : {
155 : /*tag*/ eHTMLTag_dialog,
156 : /*parent,leaf*/ kBlock, false
157 : },
158 : {
159 : /*tag*/ eHTMLTag_dir,
160 : /*parent,leaf*/ kList, false
161 : },
162 : {
163 : /*tag*/ eHTMLTag_div,
164 : /*parent,leaf*/ kBlock, false
165 : },
166 : {
167 : /*tag*/ eHTMLTag_dl,
168 : /*parent,leaf*/ kBlock, false
169 : },
170 : {
171 : /*tag*/ eHTMLTag_dt,
172 : /*parent,leaf*/ kInlineEntity, false
173 : },
174 : {
175 : /*tag*/ eHTMLTag_em,
176 : /*parent,leaf*/ kPhrase, false
177 : },
178 : {
179 : /*tag*/ eHTMLTag_embed,
180 : /*parent,leaf*/ kSpecial, true
181 : },
182 : {
183 : /*tag*/ eHTMLTag_fieldset,
184 : /*parent,leaf*/ kBlock, false
185 : },
186 : {
187 : /*tag*/ eHTMLTag_figcaption,
188 : /*parent,leaf*/ kPhrase, false
189 : },
190 : {
191 : /*tag*/ eHTMLTag_figure,
192 : /*parent,leaf*/ kBlock, false
193 : },
194 : {
195 : /*tag*/ eHTMLTag_font,
196 : /*parent,leaf*/ kFontStyle, false
197 : },
198 : {
199 : /*tag*/ eHTMLTag_footer,
200 : /*parent,leaf*/ kBlock, false
201 : },
202 : {
203 : /*tag*/ eHTMLTag_form,
204 : /*parent,leaf*/ kBlock, false
205 : },
206 : {
207 : /*tag*/ eHTMLTag_frame,
208 : /*parent,leaf*/ kNone, true
209 : },
210 : {
211 : /*tag*/ eHTMLTag_frameset,
212 : /*parent,leaf*/ kHTMLContent, false
213 : },
214 : {
215 : /*tag*/ eHTMLTag_h1,
216 : /*parent,leaf*/ kHeading, false
217 : },
218 : {
219 : /*tag*/ eHTMLTag_h2,
220 : /*parent,leaf*/ kHeading, false
221 : },
222 : {
223 : /*tag*/ eHTMLTag_h3,
224 : /*parent,leaf*/ kHeading, false
225 : },
226 : {
227 : /*tag*/ eHTMLTag_h4,
228 : /*parent,leaf*/ kHeading, false
229 : },
230 : {
231 : /*tag*/ eHTMLTag_h5,
232 : /*parent,leaf*/ kHeading, false
233 : },
234 : {
235 : /*tag*/ eHTMLTag_h6,
236 : /*parent,leaf*/ kHeading, false
237 : },
238 : {
239 : /*tag*/ eHTMLTag_head,
240 : /*parent,leaf*/ kHTMLContent, false
241 : },
242 : {
243 : /*tag*/ eHTMLTag_header,
244 : /*parent,leaf*/ kBlock, false
245 : },
246 : {
247 : /*tag*/ eHTMLTag_hgroup,
248 : /*parent,leaf*/ kBlock, false
249 : },
250 : {
251 : /*tag*/ eHTMLTag_hr,
252 : /*parent,leaf*/ kBlock, true
253 : },
254 : {
255 : /*tag*/ eHTMLTag_html,
256 : /*parent,leaf*/ kNone, false
257 : },
258 : {
259 : /*tag*/ eHTMLTag_i,
260 : /*parent,leaf*/ kFontStyle, false
261 : },
262 : {
263 : /*tag*/ eHTMLTag_iframe,
264 : /*parent,leaf*/ kSpecial, false
265 : },
266 : {
267 : /*tag*/ eHTMLTag_image,
268 : /*parent,leaf*/ kSpecial, true
269 : },
270 : {
271 : /*tag*/ eHTMLTag_img,
272 : /*parent,leaf*/ kSpecial, true
273 : },
274 : {
275 : /*tag*/ eHTMLTag_input,
276 : /*parent,leaf*/ kFormControl, true
277 : },
278 : {
279 : /*tag*/ eHTMLTag_ins,
280 : /*parent,leaf*/ kFlowEntity, false
281 : },
282 : {
283 : /*tag*/ eHTMLTag_kbd,
284 : /*parent,leaf*/ kPhrase, false
285 : },
286 : {
287 : /*tag*/ eHTMLTag_keygen,
288 : /*parent,leaf*/ kFlowEntity, true
289 : },
290 : {
291 : /*tag*/ eHTMLTag_label,
292 : /*parent,leaf*/ kFormControl, false
293 : },
294 : {
295 : /*tag*/ eHTMLTag_legend,
296 : /*parent,leaf*/ kNone, false
297 : },
298 : {
299 : /*tag*/ eHTMLTag_li,
300 : /*parent,leaf*/ kBlockEntity, false
301 : },
302 : {
303 : /*tag*/ eHTMLTag_link,
304 : /*parent,leaf*/ kAllTags - kHeadContent, true
305 : },
306 : {
307 : /*tag*/ eHTMLTag_listing,
308 : /*parent,leaf*/ kPreformatted, false
309 : },
310 : {
311 : /*tag*/ eHTMLTag_main,
312 : /*parent,leaf*/ kBlock, false
313 : },
314 : {
315 : /*tag*/ eHTMLTag_map,
316 : /*parent,leaf*/ kSpecial, false
317 : },
318 : {
319 : /*tag*/ eHTMLTag_mark,
320 : /*parent,leaf*/ kSpecial, false
321 : },
322 : {
323 : /*tag*/ eHTMLTag_marquee,
324 : /*parent,leaf*/ kSpecial, false
325 : },
326 : {
327 : /*tag*/ eHTMLTag_menu,
328 : /*parent,leaf*/ kList, false
329 : },
330 : {
331 : /*tag*/ eHTMLTag_menuitem,
332 : /*parent,leaf*/ kFlowEntity, false
333 : },
334 : {
335 : /*tag*/ eHTMLTag_meta,
336 : /*parent,leaf*/ kHeadContent, true
337 : },
338 : {
339 : /*tag*/ eHTMLTag_meter,
340 : /*parent,leaf*/ kFormControl, false
341 : },
342 : {
343 : /*tag*/ eHTMLTag_multicol,
344 : /*parent,leaf*/ kBlock, false
345 : },
346 : {
347 : /*tag*/ eHTMLTag_nav,
348 : /*parent,leaf*/ kBlock, false
349 : },
350 : {
351 : /*tag*/ eHTMLTag_nobr,
352 : /*parent,leaf*/ kExtensions, false
353 : },
354 : {
355 : /*tag*/ eHTMLTag_noembed,
356 : /*parent,leaf*/ kFlowEntity, false
357 : },
358 : {
359 : /*tag*/ eHTMLTag_noframes,
360 : /*parent,leaf*/ kFlowEntity, false
361 : },
362 : {
363 : /*tag*/ eHTMLTag_noscript,
364 : /*parent,leaf*/ kFlowEntity|kHeadMisc, false
365 : },
366 : {
367 : /*tag*/ eHTMLTag_object,
368 : /*parent,leaf*/ kSpecial, false
369 : },
370 : {
371 : /*tag*/ eHTMLTag_ol,
372 : /*parent,leaf*/ kList, false
373 : },
374 : {
375 : /*tag*/ eHTMLTag_optgroup,
376 : /*parent,leaf*/ kNone, false
377 : },
378 : {
379 : /*tag*/ eHTMLTag_option,
380 : /*parent,leaf*/ kNone, false
381 : },
382 : {
383 : /*tag*/ eHTMLTag_output,
384 : /*parent,leaf*/ kSpecial, false
385 : },
386 : {
387 : /*tag*/ eHTMLTag_p,
388 : /*parent,leaf*/ kBlock, false
389 : },
390 : {
391 : /*tag*/ eHTMLTag_param,
392 : /*parent,leaf*/ kSpecial, true
393 : },
394 : {
395 : /*tag*/ eHTMLTag_picture,
396 : /*parent,leaf*/ kSpecial, false
397 : },
398 : {
399 : /*tag*/ eHTMLTag_plaintext,
400 : /*parent,leaf*/ kExtensions, false
401 : },
402 : {
403 : /*tag*/ eHTMLTag_pre,
404 : /*parent,leaf*/ kBlock|kPreformatted, false
405 : },
406 : {
407 : /*tag*/ eHTMLTag_progress,
408 : /*parent,leaf*/ kFormControl, false
409 : },
410 : {
411 : /*tag*/ eHTMLTag_q,
412 : /*parent,leaf*/ kSpecial, false
413 : },
414 : {
415 : /*tag*/ eHTMLTag_rb,
416 : /*parent,leaf*/ kPhrase, false
417 : },
418 : {
419 : /*tag*/ eHTMLTag_rp,
420 : /*parent,leaf*/ kPhrase, false
421 : },
422 : {
423 : /*tag*/ eHTMLTag_rt,
424 : /*parent,leaf*/ kPhrase, false
425 : },
426 : {
427 : /*tag*/ eHTMLTag_rtc,
428 : /*parent,leaf*/ kPhrase, false
429 : },
430 : {
431 : /*tag*/ eHTMLTag_ruby,
432 : /*parent,leaf*/ kPhrase, false
433 : },
434 : {
435 : /*tag*/ eHTMLTag_s,
436 : /*parent,leaf*/ kFontStyle, false
437 : },
438 : {
439 : /*tag*/ eHTMLTag_samp,
440 : /*parent,leaf*/ kPhrase, false
441 : },
442 : {
443 : /*tag*/ eHTMLTag_script,
444 : /*parent,leaf*/ (kSpecial|kHeadContent), false
445 : },
446 : {
447 : /*tag*/ eHTMLTag_section,
448 : /*parent,leaf*/ kBlock, false
449 : },
450 : {
451 : /*tag*/ eHTMLTag_select,
452 : /*parent,leaf*/ kFormControl, false
453 : },
454 : {
455 : /*tag*/ eHTMLTag_shadow,
456 : /*parent,leaf*/ kFlowEntity, false
457 : },
458 : {
459 : /*tag*/ eHTMLTag_small,
460 : /*parent,leaf*/ kFontStyle, false
461 : },
462 : {
463 : /*tag*/ eHTMLTag_source,
464 : /*parent,leaf*/ kSpecial, true
465 : },
466 : {
467 : /*tag*/ eHTMLTag_span,
468 : /*parent,leaf*/ kSpecial, false
469 : },
470 : {
471 : /*tag*/ eHTMLTag_strike,
472 : /*parent,leaf*/ kFontStyle, false
473 : },
474 : {
475 : /*tag*/ eHTMLTag_strong,
476 : /*parent,leaf*/ kPhrase, false
477 : },
478 : {
479 : /*tag*/ eHTMLTag_style,
480 : /*parent,leaf*/ kAllTags - kHeadContent, false
481 : },
482 : {
483 : /*tag*/ eHTMLTag_sub,
484 : /*parent,leaf*/ kSpecial, false
485 : },
486 : {
487 : /*tag*/ eHTMLTag_summary,
488 : /*parent,leaf*/ kBlock, false
489 : },
490 : {
491 : /*tag*/ eHTMLTag_sup,
492 : /*parent,leaf*/ kSpecial, false
493 : },
494 : {
495 : /*tag*/ eHTMLTag_table,
496 : /*parent,leaf*/ kBlock, false
497 : },
498 : {
499 : /*tag*/ eHTMLTag_tbody,
500 : /*parent,leaf*/ kNone, false
501 : },
502 : {
503 : /*tag*/ eHTMLTag_td,
504 : /*parent,leaf*/ kNone, false
505 : },
506 : {
507 : /*tag*/ eHTMLTag_textarea,
508 : /*parent,leaf*/ kFormControl, false
509 : },
510 : {
511 : /*tag*/ eHTMLTag_tfoot,
512 : /*parent,leaf*/ kNone, false
513 : },
514 : {
515 : /*tag*/ eHTMLTag_th,
516 : /*parent,leaf*/ kNone, false
517 : },
518 : {
519 : /*tag*/ eHTMLTag_thead,
520 : /*parent,leaf*/ kNone, false
521 : },
522 : {
523 : /*tag*/ eHTMLTag_template,
524 : /*parent,leaf*/ kNone, false
525 : },
526 : {
527 : /*tag*/ eHTMLTag_time,
528 : /*parent,leaf*/ kPhrase, false
529 : },
530 : {
531 : /*tag*/ eHTMLTag_title,
532 : /*parent,leaf*/ kHeadContent, false
533 : },
534 : {
535 : /*tag*/ eHTMLTag_tr,
536 : /*parent,leaf*/ kNone, false
537 : },
538 : {
539 : /*tag*/ eHTMLTag_track,
540 : /*parent,leaf*/ kSpecial, true
541 : },
542 : {
543 : /*tag*/ eHTMLTag_tt,
544 : /*parent,leaf*/ kFontStyle, false
545 : },
546 : {
547 : /*tag*/ eHTMLTag_u,
548 : /*parent,leaf*/ kFontStyle, false
549 : },
550 : {
551 : /*tag*/ eHTMLTag_ul,
552 : /*parent,leaf*/ kList, false
553 : },
554 : {
555 : /*tag*/ eHTMLTag_var,
556 : /*parent,leaf*/ kPhrase, false
557 : },
558 : {
559 : /*tag*/ eHTMLTag_video,
560 : /*parent,leaf*/ kSpecial, false
561 : },
562 : {
563 : /*tag*/ eHTMLTag_wbr,
564 : /*parent,leaf*/ kExtensions, true
565 : },
566 : {
567 : /*tag*/ eHTMLTag_xmp,
568 : /*parent,leaf*/ kInlineEntity|kPreformatted, false
569 : },
570 : {
571 : /*tag*/ eHTMLTag_text,
572 : /*parent,leaf*/ kFlowEntity, true
573 : },
574 : {
575 : /*tag*/ eHTMLTag_whitespace,
576 : /*parent,leaf*/ kFlowEntity|kHeadMisc, true
577 : },
578 : {
579 : /*tag*/ eHTMLTag_newline,
580 : /*parent,leaf*/ kFlowEntity|kHeadMisc, true
581 : },
582 : {
583 : /*tag*/ eHTMLTag_comment,
584 : /*parent,leaf*/ kFlowEntity|kHeadMisc, false
585 : },
586 : {
587 : /*tag*/ eHTMLTag_entity,
588 : /*parent,leaf*/ kFlowEntity, false
589 : },
590 : {
591 : /*tag*/ eHTMLTag_doctypeDecl,
592 : /*parent,leaf*/ kFlowEntity, false
593 : },
594 : {
595 : /*tag*/ eHTMLTag_markupDecl,
596 : /*parent,leaf*/ kFlowEntity, false
597 : },
598 : {
599 : /*tag*/ eHTMLTag_instruction,
600 : /*parent,leaf*/ kFlowEntity, false
601 : },
602 : {
603 : /*tag*/ eHTMLTag_userdefined,
604 : /*parent,leaf*/ (kFlowEntity|kHeadMisc), false
605 : },
606 : };
607 :
608 : /*********************************************************************************************/
609 :
610 0 : bool nsHTMLElement::IsContainer(eHTMLTags aChild)
611 : {
612 0 : return !gHTMLElements[aChild].mLeaf;
613 : }
614 :
615 0 : bool nsHTMLElement::IsMemberOf(int32_t aSet) const
616 : {
617 0 : return TestBits(aSet,mParentBits);
618 : }
619 :
620 : #ifdef DEBUG
621 2 : void CheckElementTable()
622 : {
623 296 : for (eHTMLTags t = eHTMLTag_unknown; t <= eHTMLTag_userdefined; t = eHTMLTags(t + 1)) {
624 294 : NS_ASSERTION(gHTMLElements[t].mTagID == t, "gHTMLElements entries does match tag list.");
625 : }
626 2 : }
627 : #endif
|