#include "Element.h"
#include "HTMLNames.h"
+#include "MathMLNames.h"
#include <wtf/PassOwnPtr.h>
#if ENABLE(SVG)
|| element->hasTagName(htmlTag);
}
+inline bool isForeignContentScopeMarker(Element* element)
+{
+ return element->hasTagName(MathMLNames::miTag)
+ || element->hasTagName(MathMLNames::moTag)
+ || element->hasTagName(MathMLNames::mnTag)
+ || element->hasTagName(MathMLNames::msTag)
+ || element->hasTagName(MathMLNames::mtextTag)
+ || element->hasTagName(SVGNames::foreignObjectTag)
+ || element->hasTagName(SVGNames::descTag)
+ || element->hasTagName(SVGNames::titleTag)
+ || element->namespaceURI() == HTMLNames::xhtmlNamespaceURI;
+}
+
inline bool isButtonScopeMarker(Element* element)
{
return isScopeMarker(element)
popCommon();
}
-void HTMLElementStack::popUntilElementWithNamespace(const AtomicString& namespaceURI)
-{
- while (top()->namespaceURI() != namespaceURI)
- pop();
-}
-
void HTMLElementStack::popUntil(const AtomicString& tagName)
{
while (!top()->hasLocalName(tagName)) {
pop();
}
+void HTMLElementStack::popUntilForeignContentScopeMarker()
+{
+ while (!isForeignContentScopeMarker(top()))
+ pop();
+}
+
void HTMLElementStack::pushHTMLHtmlElement(PassRefPtr<Element> element)
{
ASSERT(!m_top); // <html> should always be the bottom of the stack.