1/*
2 * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
4 * Copyright (C) 2018-2019 Apple Inc. All rights reserved.
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
15 *
16 * You should have received a copy of the GNU Library General Public License
17 * along with this library; see the file COPYING.LIB. If not, write to
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
20 */
21
22#include "config.h"
23#include "SVGLangSpace.h"
24
25#include "RenderSVGResource.h"
26#include "RenderSVGShape.h"
27#include "SVGGeometryElement.h"
28#include "XMLNames.h"
29#include <wtf/NeverDestroyed.h>
30
31namespace WebCore {
32
33SVGLangSpace::SVGLangSpace(SVGElement* contextElement)
34 : m_contextElement(*contextElement)
35{
36}
37
38const AtomicString& SVGLangSpace::xmlspace() const
39{
40 if (!m_space) {
41 static NeverDestroyed<const AtomicString> defaultString("default", AtomicString::ConstructFromLiteral);
42 return defaultString;
43 }
44 return m_space;
45}
46
47bool SVGLangSpace::isKnownAttribute(const QualifiedName& attributeName)
48{
49 return attributeName.matches(XMLNames::langAttr) || attributeName.matches(XMLNames::spaceAttr);
50}
51
52void SVGLangSpace::parseAttribute(const QualifiedName& name, const AtomicString& value)
53{
54 if (name.matches(XMLNames::langAttr))
55 setXmllang(value);
56 if (name.matches(XMLNames::spaceAttr))
57 setXmlspace(value);
58}
59
60void SVGLangSpace::svgAttributeChanged(const QualifiedName& attributeName)
61{
62 if (!isKnownAttribute(attributeName))
63 return;
64
65 auto* renderer = m_contextElement.renderer();
66 if (!is<RenderSVGShape>(renderer))
67 return;
68
69 ASSERT(is<SVGGeometryElement>(m_contextElement));
70 SVGElement::InstanceInvalidationGuard guard(m_contextElement);
71 RenderSVGResource::markForLayoutAndParentResourceInvalidation(*renderer);
72}
73
74}
75