1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/parser/htmlparser/src/nsElementTable.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,591 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* vim: set ts=2 sw=2 et tw=78: */ 1.6 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.9 + 1.10 + 1.11 +#include "nsIAtom.h" 1.12 +#include "nsElementTable.h" 1.13 + 1.14 +/***************************************************************************** 1.15 + Now it's time to list all the html elements all with their capabilities... 1.16 +******************************************************************************/ 1.17 + 1.18 +// The Element Table (sung to the tune of Modern Major General) 1.19 + 1.20 +const nsHTMLElement gHTMLElements[] = { 1.21 + { 1.22 + /*tag*/ eHTMLTag_unknown, 1.23 + /*parent,leaf*/ kNone, true 1.24 + }, 1.25 + { 1.26 + /*tag*/ eHTMLTag_a, 1.27 + /*parent,leaf*/ kSpecial, false 1.28 + }, 1.29 + { 1.30 + /*tag*/ eHTMLTag_abbr, 1.31 + /*parent,leaf*/ kPhrase, false 1.32 + }, 1.33 + { 1.34 + /*tag*/ eHTMLTag_acronym, 1.35 + /*parent,leaf*/ kPhrase, false 1.36 + }, 1.37 + { 1.38 + /*tag*/ eHTMLTag_address, 1.39 + /*parent,leaf*/ kBlock, false 1.40 + }, 1.41 + { 1.42 + /*tag*/ eHTMLTag_applet, 1.43 + /*parent,leaf*/ kSpecial, false 1.44 + }, 1.45 + { 1.46 + /*tag*/ eHTMLTag_area, 1.47 + /*parent,leaf*/ kNone, true 1.48 + }, 1.49 + { 1.50 + /*tag*/ eHTMLTag_article, 1.51 + /*parent,leaf*/ kBlock, false 1.52 + }, 1.53 + { 1.54 + /*tag*/ eHTMLTag_aside, 1.55 + /*parent,leaf*/ kBlock, false 1.56 + }, 1.57 + { 1.58 + /*tag*/ eHTMLTag_audio, 1.59 + /*parent,leaf*/ kSpecial, false 1.60 + }, 1.61 + { 1.62 + /*tag*/ eHTMLTag_b, 1.63 + /*parent,leaf*/ kFontStyle, false 1.64 + }, 1.65 + { 1.66 + /*tag*/ eHTMLTag_base, 1.67 + /*parent,leaf*/ kHeadContent, true 1.68 + }, 1.69 + { 1.70 + /*tag*/ eHTMLTag_basefont, 1.71 + /*parent,leaf*/ kSpecial, true 1.72 + }, 1.73 + { 1.74 + /*tag*/ eHTMLTag_bdo, 1.75 + /*parent,leaf*/ kSpecial, false 1.76 + }, 1.77 + { 1.78 + /*tag*/ eHTMLTag_bgsound, 1.79 + /*parent,leaf*/ (kFlowEntity|kHeadMisc), true 1.80 + }, 1.81 + { 1.82 + /*tag*/ eHTMLTag_big, 1.83 + /*parent,leaf*/ kFontStyle, false 1.84 + }, 1.85 + { 1.86 + /*tag*/ eHTMLTag_blockquote, 1.87 + /*parent,leaf*/ kBlock, false 1.88 + }, 1.89 + { 1.90 + /*tag*/ eHTMLTag_body, 1.91 + /*parent,leaf*/ kHTMLContent, false 1.92 + }, 1.93 + { 1.94 + /*tag*/ eHTMLTag_br, 1.95 + /*parent,leaf*/ kSpecial, true 1.96 + }, 1.97 + { 1.98 + /*tag*/ eHTMLTag_button, 1.99 + /*parent,leaf*/ kFormControl, false 1.100 + }, 1.101 + { 1.102 + /*tag*/ eHTMLTag_canvas, 1.103 + /*parent,leaf*/ kSpecial, false 1.104 + }, 1.105 + { 1.106 + /*tag*/ eHTMLTag_caption, 1.107 + /*parent,leaf*/ kNone, false 1.108 + }, 1.109 + { 1.110 + /*tag*/ eHTMLTag_center, 1.111 + /*parent,leaf*/ kBlock, false 1.112 + }, 1.113 + { 1.114 + /*tag*/ eHTMLTag_cite, 1.115 + /*parent,leaf*/ kPhrase, false 1.116 + }, 1.117 + { 1.118 + /*tag*/ eHTMLTag_code, 1.119 + /*parent,leaf*/ kPhrase, false 1.120 + }, 1.121 + { 1.122 + /*tag*/ eHTMLTag_col, 1.123 + /*parent,leaf*/ kNone, true 1.124 + }, 1.125 + { 1.126 + /*tag*/ eHTMLTag_colgroup, 1.127 + /*parent,leaf*/ kNone, false 1.128 + }, 1.129 + { 1.130 + /*tag*/ eHTMLTag_content, 1.131 + /*parent,leaf*/ kNone, false 1.132 + }, 1.133 + { 1.134 + /*tag*/ eHTMLTag_data, 1.135 + /*parent,leaf*/ kPhrase, false 1.136 + }, 1.137 + { 1.138 + /*tag*/ eHTMLTag_datalist, 1.139 + /*parent,leaf*/ kSpecial, false 1.140 + }, 1.141 + { 1.142 + /*tag*/ eHTMLTag_dd, 1.143 + /*parent,leaf*/ kInlineEntity, false 1.144 + }, 1.145 + { 1.146 + /*tag*/ eHTMLTag_del, 1.147 + /*parent,leaf*/ kFlowEntity, false 1.148 + }, 1.149 + { 1.150 + /*tag*/ eHTMLTag_dfn, 1.151 + /*parent,leaf*/ kPhrase, false 1.152 + }, 1.153 + { 1.154 + /*tag*/ eHTMLTag_dir, 1.155 + /*parent,leaf*/ kList, false 1.156 + }, 1.157 + { 1.158 + /*tag*/ eHTMLTag_div, 1.159 + /*parent,leaf*/ kBlock, false 1.160 + }, 1.161 + { 1.162 + /*tag*/ eHTMLTag_dl, 1.163 + /*parent,leaf*/ kBlock, false 1.164 + }, 1.165 + { 1.166 + /*tag*/ eHTMLTag_dt, 1.167 + /*parent,leaf*/ kInlineEntity, false 1.168 + }, 1.169 + { 1.170 + /*tag*/ eHTMLTag_em, 1.171 + /*parent,leaf*/ kPhrase, false 1.172 + }, 1.173 + { 1.174 + /*tag*/ eHTMLTag_embed, 1.175 + /*parent,leaf*/ kSpecial, true 1.176 + }, 1.177 + { 1.178 + /*tag*/ eHTMLTag_fieldset, 1.179 + /*parent,leaf*/ kBlock, false 1.180 + }, 1.181 + { 1.182 + /*tag*/ eHTMLTag_figcaption, 1.183 + /*parent,leaf*/ kPhrase, false 1.184 + }, 1.185 + { 1.186 + /*tag*/ eHTMLTag_figure, 1.187 + /*parent,leaf*/ kBlock, false 1.188 + }, 1.189 + { 1.190 + /*tag*/ eHTMLTag_font, 1.191 + /*parent,leaf*/ kFontStyle, false 1.192 + }, 1.193 + { 1.194 + /*tag*/ eHTMLTag_footer, 1.195 + /*parent,leaf*/ kBlock, false 1.196 + }, 1.197 + { 1.198 + /*tag*/ eHTMLTag_form, 1.199 + /*parent,leaf*/ kBlock, false 1.200 + }, 1.201 + { 1.202 + /*tag*/ eHTMLTag_frame, 1.203 + /*parent,leaf*/ kNone, true 1.204 + }, 1.205 + { 1.206 + /*tag*/ eHTMLTag_frameset, 1.207 + /*parent,leaf*/ kHTMLContent, false 1.208 + }, 1.209 + { 1.210 + /*tag*/ eHTMLTag_h1, 1.211 + /*parent,leaf*/ kHeading, false 1.212 + }, 1.213 + { 1.214 + /*tag*/ eHTMLTag_h2, 1.215 + /*parent,leaf*/ kHeading, false 1.216 + }, 1.217 + { 1.218 + /*tag*/ eHTMLTag_h3, 1.219 + /*parent,leaf*/ kHeading, false 1.220 + }, 1.221 + { 1.222 + /*tag*/ eHTMLTag_h4, 1.223 + /*parent,leaf*/ kHeading, false 1.224 + }, 1.225 + { 1.226 + /*tag*/ eHTMLTag_h5, 1.227 + /*parent,leaf*/ kHeading, false 1.228 + }, 1.229 + { 1.230 + /*tag*/ eHTMLTag_h6, 1.231 + /*parent,leaf*/ kHeading, false 1.232 + }, 1.233 + { 1.234 + /*tag*/ eHTMLTag_head, 1.235 + /*parent,leaf*/ kHTMLContent, false 1.236 + }, 1.237 + { 1.238 + /*tag*/ eHTMLTag_header, 1.239 + /*parent,leaf*/ kBlock, false 1.240 + }, 1.241 + { 1.242 + /*tag*/ eHTMLTag_hgroup, 1.243 + /*parent,leaf*/ kBlock, false 1.244 + }, 1.245 + { 1.246 + /*tag*/ eHTMLTag_hr, 1.247 + /*parent,leaf*/ kBlock, true 1.248 + }, 1.249 + { 1.250 + /*tag*/ eHTMLTag_html, 1.251 + /*parent,leaf*/ kNone, false 1.252 + }, 1.253 + { 1.254 + /*tag*/ eHTMLTag_i, 1.255 + /*parent,leaf*/ kFontStyle, false 1.256 + }, 1.257 + { 1.258 + /*tag*/ eHTMLTag_iframe, 1.259 + /*parent,leaf*/ kSpecial, false 1.260 + }, 1.261 + { 1.262 + /*tag*/ eHTMLTag_image, 1.263 + /*parent,leaf*/ kSpecial, true 1.264 + }, 1.265 + { 1.266 + /*tag*/ eHTMLTag_img, 1.267 + /*parent,leaf*/ kSpecial, true 1.268 + }, 1.269 + { 1.270 + /*tag*/ eHTMLTag_input, 1.271 + /*parent,leaf*/ kFormControl, true 1.272 + }, 1.273 + { 1.274 + /*tag*/ eHTMLTag_ins, 1.275 + /*parent,leaf*/ kFlowEntity, false 1.276 + }, 1.277 + { 1.278 + /*tag*/ eHTMLTag_kbd, 1.279 + /*parent,leaf*/ kPhrase, false 1.280 + }, 1.281 + { 1.282 + /*tag*/ eHTMLTag_keygen, 1.283 + /*parent,leaf*/ kFlowEntity, true 1.284 + }, 1.285 + { 1.286 + /*tag*/ eHTMLTag_label, 1.287 + /*parent,leaf*/ kFormControl, false 1.288 + }, 1.289 + { 1.290 + /*tag*/ eHTMLTag_legend, 1.291 + /*parent,leaf*/ kNone, false 1.292 + }, 1.293 + { 1.294 + /*tag*/ eHTMLTag_li, 1.295 + /*parent,leaf*/ kBlockEntity, false 1.296 + }, 1.297 + { 1.298 + /*tag*/ eHTMLTag_link, 1.299 + /*parent,leaf*/ kAllTags - kHeadContent, true 1.300 + }, 1.301 + { 1.302 + /*tag*/ eHTMLTag_listing, 1.303 + /*parent,leaf*/ kPreformatted, false 1.304 + }, 1.305 + { 1.306 + /*tag*/ eHTMLTag_main, 1.307 + /*parent,leaf*/ kBlock, false 1.308 + }, 1.309 + { 1.310 + /*tag*/ eHTMLTag_map, 1.311 + /*parent,leaf*/ kSpecial, false 1.312 + }, 1.313 + { 1.314 + /*tag*/ eHTMLTag_mark, 1.315 + /*parent,leaf*/ kSpecial, false 1.316 + }, 1.317 + { 1.318 + /*tag*/ eHTMLTag_marquee, 1.319 + /*parent,leaf*/ kSpecial, false 1.320 + }, 1.321 + { 1.322 + /*tag*/ eHTMLTag_menu, 1.323 + /*parent,leaf*/ kList, false 1.324 + }, 1.325 + { 1.326 + /*tag*/ eHTMLTag_menuitem, 1.327 + /*parent,leaf*/ kFlowEntity, false 1.328 + }, 1.329 + { 1.330 + /*tag*/ eHTMLTag_meta, 1.331 + /*parent,leaf*/ kHeadContent, true 1.332 + }, 1.333 + { 1.334 + /*tag*/ eHTMLTag_meter, 1.335 + /*parent,leaf*/ kFormControl, false 1.336 + }, 1.337 + { 1.338 + /*tag*/ eHTMLTag_multicol, 1.339 + /*parent,leaf*/ kBlock, false 1.340 + }, 1.341 + { 1.342 + /*tag*/ eHTMLTag_nav, 1.343 + /*parent,leaf*/ kBlock, false 1.344 + }, 1.345 + { 1.346 + /*tag*/ eHTMLTag_nobr, 1.347 + /*parent,leaf*/ kExtensions, false 1.348 + }, 1.349 + { 1.350 + /*tag*/ eHTMLTag_noembed, 1.351 + /*parent,leaf*/ kFlowEntity, false 1.352 + }, 1.353 + { 1.354 + /*tag*/ eHTMLTag_noframes, 1.355 + /*parent,leaf*/ kFlowEntity, false 1.356 + }, 1.357 + { 1.358 + /*tag*/ eHTMLTag_noscript, 1.359 + /*parent,leaf*/ kFlowEntity|kHeadMisc, false 1.360 + }, 1.361 + { 1.362 + /*tag*/ eHTMLTag_object, 1.363 + /*parent,leaf*/ kSpecial, false 1.364 + }, 1.365 + { 1.366 + /*tag*/ eHTMLTag_ol, 1.367 + /*parent,leaf*/ kList, false 1.368 + }, 1.369 + { 1.370 + /*tag*/ eHTMLTag_optgroup, 1.371 + /*parent,leaf*/ kNone, false 1.372 + }, 1.373 + { 1.374 + /*tag*/ eHTMLTag_option, 1.375 + /*parent,leaf*/ kNone, false 1.376 + }, 1.377 + { 1.378 + /*tag*/ eHTMLTag_output, 1.379 + /*parent,leaf*/ kSpecial, false 1.380 + }, 1.381 + { 1.382 + /*tag*/ eHTMLTag_p, 1.383 + /*parent,leaf*/ kBlock, false 1.384 + }, 1.385 + { 1.386 + /*tag*/ eHTMLTag_param, 1.387 + /*parent,leaf*/ kSpecial, true 1.388 + }, 1.389 + { 1.390 + /*tag*/ eHTMLTag_plaintext, 1.391 + /*parent,leaf*/ kExtensions, false 1.392 + }, 1.393 + { 1.394 + /*tag*/ eHTMLTag_pre, 1.395 + /*parent,leaf*/ kBlock|kPreformatted, false 1.396 + }, 1.397 + { 1.398 + /*tag*/ eHTMLTag_progress, 1.399 + /*parent,leaf*/ kFormControl, false 1.400 + }, 1.401 + { 1.402 + /*tag*/ eHTMLTag_q, 1.403 + /*parent,leaf*/ kSpecial, false 1.404 + }, 1.405 + { 1.406 + /*tag*/ eHTMLTag_s, 1.407 + /*parent,leaf*/ kFontStyle, false 1.408 + }, 1.409 + { 1.410 + /*tag*/ eHTMLTag_samp, 1.411 + /*parent,leaf*/ kPhrase, false 1.412 + }, 1.413 + { 1.414 + /*tag*/ eHTMLTag_script, 1.415 + /*parent,leaf*/ (kSpecial|kHeadContent), false 1.416 + }, 1.417 + { 1.418 + /*tag*/ eHTMLTag_section, 1.419 + /*parent,leaf*/ kBlock, false 1.420 + }, 1.421 + { 1.422 + /*tag*/ eHTMLTag_select, 1.423 + /*parent,leaf*/ kFormControl, false 1.424 + }, 1.425 + { 1.426 + /*tag*/ eHTMLTag_shadow, 1.427 + /*parent,leaf*/ kFlowEntity, false 1.428 + }, 1.429 + { 1.430 + /*tag*/ eHTMLTag_small, 1.431 + /*parent,leaf*/ kFontStyle, false 1.432 + }, 1.433 + { 1.434 + /*tag*/ eHTMLTag_source, 1.435 + /*parent,leaf*/ kSpecial, true 1.436 + }, 1.437 + { 1.438 + /*tag*/ eHTMLTag_span, 1.439 + /*parent,leaf*/ kSpecial, false 1.440 + }, 1.441 + { 1.442 + /*tag*/ eHTMLTag_strike, 1.443 + /*parent,leaf*/ kFontStyle, false 1.444 + }, 1.445 + { 1.446 + /*tag*/ eHTMLTag_strong, 1.447 + /*parent,leaf*/ kPhrase, false 1.448 + }, 1.449 + { 1.450 + /*tag*/ eHTMLTag_style, 1.451 + /*parent,leaf*/ kAllTags - kHeadContent, false 1.452 + }, 1.453 + { 1.454 + /*tag*/ eHTMLTag_sub, 1.455 + /*parent,leaf*/ kSpecial, false 1.456 + }, 1.457 + { 1.458 + /*tag*/ eHTMLTag_sup, 1.459 + /*parent,leaf*/ kSpecial, false 1.460 + }, 1.461 + { 1.462 + /*tag*/ eHTMLTag_table, 1.463 + /*parent,leaf*/ kBlock, false 1.464 + }, 1.465 + { 1.466 + /*tag*/ eHTMLTag_tbody, 1.467 + /*parent,leaf*/ kNone, false 1.468 + }, 1.469 + { 1.470 + /*tag*/ eHTMLTag_td, 1.471 + /*parent,leaf*/ kNone, false 1.472 + }, 1.473 + { 1.474 + /*tag*/ eHTMLTag_textarea, 1.475 + /*parent,leaf*/ kFormControl, false 1.476 + }, 1.477 + { 1.478 + /*tag*/ eHTMLTag_tfoot, 1.479 + /*parent,leaf*/ kNone, false 1.480 + }, 1.481 + { 1.482 + /*tag*/ eHTMLTag_th, 1.483 + /*parent,leaf*/ kNone, false 1.484 + }, 1.485 + { 1.486 + /*tag*/ eHTMLTag_thead, 1.487 + /*parent,leaf*/ kNone, false 1.488 + }, 1.489 + { 1.490 + /*tag*/ eHTMLTag_template, 1.491 + /*parent,leaf*/ kNone, false 1.492 + }, 1.493 + { 1.494 + /*tag*/ eHTMLTag_time, 1.495 + /*parent,leaf*/ kPhrase, false 1.496 + }, 1.497 + { 1.498 + /*tag*/ eHTMLTag_title, 1.499 + /*parent,leaf*/ kHeadContent, false 1.500 + }, 1.501 + { 1.502 + /*tag*/ eHTMLTag_tr, 1.503 + /*parent,leaf*/ kNone, false 1.504 + }, 1.505 + { 1.506 + /*tag*/ eHTMLTag_track, 1.507 + /*parent,leaf*/ kSpecial, true 1.508 + }, 1.509 + { 1.510 + /*tag*/ eHTMLTag_tt, 1.511 + /*parent,leaf*/ kFontStyle, false 1.512 + }, 1.513 + { 1.514 + /*tag*/ eHTMLTag_u, 1.515 + /*parent,leaf*/ kFontStyle, false 1.516 + }, 1.517 + { 1.518 + /*tag*/ eHTMLTag_ul, 1.519 + /*parent,leaf*/ kList, false 1.520 + }, 1.521 + { 1.522 + /*tag*/ eHTMLTag_var, 1.523 + /*parent,leaf*/ kPhrase, false 1.524 + }, 1.525 + { 1.526 + /*tag*/ eHTMLTag_video, 1.527 + /*parent,leaf*/ kSpecial, false 1.528 + }, 1.529 + { 1.530 + /*tag*/ eHTMLTag_wbr, 1.531 + /*parent,leaf*/ kExtensions, true 1.532 + }, 1.533 + { 1.534 + /*tag*/ eHTMLTag_xmp, 1.535 + /*parent,leaf*/ kInlineEntity|kPreformatted, false 1.536 + }, 1.537 + { 1.538 + /*tag*/ eHTMLTag_text, 1.539 + /*parent,leaf*/ kFlowEntity, true 1.540 + }, 1.541 + { 1.542 + /*tag*/ eHTMLTag_whitespace, 1.543 + /*parent,leaf*/ kFlowEntity|kHeadMisc, true 1.544 + }, 1.545 + { 1.546 + /*tag*/ eHTMLTag_newline, 1.547 + /*parent,leaf*/ kFlowEntity|kHeadMisc, true 1.548 + }, 1.549 + { 1.550 + /*tag*/ eHTMLTag_comment, 1.551 + /*parent,leaf*/ kFlowEntity|kHeadMisc, false 1.552 + }, 1.553 + { 1.554 + /*tag*/ eHTMLTag_entity, 1.555 + /*parent,leaf*/ kFlowEntity, false 1.556 + }, 1.557 + { 1.558 + /*tag*/ eHTMLTag_doctypeDecl, 1.559 + /*parent,leaf*/ kFlowEntity, false 1.560 + }, 1.561 + { 1.562 + /*tag*/ eHTMLTag_markupDecl, 1.563 + /*parent,leaf*/ kFlowEntity, false 1.564 + }, 1.565 + { 1.566 + /*tag*/ eHTMLTag_instruction, 1.567 + /*parent,leaf*/ kFlowEntity, false 1.568 + }, 1.569 + { 1.570 + /*tag*/ eHTMLTag_userdefined, 1.571 + /*parent,leaf*/ (kFlowEntity|kHeadMisc), false 1.572 + }, 1.573 +}; 1.574 + 1.575 +/*********************************************************************************************/ 1.576 + 1.577 +bool nsHTMLElement::IsContainer(eHTMLTags aChild) 1.578 +{ 1.579 + return !gHTMLElements[aChild].mLeaf; 1.580 +} 1.581 + 1.582 +bool nsHTMLElement::IsMemberOf(int32_t aSet) const 1.583 +{ 1.584 + return TestBits(aSet,mParentBits); 1.585 +} 1.586 + 1.587 +#ifdef DEBUG 1.588 +void CheckElementTable() 1.589 +{ 1.590 + for (eHTMLTags t = eHTMLTag_unknown; t <= eHTMLTag_userdefined; t = eHTMLTags(t + 1)) { 1.591 + NS_ASSERTION(gHTMLElements[t].mTagID == t, "gHTMLElements entries does match tag list."); 1.592 + } 1.593 +} 1.594 +#endif