X-Git-Url: https://git.ladys.computer/Shushe/blobdiff_plain/c29056b55b54897e5eae3d0a4e407406d4c593c6..d3431e949fbbc8147ba188cb774e5176adf9fe18:/lib/catalog2transform.xslt diff --git a/lib/catalog2transform.xslt b/lib/catalog2transform.xslt index 85d043c..3fb4c33 100644 --- a/lib/catalog2transform.xslt +++ b/lib/catalog2transform.xslt @@ -29,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'"/> @@ -45,6 +45,43 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <xslt:variable name="书社:result"> <xslt:apply-templates select="exsl:node-set($书社:expansion)/node()"/> </xslt:variable> + <xslt:variable name="书社:destination"> + <xslt:choose> + <xslt:when test="string($书社:source/@书社:destination)!=''"> + <xslt:value-of select="$书社:source/@书社:destination"/> + </xslt:when> + <xslt:when test="starts-with($PATH, '/')"> + <xslt:value-of select="substring-after($PATH, '/')"/> + </xslt:when> + <xslt:otherwise> + <xslt:value-of select="$PATH"/> + </xslt:otherwise> + </xslt:choose> + </xslt:variable> + <xslt:variable name="书社:pagedestination"> + <xslt:variable name="dir"> + <xslt:for-each select="exslstr:tokenize($书社:destination, '/')[not(position()=last())]"> + <xslt:value-of select="."/> + <xslt:text>/</xslt:text> + </xslt:for-each> + </xslt:variable> + <xslt:variable name="name" select="string(exslstr:tokenize($书社:destination, '/')[last()])"/> + <xslt:value-of select="$dir"/> + <xslt:choose> + <xslt:when test="contains($name, '%s')"> + <xslt:value-of select="$name"/> + </xslt:when> + <xslt:when test="contains($name, '.')"> + <xslt:value-of select="substring-before($name, '.')"/> + <xslt:text>%s.</xslt:text> + <xslt:value-of select="substring-after($name, '.')"/> + </xslt:when> + <xslt:otherwise> + <xslt:value-of select="$name"/> + <xslt:text>%s</xslt:text> + </xslt:otherwise> + </xslt:choose> + </xslt:variable> <for-each select="//catalog:uri"> <xslt:include href="{@uri}"> <if test="contains(@name, ':')"> @@ -118,6 +155,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> @@ -174,6 +212,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"/> @@ -232,7 +275,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/self::书社:*[local-name()='raw-text' or local-name()='base64-binary']|$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"/> @@ -265,10 +308,60 @@ 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[not(../self::书社:page)]|@书社:disable-output-wrapping|@书社:archived-as[../ancestor::*[not(self::书社:apply-attributes-to-root or self::书社:apply-attributes)]]" mode="书社:application" priority="1"/> + <xslt:template match="书社:archive|书社:page" mode="书社:application" priority="1"> + <xslt:copy> + <xslt:for-each select="@*"> + <xslt:choose> + <xslt:when test="../self::书社:archive and 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:otherwise> + </xslt:choose> + </xslt:for-each> + <xslt:if test="self::书社:page and not(@书社:destination)"> + <xslt:attribute name="书社:destination"> + <xslt:value-of select="substring-before($书社:pagedestination, '%s')"/> + <xslt:text>%22%7B</xslt:text> + <xslt:choose> + <xslt:when test="@name"> + <xslt:value-of select="@name"/> + </xslt:when> + <xslt:otherwise> + <xslt:value-of select="count(ancestor::书社:page|preceding::书社:page)+1"/> + </xslt:otherwise> + </xslt:choose> + <xslt:text>%7D%22</xslt:text> + <xslt:value-of select="substring-after($书社:pagedestination, '%s')"/> + </xslt:attribute> + </xslt:if> + <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: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="."/> @@ -276,7 +369,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> @@ -356,7 +449,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"/>