Procházet zdrojové kódy

LibWeb: Add an SVG::AttributeNames namespace

There are a whole bunch of SVG attributes, and we shouldn't mix them in
with the HTML attributes. This patch adds some of them to the new
namespace, but there are more to be added. :^)
Andreas Kling před 3 roky
rodič
revize
8949b0def6

+ 1 - 0
Userland/Libraries/LibWeb/CMakeLists.txt

@@ -221,6 +221,7 @@ set(SOURCES
     Page/Page.cpp
     Page/Page.cpp
     Painting/BorderPainting.cpp
     Painting/BorderPainting.cpp
     Painting/StackingContext.cpp
     Painting/StackingContext.cpp
+    SVG/AttributeNames.cpp
     SVG/SVGElement.cpp
     SVG/SVGElement.cpp
     SVG/SVGGeometryElement.cpp
     SVG/SVGGeometryElement.cpp
     SVG/SVGGraphicsElement.cpp
     SVG/SVGGraphicsElement.cpp

+ 29 - 0
Userland/Libraries/LibWeb/SVG/AttributeNames.cpp

@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <LibWeb/SVG/AttributeNames.h>
+
+namespace Web::SVG::AttributeNames {
+
+#define __ENUMERATE_SVG_ATTRIBUTE(name) FlyString name;
+ENUMERATE_SVG_ATTRIBUTES(__ENUMERATE_SVG_ATTRIBUTE)
+#undef __ENUMERATE_SVG_ATTRIBUTE
+
+[[gnu::constructor]] static void initialize()
+{
+    static bool s_initialized = false;
+    if (s_initialized)
+        return;
+
+#define __ENUMERATE_SVG_ATTRIBUTE(name) \
+    name = #name;
+    ENUMERATE_SVG_ATTRIBUTES(__ENUMERATE_SVG_ATTRIBUTE)
+#undef __ENUMERATE_SVG_ATTRIBUTE
+
+    s_initialized = true;
+}
+
+}

+ 84 - 0
Userland/Libraries/LibWeb/SVG/AttributeNames.h

@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <AK/FlyString.h>
+
+namespace Web::SVG::AttributeNames {
+
+#define ENUMERATE_SVG_ATTRIBUTES(E) \
+    E(attributeName)                \
+    E(attributeType)                \
+    E(baseFrequency)                \
+    E(baseProfile)                  \
+    E(calcMode)                     \
+    E(clipPathUnits)                \
+    E(contentScriptType)            \
+    E(contentStyleType)             \
+    E(diffuseConstant)              \
+    E(edgeMode)                     \
+    E(filterUnits)                  \
+    E(glyphRef)                     \
+    E(gradientTransform)            \
+    E(gradientUnits)                \
+    E(height)                       \
+    E(kernelMatrix)                 \
+    E(kernelUnitLength)             \
+    E(keyPoints)                    \
+    E(keySplines)                   \
+    E(keyTimes)                     \
+    E(lengthAdjust)                 \
+    E(limitingConeAngle)            \
+    E(markerHeight)                 \
+    E(markerUnits)                  \
+    E(markerWidth)                  \
+    E(maskContentUnits)             \
+    E(maskUnits)                    \
+    E(numOctaves)                   \
+    E(pathLength)                   \
+    E(patternContentUnits)          \
+    E(patternTransform)             \
+    E(patternUnits)                 \
+    E(pointsAtX)                    \
+    E(pointsAtY)                    \
+    E(pointsAtZ)                    \
+    E(preserveAlpha)                \
+    E(preserveAspectRatio)          \
+    E(primitiveUnits)               \
+    E(refX)                         \
+    E(refY)                         \
+    E(repeatCount)                  \
+    E(repeatDur)                    \
+    E(requiredExtensions)           \
+    E(requiredFeatures)             \
+    E(specularConstant)             \
+    E(specularExponent)             \
+    E(spreadMethod)                 \
+    E(startOffset)                  \
+    E(stdDeviation)                 \
+    E(stitchTiles)                  \
+    E(surfaceScale)                 \
+    E(systemLanguage)               \
+    E(tableValues)                  \
+    E(targetX)                      \
+    E(targetY)                      \
+    E(textLength)                   \
+    E(version)                      \
+    E(viewBox)                      \
+    E(viewTarget)                   \
+    E(width)                        \
+    E(x)                            \
+    E(xChannelSelector)             \
+    E(y)                            \
+    E(yChannelSelector)             \
+    E(zoomAndPan)
+
+#define __ENUMERATE_SVG_ATTRIBUTE(name) extern FlyString name;
+ENUMERATE_SVG_ATTRIBUTES(__ENUMERATE_SVG_ATTRIBUTE)
+#undef __ENUMERATE_SVG_ATTRIBUTE
+
+}