From: Lady <redacted>
Date: Mon, 27 May 2024 19:46:56 +0000 (-0400)
Subject: Simplify 书社:literally transform output
X-Git-Url: https://git.ladys.computer/Shushe/commitdiff_plain/730398089144826218494ae0e8c57b7cc9c56113

Simplify 书社:literally transform output

Use literal result elements and attributes in cases where it is safe to
do so.
---

diff --git a/lib/catalog2transform.xslt b/lib/catalog2transform.xslt
index d90ca33..16ed2e5 100644
--- a/lib/catalog2transform.xslt
+++ b/lib/catalog2transform.xslt
@@ -44,7 +44,9 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 			<xslt:param name="THISREV" select="false()"/>
 			<xslt:variable name="书社:source" select="/"/>
 			<xslt:variable name="书社:about-fragment">
-				<apply-templates select="document($METADATA)" mode="书社:literally"/>
+				<apply-templates select="document($METADATA)" mode="书社:literally">
+					<with-param name="extension-element-namespaces" select="'http://exslt.org/common http://exslt.org/strings'"/>
+				</apply-templates>
 			</xslt:variable>
 			<xslt:variable name="书社:about" select="exsl:node-set($书社:about-fragment)"/>
 			<xslt:variable name="书社:expansion-fragment">
diff --git a/lib/literally.xslt b/lib/literally.xslt
index 203dfd3..d929f2f 100644
--- a/lib/literally.xslt
+++ b/lib/literally.xslt
@@ -18,8 +18,9 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 	version="1.0"
 >
 	<template match="node()" mode="书社:literally">
+		<param name="extension-element-namespaces"/>
 		<choose>
-			<when test="self::*">
+			<when test="self::* and contains(concat(' http://www.w3.org/1999/XSL/Transform ', normalize-space($extension-element-namespaces), ' '), concat(' ', namespace-uri(), ' '))">
 				<xslt:element name="{name()}" namespace="{namespace-uri()}">
 					<for-each select="@*">
 						<xslt:attribute name="{name()}" namespace="{namespace-uri()}">
@@ -31,6 +32,23 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 					<apply-templates mode="书社:literally"/>
 				</xslt:element>
 			</when>
+			<when test="self::*">
+				<element name="{name()}" namespace="{namespace-uri()}">
+					<for-each select="@*[not(contains(., '{') or contains(., '}'))]">
+						<attribute name="{name()}" namespace="{namespace-uri()}">
+							<value-of select="."/>
+						</attribute>
+					</for-each>
+					<for-each select="@*[contains(., '{') or contains(., '}')]">
+						<xslt:attribute name="{name()}" namespace="{namespace-uri()}">
+							<xslt:text>
+								<value-of select="."/>
+							</xslt:text>
+						</xslt:attribute>
+					</for-each>
+					<apply-templates mode="书社:literally"/>
+				</element>
+			</when>
 			<when test="self::text()">
 				<xslt:text>
 					<value-of select="."/>