#include "config.h"
#include "SVGLangSpace.h"
#include "RenderSVGResource.h"
#include "RenderSVGShape.h"
#include "SVGGeometryElement.h"
#include "XMLNames.h"
#include <wtf/NeverDestroyed.h>
namespace WebCore {
SVGLangSpace::SVGLangSpace(SVGElement* contextElement)
: m_contextElement(*contextElement)
{
registerAttributes();
}
void SVGLangSpace::registerAttributes()
{
auto& registry = attributeRegistry();
if (!registry.isEmpty())
return;
registry.registerAttribute(SVGStringAttributeAccessor::singleton<XMLNames::langAttr, &SVGLangSpace::m_lang>());
registry.registerAttribute(SVGStringAttributeAccessor::singleton<XMLNames::spaceAttr, &SVGLangSpace::m_space>());
}
const String& SVGLangSpace::xmlspace() const
{
if (!m_space.value()) {
static NeverDestroyed<String> defaultString("default");
return defaultString;
}
return m_space.value();
}
void SVGLangSpace::parseAttribute(const QualifiedName& name, const AtomicString& value)
{
if (name.matches(XMLNames::langAttr))
setXmllang(value);
if (name.matches(XMLNames::spaceAttr))
setXmlspace(value);
}
void SVGLangSpace::svgAttributeChanged(const QualifiedName& attrName)
{
if (!isKnownAttribute(attrName))
return;
auto* renderer = m_contextElement.renderer();
if (!is<RenderSVGShape>(renderer))
return;
ASSERT(is<SVGGeometryElement>(m_contextElement));
SVGElement::InstanceInvalidationGuard guard(m_contextElement);
RenderSVGResource::markForLayoutAndParentResourceInvalidation(*renderer);
}
}