From: Lady <redacted>
Date: Sat, 14 Dec 2024 02:32:59 +0000 (-0500)
Subject: Don’t use literal result elements
X-Git-Tag: 0.3.1^0
X-Git-Url: https://git.ladys.computer/LesML/commitdiff_plain/refs/heads/current

Don’t use literal result elements

It’s simpler and cleaner to always just create elements with
`<xslt:element>`, as these never inherit name·spaces from their
surrounding context.
---

diff --git a/parser.xslt b/parser.xslt
index fbfa624..bd510b0 100644
--- a/parser.xslt
+++ b/parser.xslt
@@ -62,7 +62,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 				<with-param name="source" select="string()"/>
 			</call-template>
 			<if test="position()!=count($broken)">
-				<html:br/>
+				<element name="html:br"/>
 			</if>
 		</for-each>
 	</template>
@@ -219,7 +219,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 		</if>
 		<if test="$shebang!='' or $doclines[normalize-space()!='']">
 			<variable name="record-separators" select="$doclines[starts-with(., '%%')]"/>
-			<html:article>
+			<element name="html:article">
 				<for-each select="$params/html:div/html:dt[string()=' LANG ']">
 					<attribute name="lang">
 						<value-of select="following-sibling::html:dd"/>
@@ -234,23 +234,26 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 					</attribute>
 				</for-each>
 				<if test="$record-separators[preceding-sibling::*[normalize-space()!='']]">
-					<html:footer class="head">
+					<element name="html:footer">
+						<attribute name="class">
+							<text>head</text>
+						</attribute>
 						<for-each select="$record-separators">
 							<variable name="position" select="position()"/>
 							<variable name="prev-separator" select="$record-separators[($position)-1]"/>
 							<variable name="fields" select="$noshebang[following-sibling::*[generate-id()=generate-id(current())] and (not($prev-separator) or preceding-sibling::*[generate-id()=generate-id($prev-separator)])]"/>
 							<if test="$fields">
-								<html:dl>
+								<element name="html:dl">
 									<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="html:div">
+													<element name="html:dt">
 														<value-of select="normalize-space(substring-before(., ':'))"/>
-													</html:dt>
-													<html:dd>
+													</element>
+													<element name="html:dd">
 														<variable name="firstline">
 															<choose>
 																<when test="contains(., ':')">
@@ -280,12 +283,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=".!='%%'">
 								<comment>
@@ -293,14 +296,17 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 								</comment>
 							</if>
 						</for-each>
-					</html:footer>
+					</element>
 				</if>
-				<html:div class="body">
+				<element name="html:div">
+					<attribute name="class">
+						<text>body</text>
+					</attribute>
 					<call-template name="LesML:paragraphize">
 						<with-param name="lines" select="$doclines[not($record-separators) or preceding-sibling::*[generate-id()=generate-id($record-separators[last()])]]"/>
 					</call-template>
-				</html:div>
-			</html:article>
+				</element>
+			</element>
 		</if>
 		<if test="$docsep">
 			<call-template name="LesML:parse">
@@ -345,165 +351,246 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 					<variable name="par">
 						<choose>
 							<when test="$preformatted">
-								<html:pre>
+								<element name="html:pre">
 									<call-template name="LesML:id-and-contents">
 										<with-param name="source" select="$text"/>
 									</call-template>
-								</html:pre>
+								</element>
 							</when>
 							<when test="starts-with($text, '⁌') and &sigiled-text;">
-								<html:h1>
+								<element name="html:h1">
 									<call-template name="LesML:id-and-contents">
 										<with-param name="source" select="&unsigiled-text;"/>
 									</call-template>
-								</html:h1>
+								</element>
 							</when>
 							<when test="starts-with($text, '§') and &sigiled-text;">
-								<html:h2>
+								<element name="html:h2">
 									<call-template name="LesML:id-and-contents">
 										<with-param name="source" select="&unsigiled-text;"/>
 									</call-template>
-								</html:h2>
+								</element>
 							</when>
 							<when test="starts-with($text, '❦') and &sigiled-text;">
-								<html:h3>
+								<element name="html:h3">
 									<call-template name="LesML:id-and-contents">
 										<with-param name="source" select="&unsigiled-text;"/>
 									</call-template>
-								</html:h3>
+								</element>
 							</when>
 							<when test="starts-with($text, '✠') and &sigiled-text;">
-								<html:h4>
+								<element name="html:h4">
 									<call-template name="LesML:id-and-contents">
 										<with-param name="source" select="&unsigiled-text;"/>
 									</call-template>
-								</html:h4>
+								</element>
 							</when>
 							<when test="starts-with($text, '•') and &sigiled-text;">
