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