|
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 |