-								<html:li class="unordered" data-level="1">
-									<html:p>
+								<element name="html:li">
+									<attribute name="class">
+										<text>unordered</text>
+									</attribute>
+									<attribute name="data-level">
+										<text>1</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:li>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '🔢') and &sigiled-text;">
-								<html:li class="ordered" data-level="1">
-									<html:p>
+								<element name="html:li">
+									<attribute name="class">
+										<text>ordered</text>
+									</attribute>
+									<attribute name="data-level">
+										<text>1</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:li>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '◦') and &sigiled-text;">
-								<html:li class="unordered" data-level="2">
-									<html:p>
+								<element name="html:li">
+									<attribute name="class">
+										<text>unordered</text>
+									</attribute>
+									<attribute name="data-level">
+										<text>2</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:li>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '🔠') and &sigiled-text;">
-								<html:li class="ordered" data-level="2">
-									<html:p>
+								<element name="html:li">
+									<attribute name="class">
+										<text>ordered</text>
+									</attribute>
+									<attribute name="data-level">
+										<text>2</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:li>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '▪') and &sigiled-text;">
-								<html:li class="unordered" data-level="3">
-									<html:p>
+								<element name="html:li">
+									<attribute name="class">
+										<text>unordered</text>
+									</attribute>
+									<attribute name="data-level">
+										<text>3</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:li>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '🔡') and &sigiled-text;">
-								<html:li class="ordered" data-level="3">
-									<html:p>
+								<element name="html:li">
+									<attribute name="class">
+										<text>ordered</text>
+									</attribute>
+									<attribute name="data-level">
+										<text>3</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:li>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '⁃') and &sigiled-text;">
-								<html:li class="unordered" data-level="4">
-									<html:p>
+								<element name="html:li">
+									<attribute name="class">
+										<text>unordered</text>
+									</attribute>
+									<attribute name="data-level">
+										<text>4</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:li>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '🔣') and &sigiled-text;">
-								<html:li class="ordered" data-level="4">
-									<html:p>
+								<element name="html:li">
+									<attribute name="class">
+										<text>ordered</text>
+									</attribute>
+									<attribute name="data-level">
+										<text>4</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:li>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '🛈') and &sigiled-text;">
-								<html:div role="note" class="info">
-									<html:p>
+								<element name="html:div">
+									<attribute name="role">
+										<text>note</text>
+									</attribute>
+									<attribute name="class">
+										<text>info</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:div>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '⯑') and &sigiled-text;">
-								<html:div role="note" class="query">
-									<html:p>
+								<element name="html:div">
+									<attribute name="role">
+										<text>note</text>
+									</attribute>
+									<attribute name="class">
+										<text>query</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:div>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '⚠︎') and &sigiled-text;">
-								<html:div role="note" class="warn">
-									<html:p>
+								<element name="html:div">
+									<attribute name="role">
+										<text>note</text>
+									</attribute>
+									<attribute name="class">
+										<text>warn</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:div>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '※') and &sigiled-text;">
-								<html:div role="note" class="note">
-									<html:p>
+								<element name="html:div">
+									<attribute name="role">
+										<text>note</text>
+									</attribute>
+									<attribute name="class">
+										<text>note</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:div>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '☡') and &sigiled-text;">
-								<html:div role="note" class="caution">
-									<html:p>
+								<element name="html:div">
+									<attribute name="role">
+										<text>note</text>
+									</attribute>
+									<attribute name="class">
+										<text>caution</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:div>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '⋯') and &sigiled-text;">
-								<html:div class="continuation">
-									<html:p>
+								<element name="html:div">
+									<attribute name="class">
+										<text>continuation</text>
+									</attribute>
+									<element name="html:p">
 										<call-template name="LesML:id-and-contents">
 											<with-param name="source" select="&unsigiled-text;"/>
 										</call-template>
-									</html:p>
-								</html:div>
+									</element>
+								</element>
 							</when>
 							<when test="starts-with($text, '#') and &sigiled-text;">
 								<comment>
@@ -511,22 +598,22 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 								</comment>
 							</when>
 							<otherwise>
-								<html:p>
+								<element name="html:p">
 									<call-template name="LesML:id-and-contents">
 										<with-param name="source" select="$text"/>
 									</call-template>
-								</html:p>
+								</element>
 							</otherwise>
 						</choose>
 					</variable>
 					<choose>
 						<when test="translate(string($text), '&section-break; ', '')=''">
-							<html:hr/>
+							<element name="html:hr"/>
 						</when>
 						<when test="$quoted">
-							<html:blockquote>
+							<element name="html:blockquote">
 								<copy-of select="$par"/>
-							</html:blockquote>
+							</element>
 						</when>
 						<otherwise>
 							<copy-of select="$par"/>
@@ -582,18 +669,18 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 						<value-of select="substring-after($laststarttext, '— ')"/>
 						<copy-of select="$laststarttext/following-sibling::node()"/>
 					</variable>
-					<html:figure>
+					<element name="html:figure">
 						<copy>
 							<apply-templates select="@*|$content-nodes[position()!=last()]" mode="LesML:finalize-tree"/>
 						</copy>
-						<html:figcaption>
+						<element name="html:figcaption">
 							<for-each select="$content-nodes[last()]">
 								<copy>
 									<apply-templates select="@*|exsl:node-set($caption)/node()" mode="LesML:finalize-tree"/>
 								</copy>
 							</for-each>
-						</html:figcaption>
-					</html:figure>
+						</element>
+					</element>
 				</when>
 				<otherwise>
 					<copy>
@@ -804,7 +891,10 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 										</variable>
 										<copy-of select="$start-node/preceding-sibling::node()"/>
 										<value-of select="substring-before($start-node, '{🔗')"/>
-										<html:a href="{$ltcomponent-nodes[last()]}">
+										<element name="html:a">
+											<attribute name="href">
+												<value-of select="$ltcomponent-nodes[last()]"/>
+											</attribute>
 											<choose>
 												<when test="count($ltcomponent-nodes)>2 or normalize-space($ltcomponent-nodes[1])!=''">
 													<value-of select="$ltcomponent-nodes[1]"/>
@@ -817,7 +907,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 													<value-of select="$ltcomponent-nodes[last()]"/>
 												</otherwise>
 											</choose>
-										</html:a>
+										</element>
 										<copy-of select="exsl:node-set($processed-rest)/*/node()"/>
 									</when>
 									<otherwise>