parser/htmlparser/src/nsElementTable.cpp

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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/. */
     8 #include "nsIAtom.h"
     9 #include "nsElementTable.h"
    11 /***************************************************************************** 
    12   Now it's time to list all the html elements all with their capabilities...
    13 ******************************************************************************/
    15 // The Element Table (sung to the tune of Modern Major General)
    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 };
   572 /*********************************************************************************************/
   574 bool nsHTMLElement::IsContainer(eHTMLTags aChild)
   575 {
   576   return !gHTMLElements[aChild].mLeaf;
   577 }
   579 bool nsHTMLElement::IsMemberOf(int32_t aSet) const
   580 {
   581   return TestBits(aSet,mParentBits);
   582 }
   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

mercurial