<
xsl:stylesheet xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform" xmlns:pf=
"http://www.daisy.org/ns/pipeline/functions" xmlns:pxi=
"http://www.daisy.org/ns/pipeline/xproc/internal" xmlns:d=
"http://www.daisy.org/ns/pipeline/data" xmlns:dtb=
"http://www.daisy.org/z3986/2005/dtbook/" version=
"2.0" exclude-result-prefixes=
"#all">
<
xsl:import href=
"http://www.daisy.org/pipeline/modules/file-utils/library.xsl"/>
<
xsl:param name=
"mo-dir"/>
<
xsl:variable name=
"mo-dir-rel" select=
"pf:relativize-uri($mo-dir, base-uri(/*))"/>
<
xsl:key name=
"struct" match=
"*[@node]" use=
"@node"/>
<
xsl:key name=
"clips" match=
"d:clip" use=
"@textref"/>
<
xsl:variable name=
"top-elements" select=
"//dtb:level| //dtb:level1| //dtb:level2| //dtb:level3| //dtb:level4| //dtb:level5| //dtb:level6"/>
<
xsl:variable name=
"top-element-positions">
<
d:structs>
<
xsl:for-each select=
"$top-elements">
<
d:s node=
"{generate-id(.)}" pos=
"{position()}"/>
</
xsl:for-each>
</
d:structs>
</
xsl:variable>
<
xsl:template match=
"*[@id and empty(@pxi:no-smilref)]">
<
xsl:copy>
<
xsl:variable name=
"prev" select=
"preceding::*[self::dtb:level| self::dtb:level1| self::dtb:level2| self::dtb:level3| self::dtb:level4| self::dtb:level5| self::dtb:level6][1]"/>
<
xsl:variable name=
"smil-id" select=
"if ($prev) then key('struct',generate-id($prev),$top-element-positions)/@pos else '0'"/>
<
xsl:attribute name=
"smilref">
<
xsl:value-of select=
"concat($mo-dir-rel, 'mo', $smil-id, '.smil#s', @id)"/>
</
xsl:attribute>
<
xsl:choose>
<
xsl:when test=
"exists(child::dtb:w) or key('clips',concat('#',@id),collection()[/d:audio-clips])">
<
xsl:copy-of select=
"@*|node()"/>
</
xsl:when>
<
xsl:otherwise>
<
xsl:apply-templates select=
"@*|node()"/>
</
xsl:otherwise>
</
xsl:choose>
</
xsl:copy>
</
xsl:template>
<
xsl:template match=
"node()|@*">
<
xsl:copy>
<
xsl:apply-templates select=
"node()|@*"/>
</
xsl:copy>
</
xsl:template>
</
xsl:stylesheet>