/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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 "nsElementTable.h"
struct HTMLElement {
#ifdef DEBUG
nsHTMLTag mTagID;
#endif
bool mIsBlock;
bool mIsContainer;
};
#ifdef DEBUG
# define ELEM(tag, block, container) {eHTMLTag_
## tag, block, container},
#else
# define ELEM(tag, block, container) {block, container},
#endif
#define ____
false // This makes the table easier to read.
// Note that the mIsBlock field disagrees with
// https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements for
// the following elements: center, details, dialog, dir, dt, figcaption,
// listing, menu, multicol, noscript, output, summary, tfoot, video.
//
// mrbkap thinks that the field values were pulled from the old HTML4 DTD and
// then got modified in mostly random ways to make the old parser's behavior
// compatible with the web. So it might make sense to change the mIsBlock
// values for the abovementioned tags at some point.
//
static const HTMLElement gHTMLElements[] = {
// clang-format off
ELEM(unknown, ____, ____)
ELEM(a, ____,
true )
ELEM(abbr, ____,
true )
ELEM(acronym, ____,
true )
ELEM(address,
true ,
true )
ELEM(applet, ____,
true )
ELEM(area, ____, ____)
ELEM(article,
true ,
true )
ELEM(aside,
true ,
true )
ELEM(audio, ____,
true )
ELEM(b, ____,
true )
ELEM(base, ____, ____)
ELEM(basefont, ____, ____)
ELEM(bdi, ____,
true )
ELEM(bdo, ____,
true )
ELEM(bgsound, ____, ____)
ELEM(big, ____,
true )
ELEM(blockquote,
true ,
true )
ELEM(body, ____,
true )
ELEM(br, ____, ____)
ELEM(button, ____,
true )
ELEM(canvas, ____,
true )
ELEM(caption, ____,
true )
ELEM(center,
true ,
true )
ELEM(cite, ____,
true )
ELEM(code, ____,
true )
ELEM(col, ____, ____)
ELEM(colgroup, ____,
true )
ELEM(data, ____,
true )
ELEM(datalist, ____,
true )
ELEM(dd, ____,
true )
ELEM(del, ____,
true )
ELEM(details,
true ,
true )
ELEM(dfn, ____,
true )
ELEM(dialog,
true ,
true )
ELEM(dir,
true ,
true )
ELEM(div,
true ,
true )
ELEM(dl,
true ,
true )
ELEM(dt, ____,
true )
ELEM(em, ____,
true )
ELEM(embed, ____, ____)
ELEM(fieldset,
true ,
true )
ELEM(figcaption, ____,
true )
ELEM(figure,
true ,
true )
ELEM(font, ____,
true )
ELEM(footer,
true ,
true )
ELEM(form,
true ,
true )
ELEM(frame, ____, ____)
ELEM(frameset, ____,
true )
ELEM(h1,
true ,
true )
ELEM(h2,
true ,
true )
ELEM(h3,
true ,
true )
ELEM(h4,
true ,
true )
ELEM(h5,
true ,
true )
ELEM(h6,
true ,
true )
ELEM(head, ____,
true )
ELEM(header,
true ,
true )
ELEM(hgroup,
true ,
true )
ELEM(hr,
true , ____)
ELEM(html, ____,
true )
ELEM(i, ____,
true )
ELEM(iframe, ____,
true )
ELEM(image, ____, ____)
ELEM(img, ____, ____)
ELEM(input, ____, ____)
ELEM(ins, ____,
true )
ELEM(kbd, ____,
true )
ELEM(keygen, ____, ____)
ELEM(label, ____,
true )
ELEM(legend, ____,
true )
ELEM(li,
true ,
true )
ELEM(link, ____, ____)
ELEM(listing,
true ,
true )
ELEM(main,
true ,
true )
ELEM(map, ____,
true )
ELEM(mark, ____,
true )
ELEM(marquee, ____,
true )
ELEM(menu,
true ,
true )
ELEM(meta, ____, ____)
ELEM(meter, ____,
true )
ELEM(multicol,
true ,
true )
ELEM(nav,
true ,
true )
ELEM(nobr, ____,
true )
ELEM(noembed, ____,
true )
ELEM(noframes, ____,
true )
ELEM(noscript, ____,
true )
ELEM(object, ____,
true )
ELEM(ol,
true ,
true )
ELEM(optgroup, ____,
true )
ELEM(option, ____,
true )
ELEM(output, ____,
true )
ELEM(p,
true ,
true )
ELEM(param, ____, ____)
ELEM(picture, ____,
true )
ELEM(plaintext, ____,
true )
ELEM(pre,
true ,
true )
ELEM(progress, ____,
true )
ELEM(q, ____,
true )
ELEM(rb, ____,
true )
ELEM(rp, ____,
true )
ELEM(rt, ____,
true )
ELEM(rtc, ____,
true )
ELEM(ruby, ____,
true )
ELEM(s, ____,
true )
ELEM(samp, ____,
true )
ELEM(script, ____,
true )
ELEM(search,
true ,
true )
ELEM(section,
true ,
true )
ELEM(select, ____,
true )
ELEM(small, ____,
true )
ELEM(slot, ____,
true )
ELEM(source, ____, ____)
ELEM(span, ____,
true )
ELEM(strike, ____,
true )
ELEM(strong, ____,
true )
ELEM(style, ____,
true )
ELEM(sub, ____,
true )
ELEM(summary,
true ,
true )
ELEM(sup, ____,
true )
ELEM(table,
true ,
true )
ELEM(tbody, ____,
true )
ELEM(td, ____,
true )
ELEM(textarea, ____,
true )
ELEM(tfoot, ____,
true )
ELEM(th, ____,
true )
ELEM(thead, ____,
true )
ELEM(
template , ____,
true )
ELEM(time, ____,
true )
ELEM(title, ____,
true )
ELEM(tr, ____,
true )
ELEM(track, ____, ____)
ELEM(tt, ____,
true )
ELEM(u, ____,
true )
ELEM(ul,
true ,
true )
ELEM(var, ____,
true )
ELEM(video, ____,
true )
ELEM(wbr, ____, ____)
ELEM(xmp, ____,
true )
ELEM(text, ____, ____)
ELEM(whitespace, ____, ____)
ELEM(newline, ____, ____)
ELEM(comment, ____,
true )
ELEM(entity, ____,
true )
ELEM(doctypeDecl, ____,
true )
ELEM(markupDecl, ____,
true )
ELEM(instruction, ____,
true )
ELEM(userdefined, ____,
true )
// clang-format on
};
#undef ELEM
#undef ____
bool nsHTMLElement::IsContainer(nsHTMLTag aId) {
return gHTMLElements[aId].mIsContainer;
}
bool nsHTMLElement::IsBlock(nsHTMLTag aId) {
return gHTMLElements[aId].mIsBlock;
}
#ifdef DEBUG
void CheckElementTable() {
for (nsHTMLTag t = eHTMLTag_unknown; t <= eHTMLTag_userdefined;
t = nsHTMLTag(t + 1)) {
MOZ_ASSERT(gHTMLElements[t].mTagID == t,
"gHTMLElements entries does match tag list." );
}
}
#endif
Messung V0.5 C=95 H=96 G=95
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland