X-Git-Url: https://git.ladys.computer/Shushe/blobdiff_plain/78cdffb646748c9d519ce5b92e2566b7ac7a852b..56fd28bc4072fcc73a486633981d91b92edb51ae:/lib/catalog2transform.xslt?ds=sidebyside diff --git a/lib/catalog2transform.xslt b/lib/catalog2transform.xslt index da9c605..d90ca33 100644 --- a/lib/catalog2transform.xslt +++ b/lib/catalog2transform.xslt @@ -4,9 +4,9 @@ SPDX-FileCopyrightText: 2023, 2024 Lady <https://www.ladys.computer/about/#lady> SPDX-License-Identifier: MPL-2.0 --> <!-- -⁌ ⛩️📰 书社 ∷ lib/catalog2transform.xslt +⁌ ⛩📰 书社 ∷ lib/catalog2transform.xslt -© 2023–2024 Lady [@ Lady’s Computer]. +© 2023–2024 Lady [@ Ladys 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/>. @@ -32,22 +32,29 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one exclude-result-prefixes="catalog" version="1.0" > + <include href="literally.xslt"/> <namespace-alias stylesheet-prefix="xslt" result-prefix="#default"/> + <param name="METADATA" select="'about:blank'"/> <template match="/"> <xslt:transform exclude-result-prefixes="nie nfo" extension-element-prefixes="exsl exslstr" version="1.0"> <xslt:param name="BUILDTIME" select="'1972-12-31T00:00:00Z'"/> <xslt:param name="IDENTIFIER" select="false()"/> - <xslt:param name="METADATA" select="'metadata'"/> <xslt:param name="PATH" select="'/unknown'"/> <xslt:param name="SRCREV" select="false()"/> <xslt:param name="THISREV" select="false()"/> <xslt:variable name="书社:source" select="/"/> - <xslt:variable name="书社:expansion"> + <xslt:variable name="书社:about-fragment"> + <apply-templates select="document($METADATA)" mode="书社:literally"/> + </xslt:variable> + <xslt:variable name="书社:about" select="exsl:node-set($书社:about-fragment)"/> + <xslt:variable name="书社:expansion-fragment"> <xslt:apply-templates select="$书社:source/node()" mode="书社:expand"/> </xslt:variable> - <xslt:variable name="书社:result"> - <xslt:apply-templates select="exsl:node-set($书社:expansion)/node()"/> + <xslt:variable name="书社:expansion" select="exsl:node-set($书社:expansion-fragment)"/> + <xslt:variable name="书社:result-fragment"> + <xslt:apply-templates select="$书社:expansion/node()"/> </xslt:variable> + <xslt:variable name="书社:result" select="exsl:node-set($书社:result-fragment)"/> <xslt:variable name="书社:destination"> <xslt:choose> <xslt:when test="string($书社:source/@书社:destination)!=''"> @@ -228,7 +235,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:text> </xslt:for-each> <xslt:text> - <text>⛩️📰 书社</text> + <text>⛩📰 书社</text> </xslt:text> <xslt:if test="$THISREV"> <xslt:text> @@ -251,13 +258,13 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </html:html> </xslt:template> <xslt:template match="/" priority="1"> - <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="result-nodes" select="$书社:result/node()[not(self::书社:apply-attributes-to-root)]|$书社: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/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:when test="$result-nodes/self::书社:*[local-name()='raw-text' or local-name()='base64-binary' or local-name()='archive']|$result-nodes/@书社:disable-output-wrapping|$书社: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"/> + <xslt:with-param name="context-nodes" select="$书社:result//书社:apply-attributes-to-root"/> <xslt:with-param name="destination-nodes" select="$result-nodes"/> </xslt:call-template> </xslt:when> @@ -269,32 +276,32 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:variable> <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"/> + <xslt:with-param name="context-nodes" select="$书社:result//书社:apply-attributes-to-root"/> <xslt:with-param name="destination-nodes" select="exsl:node-set($wrapped-result)/node()"/> </xslt:call-template> </xslt:otherwise> </xslt:choose> </xslt:variable> - <xslt:apply-templates select="exsl:node-set($root-with-attributes)/node()" mode="书社:application"/> + <xslt:apply-templates select="exsl:node-set($root-with-attributes)/node()" mode="书社:apply"/> </xslt:template> <xslt:template match="@*|node()" priority="-1"> <xslt:copy> <xslt:apply-templates select="@*|node()"/> </xslt:copy> </xslt:template> - <xslt:template match="@*|node()" mode="书社:application"> + <xslt:template match="@*|node()" mode="书社:apply"> <xslt:copy> - <xslt:apply-templates select="@*|node()" mode="书社:application"/> + <xslt:apply-templates select="@*|node()" mode="书社:apply"/> </xslt:copy> </xslt:template> - <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:template match="@书社:destination|@书社:disable-output-wrapping|@书社:archived-as[../ancestor::*[not(self::书社:apply-attributes-to-root or self::书社:apply-attributes)]]" mode="书社:apply" priority="1"/> + <xslt:template match="书社:archive" mode="书社:apply" priority="1"> <xslt:copy> <xslt:for-each select="@*"> <xslt:choose> <xslt:when test="local-name()='archived-as' and namespace-uri()='&书社;' and ../ancestor::*[not(self::书社:apply-attributes-to-root or self::书社:apply-attributes)]"/> <xslt:otherwise> - <xslt:apply-templates select="." mode="书社:application"/> + <xslt:apply-templates select="." mode="书社:apply"/> </xslt:otherwise> </xslt:choose> </xslt:for-each> @@ -313,50 +320,26 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:otherwise> </xslt:choose> </xslt:variable> - <xslt:apply-templates select="exsl:node-set($component)/node()" mode="书社:application"/> + <xslt:apply-templates select="exsl:node-set($component)/node()" mode="书社:apply"/> </xslt:when> <xslt:otherwise> - <xslt:apply-templates select="." mode="书社:application"/> + <xslt:apply-templates select="." mode="书社:apply"/> </xslt:otherwise> </xslt:choose> </xslt:for-each> </xslt:copy> </xslt:template> - <xslt:template match="书社:apply-attributes" mode="书社:application" priority="1"> + <xslt:template match="书社:apply-attributes" mode="书社:apply" priority="1"> <xslt:variable name="children"> - <xslt:apply-templates mode="书社:application"/> + <xslt:apply-templates mode="书社:apply"/> </xslt:variable> <xslt:call-template name="书社:apply-attributes"> <xslt:with-param name="context-nodes" select="."/> <xslt:with-param name="destination-nodes" select="exsl:node-set($children)/node()"/> </xslt:call-template> </xslt:template> - <xslt:template match="书社:apply-attributes-to-root" mode="书社:application" priority="1"> - <xslt:apply-templates mode="书社:application"/> - </xslt:template> - <xslt:template match="/node()" mode="书社:expand" priority="0"> - <xslt:copy> - <xslt:choose> - <xslt:when test="self::html:*"> - <xslt:attribute name="itemscope">itemscope</xslt:attribute> - <xslt:attribute name="itemtype"> - <xslt:text> - <text>&书社;:document</text> - </xslt:text> - <xslt:for-each select="exslstr:tokenize(@itemtype)/token"> - <xslt:text> - <text> </text> - </xslt:text> - <xslt:value-of select="."/> - </xslt:for-each> - </xslt:attribute> - <xslt:apply-templates select="@*[not(namespace-uri()='' and (local-name()='itemscope' or local-name()='itemtype'))]|node()" mode="书社:expand"/> - </xslt:when> - <xslt:otherwise> - <xslt:apply-templates select="@*|node()" mode="书社:expand"/> - </xslt:otherwise> - </xslt:choose> - </xslt:copy> + <xslt:template match="书社:apply-attributes-to-root" mode="书社:apply" priority="1"> + <xslt:apply-templates mode="书社:apply"/> </xslt:template> <xslt:template match="书社:link[@xlink:show='embed']" mode="书社:expand" priority="1"> <xslt:variable name="identifier" select="string(@xlink:href)"/> @@ -364,7 +347,9 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <xslt:choose> <xslt:when test="$uri"> <xslt:variable name="expanded"> - <xslt:apply-templates select="document($uri)" mode="书社:expand"/> + <xslt:apply-templates select="document($uri)" mode="书社:expand"> + <xslt:with-param name="identifier" select="$identifier"/> + </xslt:apply-templates> </xslt:variable> <xslt:for-each select="exsl:node-set($expanded)/node()"> <xslt:copy> @@ -398,6 +383,42 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </xslt:otherwise> </xslt:choose> </xslt:template> + <xslt:template match="/node()" mode="书社:expand" priority="0"> + <xslt:param name="identifier" select="$IDENTIFIER"/> + <xslt:copy> + <xslt:if test="self::*"> + <xslt:attribute name="书社:cksum"> + <xslt:value-of select="$书社:about//*[@rdf:about=$identifier]/nfo:hasHash[@nfo:hashAlgorithm='CRC32']/@nfo:hashValue"/> + </xslt:attribute> + <xslt:attribute name="书社:identifier"> + <xslt:value-of select="$identifier"/> + </xslt:attribute> + <xslt:attribute name="书社:mtime"> + <xslt:value-of select="$书社:about//*[@rdf:about=$identifier]/nfo:fileLastModified"/> + </xslt:attribute> + </xslt:if> + <xslt:choose> + <xslt:when test="self::html:*"> + <xslt:attribute name="itemscope">itemscope</xslt:attribute> + <xslt:attribute name="itemtype"> + <xslt:text> + <text>&书社;:document</text> + </xslt:text> + <xslt:for-each select="exslstr:tokenize(@itemtype)/token"> + <xslt:text> + <text> </text> + </xslt:text> + <xslt:value-of select="."/> + </xslt:for-each> + </xslt:attribute> + <xslt:apply-templates select="@*[not(namespace-uri()='' and (local-name()='itemscope' or local-name()='itemtype') or namespace-uri()='&书社;' and (local-name()='cksum' or local-name()='identifier' or local-name()='mtime'))]|node()" mode="书社:expand"/> + </xslt:when> + <xslt:otherwise> + <xslt:apply-templates select="@*[not(namespace-uri()='&书社;' and (local-name()='cksum' or local-name()='identifier' or local-name()='mtime'))]|node()" mode="书社:expand"/> + </xslt:otherwise> + </xslt:choose> + </xslt:copy> + </xslt:template> <xslt:template match="@*|node()[not(self::书社:link) or not(@xlink:show='embed')]" mode="书社:expand" priority="-1"> <xslt:copy> <xslt:apply-templates select="@*|node()" mode="书社:expand"/>