Implement HTMLTemplateElement
[WebKit-https.git] / Source / WebCore / html / parser / HTMLElementStack.cpp
index 6c220c9..b804677 100644 (file)
@@ -38,14 +38,15 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-static inline bool isRootNode(HTMLStackItem* item)
+
+namespace {
+
+inline bool isRootNode(HTMLStackItem* item)
 {
     return item->isDocumentFragmentNode()
         || item->hasTagName(htmlTag);
 }
 
-namespace {
-
 inline bool isScopeMarker(HTMLStackItem* item)
 {
     return item->hasTagName(appletTag)
@@ -64,6 +65,9 @@ inline bool isScopeMarker(HTMLStackItem* item)
         || item->hasTagName(SVGNames::foreignObjectTag)
         || item->hasTagName(SVGNames::descTag)
         || item->hasTagName(SVGNames::titleTag)
+#if ENABLE(TEMPLATE_ELEMENT)
+        || item->hasTagName(templateTag)
+#endif
         || isRootNode(item);
 }
 
@@ -77,6 +81,9 @@ inline bool isListItemScopeMarker(HTMLStackItem* item)
 inline bool isTableScopeMarker(HTMLStackItem* item)
 {
     return item->hasTagName(tableTag)
+#if ENABLE(TEMPLATE_ELEMENT)
+        || item->hasTagName(templateTag)
+#endif
         || isRootNode(item);
 }
 
@@ -85,12 +92,18 @@ inline bool isTableBodyScopeMarker(HTMLStackItem* item)
     return item->hasTagName(tbodyTag)
         || item->hasTagName(tfootTag)
         || item->hasTagName(theadTag)
+#if ENABLE(TEMPLATE_ELEMENT)
+        || item->hasTagName(templateTag)
+#endif
         || isRootNode(item);
 }
 
 inline bool isTableRowScopeMarker(HTMLStackItem* item)
 {
     return item->hasTagName(trTag)
+#if ENABLE(TEMPLATE_ELEMENT)
+        || item->hasTagName(templateTag)
+#endif
         || isRootNode(item);
 }
 
@@ -527,6 +540,13 @@ bool HTMLElementStack::inSelectScope(const QualifiedName& tagName) const
     return inSelectScope(tagName.localName());
 }
 
+#if ENABLE(TEMPLATE_ELEMENT)
+bool HTMLElementStack::hasTemplateInHTMLScope() const
+{
+    return inScopeCommon<isRootNode>(m_top.get(), templateTag.localName());
+}
+#endif
+
 Element* HTMLElementStack::htmlElement() const
 {
     ASSERT(m_rootNode);