X-Git-Url: https://git.ladys.computer/Shushe/blobdiff_plain/e4f65cee884c40d631209b5cbb711de161a2969a..ca7be60f15de191e25f8cc1890e13dc499576ec4:/lib/catalog2transform.xslt diff --git a/lib/catalog2transform.xslt b/lib/catalog2transform.xslt index 4a09235..ce94067 100644 --- a/lib/catalog2transform.xslt +++ b/lib/catalog2transform.xslt @@ -1,69 +1,390 @@ <?xml version="1.0"?> <!-- -⁌ ⛩️📰 书社 ∷ lib/catalog2transform.xslt +SPDX-FileCopyrightText: 2023, 2024, 2025 Lady <https://www.ladys.computer/about/#lady> +SPDX-License-Identifier: MPL-2.0 +--> +<!-- +⁌ ⛩📰 书社 ∷ lib/catalog2transform.xslt -© 2023 Lady [@ Lady’s Computer] +© 2023–2025 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/>. --> +<!DOCTYPE transform [ + <!ENTITY 书社 "urn:fdc:ladys.computer:20231231:Shu1She4"> + <!ENTITY xhtml "http://www.w3.org/1999/xhtml"> + <!ENTITY xml "http://www.w3.org/XML/1998/namespace"> +]> <transform xmlns="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" xmlns:catalog="urn:oasis:names:tc:entity:xmlns:xml:catalog" xmlns:exsl="http://exslt.org/common" + xmlns:exslfunc="http://exslt.org/functions" + xmlns:exslstr="http://exslt.org/strings" + xmlns:html="&xhtml;" + xmlns:nie="http://www.semanticdesktop.org/ontologies/2007/01/19/nie#" + xmlns:nfo="http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xslt="http://www.w3.org/1999/XSL/TransformAlias" xmlns:书社="urn:fdc:ladys.computer:20231231:Shu1She4" + xmlns:书社vocab="urn:fdc:ladys.computer:20231231:Shu1She4:vocab:" + 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'"/> + <variable name="builddir" select="document($METADATA)//书社vocab:BuildDirectory/@nfo:fileUrl"/> <template match="/"> - <xslt:transform exclude-result-prefixes="catalog exsl" version="1.0"> - <xslt:param name="catalog" select="'catalog'"/> - <for-each select="//catalog:uri"> - <xslt:include href="{@uri}"/> + <variable name="ids"> + <for-each select="//catalog:uri[@name]"> + <书社:id> + <value-of select="@name"/> + </书社:id> + </for-each> + </variable> + <variable name="unique-ids"> + <for-each select="exsl:node-set($ids)/*"> + <if test="not(preceding-sibling::*[string(.)=string(current())])"> + <copy-of select="."/> + </if> </for-each> - <xslt:template match="/" priority="1"> - <xslt:variable name="expansion"> - <xslt:apply-templates select="." mode="书社:expand"/> + </variable> + <xslt:transform exclude-result-prefixes="nie nfo" extension-element-prefixes="exsl exslfunc exslstr" version="1.0"> + <xslt:param name="BUILDTIME" select="'1972-12-31T00:00:00Z'"/> + <xslt:param name="IDENTIFIER" select="false()"/> + <xslt:param name="SRCREV" select="false()"/> + <xslt:param name="THISREV" select="false()"/> + <element name="exslfunc:function"> + <attribute name="name"> + <text>书社:document-with-attributes-applied</text> + </attribute> + <xslt:param name="document" select="/.."/> + <xslt:variable name="application-result-fragment"> + <xslt:variable name="result-nodes" select="$document/node()[not(self::书社:apply-attributes-to-root)]|$document/书社:apply-attributes-to-root//node()[not(self::书社:apply-attributes-to-root) and not(ancestor::*[not(self::书社:apply-attributes-to-root)])]"/> + <xslt:variable name="root-with-attributes"> + <xslt:call-template name="书社:apply-attributes"> + <xslt:with-param name="context-nodes" select="$document//书社:apply-attributes-to-root"/> + <xslt:with-param name="destination-nodes" select="$result-nodes"/> + </xslt:call-template> + </xslt:variable> + <xslt:apply-templates select="exsl:node-set($root-with-attributes)" mode="书社:apply"/> </xslt:variable> - <xslt:variable name="result"> - <xslt:apply-templates select="exsl:node-set($expansion)/*"/> + <element name="exslfunc:result"> + <attribute name="select"> + <text>exsl:node-set($application-result-fragment)</text> + </attribute> + </element> + </element> + <xslt:variable name="书社:source" select="/"/> + <xslt:variable name="书社:about-fragment"> + <apply-templates select="document($METADATA)" mode="书社:literally"> + <with-param name="extension-element-namespaces" select="'http://exslt.org/common http://exslt.org/functions http://exslt.org/strings'"/> + </apply-templates> + </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="书社:expansion" select="书社:document-with-attributes-applied(exsl:node-set($书社:expansion-fragment))"/> + <xslt:variable name="书社:result-fragment"> + <xslt:element name="书社:apply-attributes-to-root"> + <xslt:attribute name="书社:version"> + <xslt:value-of select="$THISREV"/> + </xslt:attribute> + <xslt:apply-templates select="$书社:expansion/node()"/> + </xslt:element> + </xslt:variable> + <xslt:variable name="书社:result" select="书社:document-with-attributes-applied(exsl:node-set($书社:result-fragment))"/> + <xslt:variable name="书社:destination" select="string($书社:about//*[@rdf:about=$IDENTIFIER]/@书社vocab:destination)"/> + <for-each select="//catalog:uri"> + <xslt:include href="{@uri}"> + <attribute name="书社:id"> + <value-of select="@name"/> + </attribute> + </xslt:include> + </for-each> + <xslt:template name="书社:apply-attributes"> + <xslt:param name="context-nodes" select="/.."/> + <xslt:param name="destination-nodes" select="/.."/> + <xslt:variable name="additional-attributes" select="$context-nodes/@*"/> + <xslt:for-each select="$destination-nodes"> + <xslt:variable name="existing-attributes" select="@*"/> + <xslt:choose> + <xslt:when test="self::*"> + <xslt:variable name="context" select="."/> + <xslt:variable name="attribute-names"> + <xslt:for-each select="$existing-attributes|$additional-attributes"> + <书社:attribute> + <attribute name="local-name"> + <text>{local-name()}</text> + </attribute> + <attribute name="name"> + <text>{name()}</text> + </attribute> + <attribute name="namespace-uri"> + <text>{namespace-uri()}</text> + </attribute> + </书社:attribute> + </xslt:for-each> + </xslt:variable> + <xslt:variable name="lang"> + <xslt:choose> + <xslt:when test="(self::html:*|self::svg:*)/@lang"> + <xslt:value-of select="@lang"/> + </xslt:when> + <xslt:when test="@xml:lang"> + <xslt:value-of select="@xml:lang"/> + </xslt:when> + <xslt:when test="$additional-attributes[(parent::html:* or parent::svg:*) and namespace-uri()='' and local-name()='lang']"> + <xslt:value-of select="$additional-attributes[(parent::html:* or parent::svg:*) and namespace-uri()='' and local-name()='lang']"/> + </xslt:when> + <xslt:when test="(self::html:* or self::svg:*) and $additional-attributes[(parent::书社:apply-attributes or parent::书社:apply-attributes-to-root) and namespace-uri()='' and local-name()='lang']"> + <xslt:value-of select="$additional-attributes[(parent::书社:apply-attributes or parent::书社:apply-attributes-to-root) and namespace-uri()='' and local-name()='lang']"/> + </xslt:when> + <xslt:when test="$additional-attributes[namespace-uri()='&xml;' and local-name()='lang']"> + <xslt:value-of select="$additional-attributes[namespace-uri()='&xml;' and local-name()='lang']"/> + </xslt:when> + </xslt:choose> + </xslt:variable> + <xslt:copy> + <xslt:if test="string($lang)!=''"> + <xslt:if test="self::html:* or self::svg:*"> + <xslt:attribute name="lang"> + <xslt:value-of select="$lang"/> + </xslt:attribute> + </xslt:if> + <xslt:attribute name="xml:lang"> + <xslt:value-of select="$lang"/> + </xslt:attribute> + </xslt:if> + <xslt:for-each select="exsl:node-set($attribute-names)/*"> + <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='destination' or @local-name='disable-output-wrapping')"/> + <xslt:when test="preceding-sibling::*[@local-name=current()/@local-name and @namespace-uri=current()/@namespace-uri]"/> + <xslt:otherwise> + <xslt:attribute> + <attribute name="name"> + <text>{@name}</text> + </attribute> + <attribute name="namespace"> + <text>{@namespace-uri}</text> + </attribute> + <xslt:for-each select="$existing-attributes[local-name()=current()/@local-name and namespace-uri()=current()/@namespace-uri]"> + <xslt:value-of select="."/> + <xslt:if test="position()!=last()"> + <xslt:text> + <text> </text> + </xslt:text> + </xslt:if> + </xslt:for-each> + <xslt:if test="$existing-attributes[local-name()=current()/@local-name and namespace-uri()=current()/@namespace-uri] and $additional-attributes[local-name()=current()/@local-name and namespace-uri()=current()/@namespace-uri]"> + <xslt:text> + <text> </text> + </xslt:text> + </xslt:if> + <xslt:for-each select="$additional-attributes[local-name()=current()/@local-name and namespace-uri()=current()/@namespace-uri]"> + <xslt:value-of select="."/> + <xslt:if test="position()!=last()"> + <xslt:text> + <text> </text> + </xslt:text> + </xslt:if> + </xslt:for-each> + </xslt:attribute> + </xslt:otherwise> + </xslt:choose> + </xslt:for-each> + <xslt:copy-of select="node()"/> + </xslt:copy> + </xslt:when> + <xslt:otherwise> + <xslt:copy-of select="."/> + </xslt:otherwise> + </xslt:choose> + </xslt:for-each> + </xslt:template> + <xslt:template name="书社:wrap"> + <xslt:param name="nodes" select="/.."/> + <xslt:variable name="modalinput-fragment"> + <xslt:copy-of select="$nodes"/> + <apply-templates select="exsl:node-set($unique-ids)" mode="书社:literally"/> </xslt:variable> - <xslt:variable name="metadata"> - <xslt:copy-of select="exsl:node-set($result)/html/head/*"/> - <xslt:apply-templates select="exsl:node-set($result)" mode="书社:metadata"/> + <xslt:variable name="modalinput" select="exsl:node-set($modalinput-fragment)"/> + <xslt:variable name="metadata-fragment"> + <xslt:copy-of select="$nodes[self::html:html]/html:head/node()|$nodes[self::html:head]/node()"/> + <xslt:apply-templates select="$modalinput/node()" mode="书社:metadata"/> </xslt:variable> - <html:html> - <xslt:copy-of select="exsl:node-set($result)/html:html/@*"/> - <html:head> - <xslt:copy-of select="exsl:node-set($result)/html:html/html:head/@*"/> - <html:title> - <xslt:for-each select="exsl:node-set($metadata)/html:title"> + <xslt:variable name="metadata" select="exsl:node-set($metadata-fragment)"/> + <xslt:element name="html" namespace="&xhtml;"> + <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"/> + </xslt:attribute> + </xslt:if> + <xslt:if test="not($nodes[self::html:html]/@xml:lang) and $nodes[self::html:*]/@lang|$nodes[self::svg:*]/@lang|$nodes/@xml:lang"> + <xslt:attribute name="xml:lang"> + <xslt:value-of select="$nodes[self::html:*]/@lang|$nodes[self::svg:*]/@lang|$nodes/@xml:lang"/> + </xslt:attribute> + </xslt:if> + <xslt:element name="head" namespace="&xhtml;"> + <xslt:copy-of select="$nodes[self::html:html]/html:head/@*|$nodes[self::html:head]/@*"/> + <xslt:element name="title" namespace="&xhtml;"> + <xslt:for-each select="$metadata/html:title"> <xslt:value-of select="."/> + <xslt:if test="position()!=last()"> + <xslt:text> + <text> </text> + </xslt:text> + </xslt:if> </xslt:for-each> - </html:title> - <xslt:copy-of select="exsl:node-set($metadata)/*[not(self::html:title)]"/> - <xslt:if test="not(exsl:node-set($metadata)/html:meta[@name='generator'])"> - <html:meta name="generator" content="⛩️📰 书社"/> - </xslt:if> - </html:head> - <html:body> - <xslt:copy-of select="exsl:node-set($result)/*[not(self::html:html or self::html:body)]|exsl:node-set($result)/html:html/*[not(self::html:head or self::html:body)]|exsl:node-set($result)/html:html/html:body/*|exsl:node-set($result)/html:body/*"/> - </html:body> - </html:html> + </xslt:element> + <xslt:copy-of select="$metadata/node()[not(self::html:title or self::html:meta and @name='generator')]"/> + <xslt:element name="meta" namespace="&xhtml;"> + <xslt:attribute name="name"> + <xslt:text> + <text>generator</text> + </xslt:text> + </xslt:attribute> + <xslt:attribute name="content"> + <xslt:for-each select="$metadata/html:meta[@name='generator']"> + <xslt:value-of select="@content"/> + <xslt:text> + <text>, </text> + </xslt:text> + </xslt:for-each> + <xslt:text> + <text>⛩📰 书社</text> + </xslt:text> + <xslt:if test="$THISREV"> + <xslt:text> + <text> (</text> + </xslt:text> + <xslt:value-of select="$THISREV"/> + <xslt:text> + <text>)</text> + </xslt:text> + </xslt:if> + </xslt:attribute> + </xslt:element> + </xslt:element> + <xslt:element name="body" namespace="&xhtml;"> + <xslt:copy-of select="($nodes[self::html:html]/html:body/@*|$nodes[self::html:body]/@*)[not(namespace-uri()='&书社;' and local-name()='archived-as')]"/> + <xslt:apply-templates select="$modalinput/node()" mode="书社:header"/> + <xslt:for-each select="$nodes[not(self::html:html or self::html:head or self::html:body)]|$nodes[self::html:html]/node()[not(self::html:head or self::html:body)]|$nodes[self::html:html]/html:body/node()|$nodes[self::html:body]/node()"> + <xslt:copy> + <xslt:copy-of select="@*[not(namespace-uri()='&书社;' and local-name()='archived-as')]|node()"/> + </xslt:copy> + </xslt:for-each> + <xslt:apply-templates select="$modalinput/node()" mode="书社:footer"/> + </xslt:element> + </xslt:element> + </xslt:template> + <xslt:template match="/"> + <xslt:variable name="finalization-fragment"> + <xslt:apply-templates select="$书社:result" mode="书社:finalize"/> + </xslt:variable> + <xslt:copy-of select="书社:document-with-attributes-applied(exsl:node-set($finalization-fragment))"/> </xslt:template> <xslt:template match="@*|node()" priority="-1"> <xslt:copy> <xslt:apply-templates select="@*|node()"/> </xslt:copy> </xslt:template> - <xslt:template match="书社:link[@xlink:show='embed']" mode="书社:expand"> - <xslt:variable name="uri" select="substring-before(document($catalog)//catalog:uri[@name=current()/@xlink:href]/@uri[1], '#')"/> + <xslt:template match="书社:apply-attributes" mode="书社:apply" priority="1"> + <xslt:variable name="children"> + <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="书社:apply" priority="1"> + <xslt:apply-templates mode="书社:apply"/> + </xslt:template> + <xslt:template match="@*|node()" mode="书社:apply" priority="-1"> + <xslt:copy> + <xslt:apply-templates select="@*|node()" mode="书社:apply"/> + </xslt:copy> + </xslt:template> + <xslt:template match="书社:link[@xlink:show='embed' and (not(@xlink:actuate) or @xlink:actuate='none')]" mode="书社:expand" priority="1"> + <xslt:variable name="link" select="."/> + <xslt:variable name="identifier" select="string(@xlink:href)"/> + <xslt:variable name="is-dir" select="substring($identifier, string-length($identifier))='/'"/> + <xslt:variable name="included" select="$书社:about//*[@rdf:about=$identifier or $is-dir and starts-with(@rdf:about, $identifier)]"/> <xslt:choose> - <xslt:when test="$uri"> - <xslt:apply-templates select="document($uri)" mode="书社:expand"/> + <xslt:when test="$included"> + <xslt:for-each select="$included"> + <xslt:sort select="@rdf:about" data-type="text" lang="zxx" case-order="upper-first"/> + <xslt:variable name="uri" select="书社vocab:hasParsedFile/@nfo:fileUrl"/> + <xslt:variable name="expanded"> + <xslt:apply-templates select="document($uri)" mode="书社:expand"> + <xslt:with-param name="identifier" select="string(@rdf:about)"/> + </xslt:apply-templates> + </xslt:variable> + <xslt:for-each select="exsl:node-set($expanded)/node()"> + <xslt:copy> + <xslt:choose> + <xslt:when test="self::html:*"> + <xslt:variable name="existing-types" select="exslstr:tokenize(@itemtype)"/> + <xslt:attribute name="itemscope">itemscope</xslt:attribute> + <xslt:attribute name="itemtype"> + <xslt:for-each select="$existing-types/token[string()!='&书社;:document']"> + <xslt:if test="position()!=1"> + <xslt:text> + <text> </text> + </xslt:text> + </xslt:if> + <xslt:value-of select="."/> + </xslt:for-each> + <xslt:if test="not($existing-types/token[string()='&书社;:embed'])"> + <xslt:if test="$existing-types/token[string()!='&书社;:document']"> + <xslt:text> + <text> </text> + </xslt:text> + </xslt:if> + <xslt:text> + <text>&书社;:embed</text> + </xslt:text> + </xslt:if> + </xslt:attribute> + <xslt:choose> + <xslt:when test="$link/@书社:archived-as"> + <xslt:copy-of select="$link/@书社:archived-as"/> + </xslt:when> + <xslt:when test="@书社:archived-as"> + <xslt:copy-of select="@书社:archived-as"/> + </xslt:when> + </xslt:choose> + <xslt:copy-of select="@*[not(namespace-uri()='' and (local-name()='itemscope' or local-name()='itemtype')) and not(namespace-uri()='&书社;' and local-name()='archived-as')]|node()"/> + </xslt:when> + <xslt:otherwise> + <xslt:choose> + <xslt:when test="self::* and $link/@书社:archived-as"> + <xslt:copy-of select="$link/@书社:archived-as"/> + </xslt:when> + <xslt:when test="@书社:archived-as"> + <xslt:copy-of select="@书社:archived-as"/> + </xslt:when> + </xslt:choose> + <xslt:copy-of select="@*[not(namespace-uri()='&书社;' and local-name()='archived-as')]|node()"/> + </xslt:otherwise> + </xslt:choose> + </xslt:copy> + </xslt:for-each> + </xslt:for-each> </xslt:when> <xslt:otherwise> <xslt:copy> @@ -72,13 +393,135 @@ 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="@*|text()|*[not(self::书社:link) or not(@xlink:show='embed')]" mode="书社:expand"> + <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:variable name="existing-types" select="exslstr:tokenize(@itemtype)"/> + <xslt:attribute name="itemscope">itemscope</xslt:attribute> + <xslt:attribute name="itemtype"> + <xslt:for-each select="$existing-types/token"> + <xslt:if test="position()!=1"> + <xslt:text> + <text> </text> + </xslt:text> + </xslt:if> + <xslt:value-of select="."/> + </xslt:for-each> + <xslt:if test="not($existing-types/token[string()='&书社;:embed' or string()='&书社;:document'])"> + <xslt:if test="$existing-types/token"> + <xslt:text> + <text> </text> + </xslt:text> + </xslt:if> + <xslt:text> + <text>&书社;:document</text> + </xslt:text> + </xslt:if> + </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()" mode="书社:expand" priority="-1"> <xslt:copy> <xslt:apply-templates select="@*|node()" mode="书社:expand"/> </xslt:copy> </xslt:template> + <xslt:template match="text()" mode="书社:header"/> + <xslt:template match="书社:archive" mode="书社:finalize" priority="1"> + <xslt:copy> + <xslt:apply-templates select="@*" mode="书社:finalize"/> + <xslt:for-each select="node()"> + <xslt:choose> + <xslt:when test="self::*"> + <xslt:variable name="component-fragment"> + <xslt:copy> + <xslt:choose> + <xslt:when test="self::html:*"> + <xslt:variable name="existing-types" select="exslstr:tokenize(@itemtype)"/> + <xslt:attribute name="itemscope">itemscope</xslt:attribute> + <xslt:attribute name="itemtype"> + <xslt:for-each select="$existing-types/token"> + <xslt:if test="position()!=1"> + <xslt:text> + <text> </text> + </xslt:text> + </xslt:if> + <xslt:value-of select="."/> + </xslt:for-each> + <xslt:if test="not($existing-types/token[string()='&书社;:embed' or string()='&书社;:document'])"> + <xslt:if test="$existing-types/token"> + <xslt:text> + <text> </text> + </xslt:text> + </xslt:if> + <xslt:text> + <text>&书社;:document</text> + </xslt:text> + </xslt:if> + </xslt:attribute> + <xslt:copy-of select="@*[not(namespace-uri()='' and (local-name()='itemscope' or local-name()='itemtype'))]|node()"/> + </xslt:when> + <xslt:otherwise> + <xslt:copy-of select="@*|node()"/> + </xslt:otherwise> + </xslt:choose> + </xslt:copy> + </xslt:variable> + <xslt:variable name="finalization-fragment"> + <xslt:apply-templates select="exsl:node-set($component-fragment)" mode="书社:finalize"/> + </xslt:variable> + <xslt:copy-of select="书社:document-with-attributes-applied(exsl:node-set($finalization-fragment))"/> + </xslt:when> + <xslt:otherwise> + <xslt:apply-templates select="." mode="书社:finalize"/> + </xslt:otherwise> + </xslt:choose> + </xslt:for-each> + </xslt:copy> + </xslt:template> + <xslt:template match="@书社:destination|@书社:disable-output-wrapping" mode="书社:finalize" priority="1"/> + <xslt:template match="/" mode="书社:finalize"> + <xslt:choose> + <xslt:when test="not(html:*) or 书社:raw-text or 书社:base64-binary or 书社:archive or */@书社:disable-output-wrapping"> + <xslt:apply-templates mode="书社:finalize"/> + </xslt:when> + <xslt:otherwise> + <xslt:variable name="wrapped-result"> + <xslt:call-template name="书社:wrap"> + <xslt:with-param name="nodes" select="node()"/> + </xslt:call-template> + </xslt:variable> + <xslt:apply-templates select="exsl:node-set($wrapped-result)/node()" mode="书社:finalize"/> + </xslt:otherwise> + </xslt:choose> + </xslt:template> + <xslt:template match="@*|node()" mode="书社:finalize" priority="-1"> + <xslt:copy> + <xslt:apply-templates select="@*|node()" mode="书社:finalize"/> + </xslt:copy> + </xslt:template> + <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"/> </transform>