]> gitweb.michael.orlitzky.com - charm-bypass.git/commitdiff
svgclean.xsl: new XSL stylesheet to help clean up our inkscape mess
authorMichael Orlitzky <michael@orlitzky.com>
Wed, 25 Oct 2023 20:54:46 +0000 (16:54 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Wed, 25 Oct 2023 22:36:23 +0000 (18:36 -0400)
There are a few more cleanup/minimization opportunities left in our
SVG, even after it has been scoured. For example, inkscape wraps all
of its text in redundant <tspan> elements, even when the parent <text>
has the same style as the sole <tspan>. We'd like to remove those, to
simplify the code and save space.

XSLT can do this. This new stylesheet can do this. We add it now, in
preparation for yet another SVG processing phase.

svgclean.xsl [new file with mode: 0644]

diff --git a/svgclean.xsl b/svgclean.xsl
new file mode 100644 (file)
index 0000000..2a1c2d2
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+               xmlns:svg="http://www.w3.org/2000/svg"
+               version="1.0">
+  <xsl:output method="xml" encoding="UTF-8" />
+
+  <!--
+    The first rule replaces a <tspan> inside of a <text> with its
+    contents.
+  -->
+  <xsl:template match="svg:text/svg:tspan">
+    <xsl:value-of select="text()" />
+  </xsl:template>
+
+  <!--
+    Then this rule matches everything, and copies it while applying
+    any relevant templates to its children. Either we'll hit a <tspan>
+    within a <text> and process it, or we'll hit this rule again.
+  -->
+  <xsl:template match="*|@*">
+    <xsl:copy>
+      <xsl:apply-templates select="*|@*" />
+    </xsl:copy>
+  </xsl:template>
+</xsl:stylesheet>