summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/parser/HTMLStackItem.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/html/parser/HTMLStackItem.h')
-rw-r--r--Source/WebCore/html/parser/HTMLStackItem.h119
1 files changed, 119 insertions, 0 deletions
diff --git a/Source/WebCore/html/parser/HTMLStackItem.h b/Source/WebCore/html/parser/HTMLStackItem.h
index 371ac43f4..0a183bc26 100644
--- a/Source/WebCore/html/parser/HTMLStackItem.h
+++ b/Source/WebCore/html/parser/HTMLStackItem.h
@@ -29,6 +29,8 @@
#include "Element.h"
#include "HTMLNames.h"
#include "HTMLToken.h"
+#include "MathMLNames.h"
+#include "SVGNames.h"
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
@@ -79,6 +81,123 @@ public:
|| hasTagName(HTMLNames::trTag);
}
+ bool isInHTMLNamespace() const
+ {
+ // A DocumentFragment takes the place of the document element when parsing
+ // fragments and should be considered in the HTML namespace.
+ return namespaceURI() == HTMLNames::xhtmlNamespaceURI
+ || isDocumentFragmentNode(); // FIXME: Does this also apply to ShadowRoot?
+ }
+
+ bool isNumberedHeaderElement() const
+ {
+ return hasTagName(HTMLNames::h1Tag)
+ || hasTagName(HTMLNames::h2Tag)
+ || hasTagName(HTMLNames::h3Tag)
+ || hasTagName(HTMLNames::h4Tag)
+ || hasTagName(HTMLNames::h5Tag)
+ || hasTagName(HTMLNames::h6Tag);
+ }
+
+ bool isTableBodyContextElement() const
+ {
+ return hasTagName(HTMLNames::tbodyTag)
+ || hasTagName(HTMLNames::tfootTag)
+ || hasTagName(HTMLNames::theadTag);
+ }
+
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#special
+ bool isSpecialNode() const
+ {
+ if (hasTagName(MathMLNames::miTag)
+ || hasTagName(MathMLNames::moTag)
+ || hasTagName(MathMLNames::mnTag)
+ || hasTagName(MathMLNames::msTag)
+ || hasTagName(MathMLNames::mtextTag)
+ || hasTagName(MathMLNames::annotation_xmlTag)
+ || hasTagName(SVGNames::foreignObjectTag)
+ || hasTagName(SVGNames::descTag)
+ || hasTagName(SVGNames::titleTag))
+ return true;
+ if (isDocumentFragmentNode())
+ return true;
+ if (!isInHTMLNamespace())
+ return false;
+ const AtomicString& tagName = localName();
+ return tagName == HTMLNames::addressTag
+ || tagName == HTMLNames::appletTag
+ || tagName == HTMLNames::areaTag
+ || tagName == HTMLNames::articleTag
+ || tagName == HTMLNames::asideTag
+ || tagName == HTMLNames::baseTag
+ || tagName == HTMLNames::basefontTag
+ || tagName == HTMLNames::bgsoundTag
+ || tagName == HTMLNames::blockquoteTag
+ || tagName == HTMLNames::bodyTag
+ || tagName == HTMLNames::brTag
+ || tagName == HTMLNames::buttonTag
+ || tagName == HTMLNames::captionTag
+ || tagName == HTMLNames::centerTag
+ || tagName == HTMLNames::colTag
+ || tagName == HTMLNames::colgroupTag
+ || tagName == HTMLNames::commandTag
+ || tagName == HTMLNames::ddTag
+ || tagName == HTMLNames::detailsTag
+ || tagName == HTMLNames::dirTag
+ || tagName == HTMLNames::divTag
+ || tagName == HTMLNames::dlTag
+ || tagName == HTMLNames::dtTag
+ || tagName == HTMLNames::embedTag
+ || tagName == HTMLNames::fieldsetTag
+ || tagName == HTMLNames::figcaptionTag
+ || tagName == HTMLNames::figureTag
+ || tagName == HTMLNames::footerTag
+ || tagName == HTMLNames::formTag
+ || tagName == HTMLNames::frameTag
+ || tagName == HTMLNames::framesetTag
+ || isNumberedHeaderElement()
+ || tagName == HTMLNames::headTag
+ || tagName == HTMLNames::headerTag
+ || tagName == HTMLNames::hgroupTag
+ || tagName == HTMLNames::hrTag
+ || tagName == HTMLNames::htmlTag
+ || tagName == HTMLNames::iframeTag
+ || tagName == HTMLNames::imgTag
+ || tagName == HTMLNames::inputTag
+ || tagName == HTMLNames::isindexTag
+ || tagName == HTMLNames::liTag
+ || tagName == HTMLNames::linkTag
+ || tagName == HTMLNames::listingTag
+ || tagName == HTMLNames::marqueeTag
+ || tagName == HTMLNames::menuTag
+ || tagName == HTMLNames::metaTag
+ || tagName == HTMLNames::navTag
+ || tagName == HTMLNames::noembedTag
+ || tagName == HTMLNames::noframesTag
+ || tagName == HTMLNames::noscriptTag
+ || tagName == HTMLNames::objectTag
+ || tagName == HTMLNames::olTag
+ || tagName == HTMLNames::pTag
+ || tagName == HTMLNames::paramTag
+ || tagName == HTMLNames::plaintextTag
+ || tagName == HTMLNames::preTag
+ || tagName == HTMLNames::scriptTag
+ || tagName == HTMLNames::sectionTag
+ || tagName == HTMLNames::selectTag
+ || tagName == HTMLNames::styleTag
+ || tagName == HTMLNames::summaryTag
+ || tagName == HTMLNames::tableTag
+ || isTableBodyContextElement()
+ || tagName == HTMLNames::tdTag
+ || tagName == HTMLNames::textareaTag
+ || tagName == HTMLNames::thTag
+ || tagName == HTMLNames::titleTag
+ || tagName == HTMLNames::trTag
+ || tagName == HTMLNames::ulTag
+ || tagName == HTMLNames::wbrTag
+ || tagName == HTMLNames::xmpTag;
+ }
+
private:
HTMLStackItem(PassRefPtr<ContainerNode> node, ItemType type)
: m_node(node)