<
xsl:stylesheet xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform" xmlns:xs=
"http://www.w3.org/2001/XMLSchema" xmlns:d=
"http://www.daisy.org/ns/pipeline/data" xmlns:pf=
"http://www.daisy.org/ns/pipeline/functions" xmlns:f=
"http://www.daisy.org/ns/pipeline/internal-functions" xmlns:dtb=
"http://www.daisy.org/z3986/2005/dtbook/" xmlns:m=
"http://www.w3.org/1998/Math/MathML" version=
"2.0" exclude-result-prefixes=
"#all">
<
xsl:import href=
"http://www.daisy.org/pipeline/modules/file-utils/library.xsl"/>
<
xsl:param name=
"context.fileset" as=
"document-node(element(d:fileset))?"/>
<
xsl:param name=
"context.in-memory" as=
"document-node()*"/>
<
xsl:variable name=
"doc-base" select=
"base-uri(/*)"/>
<
xsl:template match=
"/">
<
d:fileset>
<
xsl:attribute name=
"xml:base" select=
"replace($doc-base,'[^/]+$','')"/>
<
xsl:for-each select=
"//dtb:link[@rel='stylesheet'][empty(@type) or @type='text/css']/@href[normalize-space()]">
<
xsl:sequence select=
"f:fileset-entry(.,'text/css')"/>
</
xsl:for-each>
<
xsl:for-each select=
"//dtb:link[@rel='pronunciation']/@href[normalize-space()]">
<
xsl:sequence select=
"f:fileset-entry(.,../@type)"/>
</
xsl:for-each>
<
xsl:for-each select=
"//dtb:*/@src">
<
xsl:sequence select=
"f:fileset-entry(.,())"/>
</
xsl:for-each>
<
xsl:for-each select=
"//m:math/@altimg">
<
xsl:sequence select=
"f:fileset-entry(.,())"/>
</
xsl:for-each>
</
d:fileset>
</
xsl:template>
<
xsl:function name=
"f:fileset-entry" as=
"element()?">
<
xsl:param name=
"uri" as=
"item()"/>
<
xsl:param name=
"type" as=
"xs:string?"/>
<
xsl:variable name=
"href" select=
"pf:normalize-uri($uri,false())"/>
<
xsl:if test=
"$href and (pf:get-scheme($href)='file' or pf:is-relative($href))">
<
xsl:variable name=
"resolved" select=
"if ($uri instance of attribute()) then resolve-uri($href,pf:base-uri($uri)) else $href"/>
<
xsl:variable name=
"file-in-context" as=
"element(d:file)?" select=
"$context.fileset//d:file[resolve-uri(@href,base-uri(.))=$resolved][1]"/>
<
d:file href=
"{pf:relativize-uri($resolved,$doc-base)}">
<
xsl:choose>
<
xsl:when test=
"$file-in-context[@original-href]">
<
xsl:sequence select=
"$file-in-context/@original-href"/>
</
xsl:when>
<
xsl:when test=
"$file-in-context"/>
<
xsl:otherwise>
<
xsl:attribute name=
"original-href" select=
"$resolved"/>
</
xsl:otherwise>
</
xsl:choose>
<
xsl:if test=
"$type">
<
xsl:attribute name=
"media-type" select=
"$type"/>
</
xsl:if>
</
d:file>
</
xsl:if>
</
xsl:function>
</
xsl:stylesheet>