X-Git-Url: https://git.ladys.computer/Shushe/blobdiff_plain/be24d75be02ad626c13c0b52cdc30e2ef8735c9f..15648b660cd14e2834629ad52b65ceb313362c9b:/lib/expandmetadata.xslt diff --git a/lib/expandmetadata.xslt b/lib/expandmetadata.xslt index 3d46c82..f2efd18 100644 --- a/lib/expandmetadata.xslt +++ b/lib/expandmetadata.xslt @@ -25,74 +25,56 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one > <variable name="builddir" select="//书社vocab:BuildDirectory/@nfo:fileUrl"/> <variable name="files" select="//书社vocab:SourceFile|//书社vocab:IncludeFile"/> - <template name="书社:process-dependencies"> - <param name="processed"/> - <param name="unprocessed"/> - <variable name="queue"> - <copy-of select="exsl:node-set($unprocessed)/书社:dependency-root"/> - <for-each select="exsl:node-set($unprocessed)/书社:dependency"> - <if test="not((exsl:node-set($processed)/书社:*|preceding-sibling::书社:*|following-sibling::书社:recursive-dependency)[string()=string(current())])"> - <copy-of select="."/> - </if> - </for-each> - </variable> - <variable name="old"> - <copy-of select="exsl:node-set($processed)/书社:dependency-root"/> - <copy-of select="exsl:node-set($processed)/书社:recursive-dependency"/> - <for-each select="exsl:node-set($unprocessed)/书社:recursive-dependency"> - <if test="not((exsl:node-set($processed)/书社:recursive-dependency|preceding-sibling::书社:recursive-dependency)[string()=string(current())])"> - <copy-of select="."/> - </if> - </for-each> - <for-each select="exsl:node-set($processed)/书社:dependency"> - <if test="not(exsl:node-set($unprocessed)/书社:recursive-dependency[string()=string(current())])"> - <copy-of select="."/> - </if> - </for-each> - <copy-of select="$queue"/> - </variable> - <variable name="new"> - <for-each select="exsl:node-set($queue)/书社:*"> - <for-each select="$files[@rdf:about=string(current()) and nie:interpretedAs/nfo:PlainTextDocument]"> - <variable name="parent" select="@rdf:about"/> - <variable name="subdir"> + <template name="书社:collect-dependency-paths"> + <param name="path" select="/.."/> + <variable name="parent" select="string($path/*[last()])"/> + <variable name="children-fragment"> + <for-each select="$files[@rdf:about=$parent and nie:interpretedAs/nfo:PlainTextDocument]"> + <variable name="uri" select="书社vocab:hasParsedFile/@nfo:fileUrl"/> + <for-each select="document($uri)//书社:link[@xlink:show='embed']"> + <variable name="identifier" select="string(@xlink:href)"/> + <variable name="is-dir" select="substring($identifier, string-length($identifier))='/'"/> + <for-each select="$files/@rdf:about[string(.)=$identifier or $is-dir and starts-with(., $identifier)]"> + <sort select="." data-type="text" lang="zxx" case-order="upper-first"/> <choose> - <when test="starts-with($parent, 'about:shushe?include=')"> - <text>/includes/</text> - </when> - <when test="starts-with($parent, 'about:shushe?source=')"> - <text>/sources/</text> + <when test="$path/*[string(.)=string(current())]"> + <书社:recursive-dependency> + <value-of select="."/> + </书社:recursive-dependency> </when> + <otherwise> + <书社:dependency> + <value-of select="."/> + </书社:dependency> + </otherwise> </choose> - </variable> - <for-each select="document(concat($builddir, $subdir, @书社vocab:path), .)//书社:link[@xlink:show='embed']"> - <if test="exsl:node-set($old)/书社:dependency-root[string()=string(current()/@xlink:href)]"> - <书社:recursive-dependency> - <value-of select="$parent"/> - </书社:recursive-dependency> - </if> - <if test="$files/@rdf:about[string()=string(current()/@xlink:href)]"> - <书社:dependency> - <value-of select="@xlink:href"/> - </书社:dependency> - </if> </for-each> </for-each> </for-each> </variable> + <variable name="children" select="exsl:node-set($children-fragment)"/> <choose> - <when test="exsl:node-set($new)/书社:dependency"> - <call-template name="书社:process-dependencies"> - <with-param name="processed"> - <copy-of select="$old"/> - </with-param> - <with-param name="unprocessed"> - <copy-of select="$new"/> - </with-param> - </call-template> + <when test="$children/*"> + <for-each select="$children/书社:recursive-dependency"> + <书社:dependency-path> + <copy-of select="$path[string(.)=string(current())]/preceding-sibling::*"/> + <copy-of select="."/> + </书社:dependency-path> + </for-each> + <for-each select="$children/书社:dependency"> + <variable name="path-fragment"> + <copy-of select="$path"/> + <copy-of select="."/> + </variable> + <call-template name="书社:collect-dependency-paths"> + <with-param name="path" select="exsl:node-set($path-fragment)"/> + </call-template> + </for-each> </when> <otherwise> - <copy-of select="$old"/> + <书社:dependency-path> + <copy-of select="$path"/> + </书社:dependency-path> </otherwise> </choose> </template> @@ -106,7 +88,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </copy> </template> <template match="//书社vocab:SourceFile[nie:interpretedAs/nfo:PlainTextDocument]" priority="1"> - <variable name="parsed" select="document(concat($builddir, '/sources/', @书社vocab:path), .)"/> + <variable name="parsed" select="document(书社vocab:hasParsedFile/@nfo:fileUrl)"/> <variable name="destination-delim" select="concat('/', $parsed/*/@书社:destination, '/')"/> <variable name="destination"> <choose> @@ -190,13 +172,21 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </template> <template match="书社vocab:SourceFile|书社vocab:IncludeFile" mode="书社:dependencies"> <if test="nie:interpretedAs/nfo:PlainTextDocument"> - <call-template name="书社:process-dependencies"> - <with-param name="unprocessed"> - <书社:dependency-root> - <value-of select="@rdf:about"/> - </书社:dependency-root> - </with-param> - </call-template> + <variable name="path-fragment"> + <书社:dependency-root> + <value-of select="@rdf:about"/> + </书社:dependency-root> + </variable> + <variable name="paths-fragment"> + <call-template name="书社:collect-dependency-paths"> + <with-param name="path" select="exsl:node-set($path-fragment)"/> + </call-template> + </variable> + <for-each select="exsl:node-set($paths-fragment)/*/*[not(self::书社:dependency-root)]"> + <if test="not(preceding::*[string(.)=string(current())])"> + <copy-of select="."/> + </if> + </for-each> </if> </template> <output method="xml" encoding="UTF-8"/>