From: Lady <redacted>
Date: Tue, 26 Nov 2024 04:16:36 +0000 (-0500)
Subject: Don’t use literal result elements in parsers
X-Git-Tag: 0.13.3~3
X-Git-Url: https://git.ladys.computer/Shushe/commitdiff_plain/1b37857b238cae679dedf2c837358ad30212e134?ds=sidebyside;hp=8e297e281cd40bf731273482dcf309063220dab6

Don’t use literal result elements in parsers

Literal result elements inherit name·spaces from their surrounding
context. Using `<xslt:element>` elements avoids this trouble (and also
allows for the removal of name·space prefixes, reducing sizes of
results).
---

diff --git a/parsers/plain.xslt b/parsers/plain.xslt
index 01e6f8d..3430526 100644
--- a/parsers/plain.xslt
+++ b/parsers/plain.xslt
@@ -11,14 +11,19 @@ SPDX-License-Identifier: MPL-2.0
 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/>.
 -->
+<!DOCTYPE transform [
+	<!ENTITY xhtml 'http://www.w3.org/1999/xhtml'>
+]>
 <transform
 	xmlns="http://www.w3.org/1999/XSL/Transform"
-	xmlns:html="http://www.w3.org/1999/xhtml"
+	xmlns:html="&xhtml;"
 	xmlns:书社="urn:fdc:ladys.computer:20231231:Shu1She4"
 	version="1.0"
 >
 	<书社:id>urn:fdc:ladys.computer:20231231:Shu1She4:plain.xslt</书社:id>
 	<template match="html:script[@type='text/plain']">
-		<html:pre><value-of select="."/></html:pre>
+		<element name="pre" namespace="&xhtml;">
+			<value-of select="."/>
+		</element>
 	</template>
 </transform>
diff --git a/parsers/record-jar.xslt b/parsers/record-jar.xslt
index abaf08c..b58505d 100644
--- a/parsers/record-jar.xslt
+++ b/parsers/record-jar.xslt
@@ -11,11 +11,14 @@ SPDX-License-Identifier: MPL-2.0
 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/>.
 -->
+<!DOCTYPE transform [
+	<!ENTITY xhtml 'http://www.w3.org/1999/xhtml'>
+]>
 <transform
 	xmlns="http://www.w3.org/1999/XSL/Transform"
 	xmlns:exsl="http://exslt.org/common"
 	xmlns:exslstr="http://exslt.org/strings"
-	xmlns:html="http://www.w3.org/1999/xhtml"
+	xmlns:html="&xhtml;"
 	xmlns:书社="urn:fdc:ladys.computer:20231231:Shu1She4"
 	extension-element-prefixes="exsl exslstr"
 	version="1.0"
@@ -23,7 +26,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 	<书社:id>urn:fdc:ladys.computer:20231231:Shu1She4:record-jar.xslt</书社:id>
 	<template match="html:script[@type='text/record-jar']">
 		<variable name="lines" select="exslstr:tokenize(., '&#xA;')"/>
-		<html:div>
+		<element name="div" namespace="&xhtml;">
 			<if test="starts-with($lines[1], '%%') and substring-after($lines[1], '%%')!=''">
 				<comment>
 					<value-of select="substring-after($lines[1], '%%')"/>
@@ -34,17 +37,17 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 				<variable name="start" select="preceding-sibling::*[starts-with(., '%%')][1]"/>
 				<variable name="fields" select="($start/following-sibling::*|$lines[not($start)])[not(preceding-sibling::*[generate-id()=generate-id($end)]) and not(starts-with(., '%%'))]"/>
 				<if test="$fields">
-					<html:dl>
+					<element name="dl" namespace="&xhtml;">
 						<for-each select="$fields">
 							<choose>
 								<when test="starts-with(., ' ') and $fields[generate-id()=generate-id(current()/preceding-sibling::*[1])]"/>
 								<otherwise>
 									<variable name="next" select="following-sibling::*[not(starts-with(., ' '))]"/>
