michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* vim: set ts=2 sw=2 et tw=78: */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: michael@0: #include "nsIAtom.h" michael@0: #include "nsElementTable.h" michael@0: michael@0: /***************************************************************************** michael@0: Now it's time to list all the html elements all with their capabilities... michael@0: ******************************************************************************/ michael@0: michael@0: // The Element Table (sung to the tune of Modern Major General) michael@0: michael@0: const nsHTMLElement gHTMLElements[] = { michael@0: { michael@0: /*tag*/ eHTMLTag_unknown, michael@0: /*parent,leaf*/ kNone, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_a, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_abbr, michael@0: /*parent,leaf*/ kPhrase, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_acronym, michael@0: /*parent,leaf*/ kPhrase, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_address, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_applet, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_area, michael@0: /*parent,leaf*/ kNone, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_article, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_aside, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_audio, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_b, michael@0: /*parent,leaf*/ kFontStyle, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_base, michael@0: /*parent,leaf*/ kHeadContent, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_basefont, michael@0: /*parent,leaf*/ kSpecial, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_bdo, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_bgsound, michael@0: /*parent,leaf*/ (kFlowEntity|kHeadMisc), true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_big, michael@0: /*parent,leaf*/ kFontStyle, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_blockquote, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_body, michael@0: /*parent,leaf*/ kHTMLContent, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_br, michael@0: /*parent,leaf*/ kSpecial, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_button, michael@0: /*parent,leaf*/ kFormControl, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_canvas, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_caption, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_center, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_cite, michael@0: /*parent,leaf*/ kPhrase, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_code, michael@0: /*parent,leaf*/ kPhrase, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_col, michael@0: /*parent,leaf*/ kNone, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_colgroup, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_content, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_data, michael@0: /*parent,leaf*/ kPhrase, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_datalist, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_dd, michael@0: /*parent,leaf*/ kInlineEntity, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_del, michael@0: /*parent,leaf*/ kFlowEntity, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_dfn, michael@0: /*parent,leaf*/ kPhrase, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_dir, michael@0: /*parent,leaf*/ kList, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_div, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_dl, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_dt, michael@0: /*parent,leaf*/ kInlineEntity, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_em, michael@0: /*parent,leaf*/ kPhrase, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_embed, michael@0: /*parent,leaf*/ kSpecial, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_fieldset, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_figcaption, michael@0: /*parent,leaf*/ kPhrase, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_figure, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_font, michael@0: /*parent,leaf*/ kFontStyle, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_footer, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_form, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_frame, michael@0: /*parent,leaf*/ kNone, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_frameset, michael@0: /*parent,leaf*/ kHTMLContent, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_h1, michael@0: /*parent,leaf*/ kHeading, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_h2, michael@0: /*parent,leaf*/ kHeading, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_h3, michael@0: /*parent,leaf*/ kHeading, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_h4, michael@0: /*parent,leaf*/ kHeading, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_h5, michael@0: /*parent,leaf*/ kHeading, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_h6, michael@0: /*parent,leaf*/ kHeading, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_head, michael@0: /*parent,leaf*/ kHTMLContent, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_header, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_hgroup, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_hr, michael@0: /*parent,leaf*/ kBlock, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_html, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_i, michael@0: /*parent,leaf*/ kFontStyle, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_iframe, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_image, michael@0: /*parent,leaf*/ kSpecial, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_img, michael@0: /*parent,leaf*/ kSpecial, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_input, michael@0: /*parent,leaf*/ kFormControl, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_ins, michael@0: /*parent,leaf*/ kFlowEntity, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_kbd, michael@0: /*parent,leaf*/ kPhrase, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_keygen, michael@0: /*parent,leaf*/ kFlowEntity, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_label, michael@0: /*parent,leaf*/ kFormControl, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_legend, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_li, michael@0: /*parent,leaf*/ kBlockEntity, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_link, michael@0: /*parent,leaf*/ kAllTags - kHeadContent, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_listing, michael@0: /*parent,leaf*/ kPreformatted, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_main, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_map, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_mark, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_marquee, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_menu, michael@0: /*parent,leaf*/ kList, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_menuitem, michael@0: /*parent,leaf*/ kFlowEntity, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_meta, michael@0: /*parent,leaf*/ kHeadContent, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_meter, michael@0: /*parent,leaf*/ kFormControl, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_multicol, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_nav, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_nobr, michael@0: /*parent,leaf*/ kExtensions, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_noembed, michael@0: /*parent,leaf*/ kFlowEntity, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_noframes, michael@0: /*parent,leaf*/ kFlowEntity, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_noscript, michael@0: /*parent,leaf*/ kFlowEntity|kHeadMisc, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_object, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_ol, michael@0: /*parent,leaf*/ kList, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_optgroup, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_option, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_output, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_p, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_param, michael@0: /*parent,leaf*/ kSpecial, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_plaintext, michael@0: /*parent,leaf*/ kExtensions, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_pre, michael@0: /*parent,leaf*/ kBlock|kPreformatted, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_progress, michael@0: /*parent,leaf*/ kFormControl, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_q, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_s, michael@0: /*parent,leaf*/ kFontStyle, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_samp, michael@0: /*parent,leaf*/ kPhrase, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_script, michael@0: /*parent,leaf*/ (kSpecial|kHeadContent), false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_section, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_select, michael@0: /*parent,leaf*/ kFormControl, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_shadow, michael@0: /*parent,leaf*/ kFlowEntity, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_small, michael@0: /*parent,leaf*/ kFontStyle, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_source, michael@0: /*parent,leaf*/ kSpecial, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_span, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_strike, michael@0: /*parent,leaf*/ kFontStyle, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_strong, michael@0: /*parent,leaf*/ kPhrase, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_style, michael@0: /*parent,leaf*/ kAllTags - kHeadContent, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_sub, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_sup, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_table, michael@0: /*parent,leaf*/ kBlock, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_tbody, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_td, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_textarea, michael@0: /*parent,leaf*/ kFormControl, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_tfoot, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_th, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_thead, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_template, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_time, michael@0: /*parent,leaf*/ kPhrase, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_title, michael@0: /*parent,leaf*/ kHeadContent, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_tr, michael@0: /*parent,leaf*/ kNone, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_track, michael@0: /*parent,leaf*/ kSpecial, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_tt, michael@0: /*parent,leaf*/ kFontStyle, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_u, michael@0: /*parent,leaf*/ kFontStyle, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_ul, michael@0: /*parent,leaf*/ kList, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_var, michael@0: /*parent,leaf*/ kPhrase, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_video, michael@0: /*parent,leaf*/ kSpecial, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_wbr, michael@0: /*parent,leaf*/ kExtensions, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_xmp, michael@0: /*parent,leaf*/ kInlineEntity|kPreformatted, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_text, michael@0: /*parent,leaf*/ kFlowEntity, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_whitespace, michael@0: /*parent,leaf*/ kFlowEntity|kHeadMisc, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_newline, michael@0: /*parent,leaf*/ kFlowEntity|kHeadMisc, true michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_comment, michael@0: /*parent,leaf*/ kFlowEntity|kHeadMisc, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_entity, michael@0: /*parent,leaf*/ kFlowEntity, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_doctypeDecl, michael@0: /*parent,leaf*/ kFlowEntity, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_markupDecl, michael@0: /*parent,leaf*/ kFlowEntity, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_instruction, michael@0: /*parent,leaf*/ kFlowEntity, false michael@0: }, michael@0: { michael@0: /*tag*/ eHTMLTag_userdefined, michael@0: /*parent,leaf*/ (kFlowEntity|kHeadMisc), false michael@0: }, michael@0: }; michael@0: michael@0: /*********************************************************************************************/ michael@0: michael@0: bool nsHTMLElement::IsContainer(eHTMLTags aChild) michael@0: { michael@0: return !gHTMLElements[aChild].mLeaf; michael@0: } michael@0: michael@0: bool nsHTMLElement::IsMemberOf(int32_t aSet) const michael@0: { michael@0: return TestBits(aSet,mParentBits); michael@0: } michael@0: michael@0: #ifdef DEBUG michael@0: void CheckElementTable() michael@0: { michael@0: for (eHTMLTags t = eHTMLTag_unknown; t <= eHTMLTag_userdefined; t = eHTMLTags(t + 1)) { michael@0: NS_ASSERTION(gHTMLElements[t].mTagID == t, "gHTMLElements entries does match tag list."); michael@0: } michael@0: } michael@0: #endif