X-Git-Url: https://git.ladys.computer/Shushe/blobdiff_plain/9dc2d26c66e1ba4434231d63a6aa098cef83043d..0.7.4:/lib/catalog2transform.xslt?ds=sidebyside diff --git a/lib/catalog2transform.xslt b/lib/catalog2transform.xslt index ce00cc4..04c38f9 100644 --- a/lib/catalog2transform.xslt +++ b/lib/catalog2transform.xslt @@ -1,8 +1,12 @@ <?xml version="1.0"?> <!-- +SPDX-FileCopyrightText: 2023, 2024 Lady <https://www.ladys.computer/about/#lady> +SPDX-License-Identifier: MPL-2.0 +--> +<!-- ⁌ ⛩️📰 书社 ∷ lib/catalog2transform.xslt -© 2023–2024 Lady [@ Lady’s Computer] +© 2023–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/>. @@ -25,7 +29,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one > <namespace-alias stylesheet-prefix="xslt" result-prefix="#default"/> <template match="/"> - <xslt:transform exclude-result-prefixes="catalog exsl exslstr" version="1.0"> + <xslt:transform exclude-result-prefixes="catalog" extension-element-prefixes="exsl exslstr" version="1.0"> <xslt:param name="BUILDTIME" select="'1972-12-31T00:00:00Z'"/> <xslt:param name="CKSUM" select="false()"/> <xslt:param name="CATALOG" select="'catalog'"/> @@ -114,6 +118,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <xslt:choose> <xslt:when test="@namespace-uri='&xml;'"/> <xslt:when test="$context[self::html:* or self::svg:*] and @namespace-uri='' and @local-name='lang'"/> + <xslt:when test="@namespace-uri='&书社;' and @local-name='archived-as' and not($context-nodes/ancestor::*[not(self::书社:apply-attributes-to-root or self::书社:apply-attributes)][1][self::书社:archive])"/> <xslt:when test="@namespace-uri='&书社;' and (@local-name='destination' or @local-name='disable-output-wrapping' or @local-name='version')"/> <xslt:when test="preceding-sibling::*[@local-name=current()/@local-name and @namespace-uri=current()/@namespace-uri]"/> <xslt:otherwise> @@ -170,6 +175,11 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:variable> <html:html> <xslt:copy-of select="$nodes[self::html:html]/@*"/> + <xslt:if test="not($nodes[self::html:html]/@书社:archived-as) and $nodes/@书社:archived-as"> + <xslt:attribute name="书社:archived-as"> + <xslt:value-of select="$nodes/@书社:archived-as"/> + </xslt:attribute> + </xslt:if> <xslt:if test="not($nodes[self::html:html]/@lang) and $nodes[self::html:*]/@lang|$nodes[self::svg:*]/@lang|$nodes/@xml:lang"> <xslt:attribute name="lang"> <xslt:value-of select="$nodes[self::html:*]/@lang|$nodes[self::svg:*]/@lang|$nodes/@xml:lang"/> @@ -228,7 +238,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <xslt:variable name="result-nodes" select="exsl:node-set($书社:result)/node()[not(self::书社:apply-attributes-to-root)]|exsl:node-set($书社:result)/书社:apply-attributes-to-root/descendant::node()[not(self::书社:apply-attributes-to-root) and not(ancestor::*[not(self::书社:apply-attributes-to-root)])]"/> <xslt:variable name="root-with-attributes"> <xslt:choose> - <xslt:when test="$result-nodes/@书社:disable-output-wrapping|exsl:node-set($书社:result)//书社:apply-attributes-to-root/@书社:disable-output-wrapping"> + <xslt:when test="$result-nodes/self::书社:*[local-name()='raw-text' or local-name()='base64-binary' or local-name()='archive']|$result-nodes/@书社:disable-output-wrapping|exsl:node-set($书社:result)//书社:apply-attributes-to-root/@书社:disable-output-wrapping"> <xslt:call-template name="书社:apply-attributes"> <xslt:with-param name="and-version" select="true()"/> <xslt:with-param name="context-nodes" select="exsl:node-set($书社:result)//书社:apply-attributes-to-root"/> @@ -261,10 +271,37 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <xslt:apply-templates select="@*|node()" mode="书社:application"/> </xslt:copy> </xslt:template> - <xslt:template match="@书社:destination|@书社:disable-output-wrapping" mode="书社:application" priority="1"/> + <xslt:template match="@书社:destination|@书社:disable-output-wrapping|@书社:archived-as[../ancestor::*[not(self::书社:apply-attributes-to-root or self::书社:apply-attributes)]]" mode="书社:application" priority="1"/> + <xslt:template match="书社:archive" mode="书社:application" priority="1"> + <xslt:copy> + <xslt:for-each select="@*|node()"> + <xslt:choose> + <xslt:when test="self::*"> + <xslt:variable name="component"> + <xslt:choose> + <xslt:when test="self::书社:*[local-name()='raw-text' or local-name()='base64-binary' or local-name()='archive']|@书社:disable-output-wrapping"> + <xslt:copy-of select="."/> + </xslt:when> + <xslt:otherwise> + <xslt:call-template name="书社:wrap"> + <xslt:with-param name="nodes" select="."/> + </xslt:call-template> + </xslt:otherwise> + </xslt:choose> + </xslt:variable> + <xslt:apply-templates select="exsl:node-set($component)/node()" mode="书社:application"/> + </xslt:when> + <xslt:when test="../ancestor::*[not(self::书社:apply-attributes-to-root or self::书社:apply-attributes)] and local-name()='archived-as' and namespace-uri()='&书社;'"/> + <xslt:otherwise> + <xslt:apply-templates select="." mode="书社:application"/> + </xslt:otherwise> + </xslt:choose> + </xslt:for-each> + </xslt:copy> + </xslt:template> <xslt:template match="书社:apply-attributes" mode="书社:application" priority="1"> <xslt:variable name="children"> - <xslt:apply-templates select="node()" mode="书社:application"/> + <xslt:apply-templates mode="书社:application"/> </xslt:variable> <xslt:call-template name="书社:apply-attributes"> <xslt:with-param name="context-nodes" select="."/> @@ -272,7 +309,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:call-template> </xslt:template> <xslt:template match="书社:apply-attributes-to-root" mode="书社:application" priority="1"> - <xslt:apply-templates select="node()" mode="书社:application"/> + <xslt:apply-templates mode="书社:application"/> </xslt:template> <xslt:template match="/node()" mode="书社:expand" priority="0"> <xslt:copy> @@ -352,7 +389,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <xslt:template match="text()" mode="书社:header"/> <xslt:template match="text()" mode="书社:footer"/> <xslt:template match="text()" mode="书社:metadata"/> - <xslt:output method="xml" encoding="UTF-8" cdata-section-elements="html:script html:style html:textarea"/> + <xslt:output method="xml" encoding="UTF-8" cdata-section-elements="html:script html:style html:textarea 书社:raw-output 书社:raw-text"/> </xslt:transform> </template> <output method="xml" encoding="UTF-8"/>