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(., '
')"/> - <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="'	'"/> </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="'	'"/> </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>