From: Lady <redacted>
Date: Sat, 6 Jan 2024 03:59:15 +0000 (-0500)
Subject: Add <书社:apply-attributes> transformation
X-Git-Tag: 0.2.3~3
X-Git-Url: https://git.ladys.computer/Shushe/commitdiff_plain/023ca463e9644ebe5ceac3c15d73607583da00e5

Add <书社:apply-attributes> transformation

The behaviour of `transforms/asset.xslt` is useful, but limited in that
the H·T·M·L elements it creates don’t have any attributes beyond
`@src`. `<书社:apply-attributes>` fixes this by allowing attributes to
be declared in a parent element which wraps the `<书社:link>`.
---

diff --git a/README.markdown b/README.markdown
index 13cb1d6..cafda3a 100644
--- a/README.markdown
+++ b/README.markdown
@@ -283,6 +283,14 @@ Transforms are used to convert X·M·L files into their final output,
   after all necessary parsing and embedding has taken place.
 ⛩️📰 书社 comes with some transforms; namely :⁠—
 
+- **`transforms/attributes.xslt`:**
+  Applies transforms to the children of any `<书社:apply-attributes>`
+    elements, and then applies the attributes of the
+    `<书社:apply-attributes>` to each result child, replacing the
+    element with the result.
+  This is useful in combination with image embeds to apply alt‐text to
+    the resulting `<html:img>`.
+
 - **`transforms/asset.xslt`:**
   Converts `<html:object>` elements which correspond to recognized
     media types into the appropriate H·T·M·L elements, and deletes
diff --git a/transforms/attributes.xslt b/transforms/attributes.xslt
new file mode 100644
index 0000000..e91e7cb
--- /dev/null
+++ b/transforms/attributes.xslt
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<!--
+⁌ ⛩️📰 书社 ∷ transforms/attributes.xslt
+
+© 2024 Lady [@ Lady’s Computer]
+
+This Source Code Form is subject to the terms of the Mozilla Public License, v 2.0.
+If a copy of the M·P·L was not distributed with this file, You can obtain one at <https://mozilla.org/MPL/2.0/>.
+-->
+<transform
+	xmlns="http://www.w3.org/1999/XSL/Transform"
+	xmlns:exsl="http://exslt.org/common"
+	xmlns:书社="urn:fdc:ladys.computer:20231231:Shu1She4"
+	exclude-result-prefixes="exsl"
+	version="1.0"
+>
+	<书社:id>urn:fdc:ladys.computer:20231231:Shu1She4:attributes.xslt</书社:id>
+	<template match="书社:apply-attributes">
+		<for-each select="node()">
+			<choose>
+				<when test="self::*">
+					<variable name="original" select="."/>
+					<variable name="result">
+						<apply-templates select="."/>
+					</variable>
+					<for-each select="exsl:node-set($result)/*">
+						<copy>
+							<for-each select="@*|$original/../@*">
+								<copy/>
+							</for-each>
+							<apply-templates/>
+						</copy>
+					</for-each>
+				</when>
+				<otherwise>
+					<apply-templates select="."/>
+				</otherwise>
+			</choose>
+		</for-each>
+	</template>
+</transform>