-									<html:div>
-										<html:dt>
+									<element name="div" namespace="&xhtml;">
+										<element name="dt" namespace="&xhtml;">
 											<value-of select="normalize-space(substring-before(., ':'))"/>
-										</html:dt>
-										<html:dd>
+										</element>
+										<element name="dd" namespace="&xhtml;">
 											<variable name="firstline">
 												<choose>
 													<when test="contains(., ':')">
@@ -74,12 +77,12 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 													</otherwise>
 												</choose>
 											</for-each>
-										</html:dd>
-									</html:div>
+										</element>
+									</element>
 								</otherwise>
 							</choose>
 						</for-each>
-					</html:dl>
+					</element>
 				</if>
 				<if test="substring-after(., '%%')!=''">
 					<comment>
@@ -87,6 +90,6 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 					</comment>
 				</if>
 			</for-each>
-		</html:div>
+		</element>
 	</template>
 </transform>
diff --git a/parsers/tsv.xslt b/parsers/tsv.xslt
index 5b3cc68..90e156e 100644
--- a/parsers/tsv.xslt
+++ b/parsers/tsv.xslt
@@ -11,11 +11,14 @@ SPDX-License-Identifier: MPL-2.0
 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/>.
 -->
+<!DOCTYPE transform [
+	<!ENTITY xhtml 'http://www.w3.org/1999/xhtml'>
+]>
 <transform
 	xmlns="http://www.w3.org/1999/XSL/Transform"
 	xmlns:exsl="http://exslt.org/common"
 	xmlns:exslstr="http://exslt.org/strings"
-	xmlns:html="http://www.w3.org/1999/xhtml"
+	xmlns:html="&xhtml;"
 	xmlns:书社="urn:fdc:ladys.computer:20231231:Shu1She4"
 	extension-element-prefixes="exsl exslstr"
 	version="1.0"
@@ -31,22 +34,25 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 				<with-param name="separator" select="'&#x9;'"/>
 			</call-template>
 		</variable>
-		<html:table>
+		<element name="table" namespace="&xhtml;">
 			<for-each select="$lines[starts-with(., '#') and following-sibling::*[generate-id(.)=generate-id($head)]]">
 				<comment>
 					<value-of select="substring-after(., '#')"/>
 				</comment>
 			</for-each>
-			<html:thead>
-				<html:tr>
+			<element name="thead" namespace="&xhtml;">
+				<element name="tr" namespace="&xhtml;">
 					<for-each select="exsl:node-set($headcols)/*">
-						<html:th scope="col">
+						<element name="th" namespace="&xhtml;">
+							<attribute name="scope">
+								<text>col</text>
+							</attribute>
 							<value-of select="."/>
-						</html:th>
+						</element>
 					</for-each>
-				</html:tr>
-			</html:thead>
-			<html:tbody>
+				</element>
+			</element>
+			<element name="tbody" namespace="&xhtml;">
 				<for-each select="$head/following-sibling::*[normalize-space(.)!='']">
 					<choose>
 						<when test="starts-with(., '#')">
@@ -61,9 +67,9 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 									<with-param name="separator" select="'&#x9;'"/>
 								</call-template>
 							</variable>
-							<html:tr>
+							<element name="tr" namespace="&xhtml;">
 								<for-each select="exsl:node-set($cols)/*[count(exsl:node-set($headcols)/*)>=position()]">
-									<html:td>
+									<element name="td" namespace="&xhtml;">
 										<attribute name="data-tsv-header">
 											<value-of select="exsl:node-set($headcols)/*[count(current()/preceding-sibling::*)+1]"/>
 										</attribute>
@@ -74,16 +80,16 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 												<value-of select="."/>
 											</for-each>
 										</if>
-									</html:td>
+									</element>
 								</for-each>
 								<for-each select="exsl:node-set($headcols)/*[position()>count(exsl:node-set($cols)/*)]">
-									<html:td/>
+									<element name="td" namespace="&xhtml;"/>
 								</for-each>
-							</html:tr>
+							</element>
 						</otherwise>
 					</choose>
 				</for-each>
-			</html:tbody>
-		</html:table>
+			</element>
+		</element>
 	</template>
 </transform>