<
p:declare-step xmlns:p=
"http://www.w3.org/ns/xproc" xmlns:px=
"http://www.daisy.org/ns/pipeline/xproc" xmlns:pxi=
"http://www.daisy.org/ns/pipeline/xproc/internal/daisy3-to-epub3" xmlns:d=
"http://www.daisy.org/ns/pipeline/data" type=
"px:daisy3-to-epub3" version=
"1.0" name=
"main">
<
p:input port=
"source.fileset" primary=
"true"/>
<
p:input port=
"source.in-memory" sequence=
"true"/>
<
p:output port=
"result.fileset" primary=
"true"/>
<
p:output port=
"result.in-memory" sequence=
"true">
<
p:pipe step=
"convert" port=
"result.in-memory"/>
</
p:output>
<
p:option name=
"mediaoverlays" required=
"true"/>
<
p:option name=
"assert-valid" required=
"true"/>
<
p:option name=
"chunk-size" required=
"false" select=
"'-1'"/>
<
p:option name=
"temp-dir" required=
"true"/>
<
p:import href=
"http://www.daisy.org/pipeline/modules/common-utils/library.xpl">
<
p:documentation>
px:assert
</
p:documentation>
</
p:import>
<
p:import href=
"http://www.daisy.org/pipeline/modules/dtbook-to-html/library.xpl">
<
p:documentation>
px:dtbook-to-html
</
p:documentation>
</
p:import>
<
p:import href=
"http://www.daisy.org/pipeline/modules/epub-utils/library.xpl">
<
p:documentation>
px:epub3-create-mediaoverlays
px:epub3-create-package-doc
px:epub3-ocf-finalize
</
p:documentation>
</
p:import>
<
p:import href=
"http://www.daisy.org/pipeline/modules/fileset-utils/library.xpl">
<
p:documentation>
px:fileset-join
px:fileset-load
px:fileset-rebase
px:fileset-create
</
p:documentation>
</
p:import>
<
p:import href=
"http://www.daisy.org/pipeline/modules/smil-utils/library.xpl">
<
p:documentation>
px:smil-to-audio-clips
</
p:documentation>
</
p:import>
<
p:import href=
"../internal/ncx-to-nav.xpl">
<
p:documentation>
pxi:ncx-to-nav
</
p:documentation>
</
p:import>
<
p:import href=
"../internal/oebps-to-opf-metadata.xpl">
<
p:documentation>
px:oebps-to-opf-metadata
</
p:documentation>
</
p:import>
<
p:group name=
"opf">
<
p:output port=
"result"/>
<
px:fileset-load media-types=
"application/oebps-package+xml">
<
p:input port=
"fileset">
<
p:pipe step=
"main" port=
"source.fileset"/>
</
p:input>
<
p:input port=
"in-memory">
<
p:pipe step=
"main" port=
"source.in-memory"/>
</
p:input>
</
px:fileset-load>
<
px:assert test-count-min=
"1" test-count-max=
"1" error-code=
"XXXX" message=
"The input fileset must contain exactly one OPF file"/>
</
p:group>
<
px:fileset-load media-types=
"application/smil" name=
"smils">
<
p:input port=
"fileset">
<
p:pipe step=
"main" port=
"source.fileset"/>
</
p:input>
<
p:input port=
"in-memory">
<
p:pipe step=
"main" port=
"source.in-memory"/>
</
p:input>
</
px:fileset-load>
<
px:fileset-load media-types=
"application/x-dtbook+xml" name=
"dtbooks">
<
p:input port=
"fileset">
<
p:pipe step=
"main" port=
"source.fileset"/>
</
p:input>
<
p:input port=
"in-memory">
<
p:pipe step=
"main" port=
"source.in-memory"/>
</
p:input>
</
px:fileset-load>
<
p:group name=
"ncx">
<
p:output port=
"result"/>
<
px:fileset-load media-types=
"application/x-dtbncx+xml">
<
p:input port=
"fileset">
<
p:pipe step=
"main" port=
"source.fileset"/>
</
p:input>
<
p:input port=
"in-memory">
<
p:pipe step=
"main" port=
"source.in-memory"/>
</
p:input>
</
px:fileset-load>
<
px:assert test-count-min=
"1" test-count-max=
"1" error-code=
"XXXX" message=
"The input fileset must contain exactly one NCX file"/>
</
p:group>
<
px:fileset-rebase px:progress=
"1/20">
<
p:input port=
"source">
<
p:pipe step=
"main" port=
"source.fileset"/>
</
p:input>
<
p:with-option name=
"new-base" select=
"resolve-uri('.',base-uri(/*))">
<
p:pipe step=
"opf" port=
"result"/>
</
p:with-option>
</
px:fileset-rebase>
<
p:identity name=
"source.fileset"/>
<
p:group name=
"convert" px:progress=
"19/20">
<
p:output port=
"result.fileset" primary=
"true"/>
<
p:output port=
"result.in-memory" sequence=
"true">
<
p:pipe step=
"finalize" port=
"in-memory.out"/>
</
p:output>
<
p:variable name=
"temp-dir-checked" select=
"resolve-uri(replace($temp-dir,'(.+?)/?$','$1/'))"/>
<
p:variable name=
"epub-dir" select=
"concat($temp-dir-checked,'epub/')"/>
<
p:variable name=
"content-dir" select=
"concat($temp-dir-checked,'epub/EPUB/')"/>
<
p:variable xmlns:opf=
"http://openebook.org/namespaces/oeb-package/1.0/" name=
"type" select=
"for $daisy-type in /opf:package/opf:metadata/opf:x-metadata/opf:meta[@name='dtb:multimediaType']/@content return if ($daisy-type=('audioFullText','audioPartText','textPartAudio')) then 'text+mo' else if ($daisy-type='textNCX') then 'text' else ''">
<
p:pipe step=
"opf" port=
"result"/>
</
p:variable>
<
p:choose name=
"audio-clips" px:progress=
"1/19">
<
p:when test=
"$mediaoverlays and $type='text+mo'">
<
p:output port=
"result"/>
<
px:smil-to-audio-clips px:progress=
"1">
<
p:input port=
"source">
<
p:pipe step=
"smils" port=
"result"/>
</
p:input>
<
p:with-option name=
"output-base-uri" select=
"base-uri(/*)">
<
p:pipe step=
"source.fileset" port=
"result"/>
</
p:with-option>
</
px:smil-to-audio-clips>
</
p:when>
<
p:otherwise>
<
p:output port=
"result"/>
<
p:identity>
<
p:input port=
"source">
<
p:inline><
d:audio-clips/></
p:inline>
</
p:input>
</
p:identity>
</
p:otherwise>
</
p:choose>
<
p:sink/>
<
px:dtbook-to-html name=
"content-docs" chunk=
"true" px:progress=
"4/19" px:message=
"Converting DTBook to XHTML">
<
p:input port=
"source.fileset">
<
p:pipe step=
"source.fileset" port=
"result"/>
</
p:input>
<
p:input port=
"source.in-memory">
<
p:pipe port=
"result" step=
"dtbooks"/>
</
p:input>
<
p:with-option name=
"output-dir" select=
"$content-dir"/>
<
p:with-option name=
"temp-dir" select=
"concat($temp-dir-checked,'dtbook-to-html/')"/>
<
p:with-option name=
"assert-valid" select=
"$assert-valid"/>
<
p:with-option name=
"chunk-size" select=
"$chunk-size"/>
<
p:with-option name=
"filename" select=
"replace(replace(base-uri(/),'^.*/([^/]+)$','$1'),'\.[^\.]*$','')">
<
p:pipe step=
"opf" port=
"result"/>
</
p:with-option>
</
px:dtbook-to-html>
<
p:sink/>
<
pxi:ncx-to-nav name=
"nav-doc" px:progress=
"1/19" px:message=
"Converting NCX to EPUB navigation document">
<
p:input port=
"source">
<
p:pipe port=
"result" step=
"ncx"/>
</
p:input>
<
p:input port=
"smils">
<
p:pipe port=
"result" step=
"smils"/>
</
p:input>
<
p:input port=
"dtbooks">
<
p:pipe port=
"result" step=
"dtbooks"/>
</
p:input>
<
p:input port=
"dtbook-html-mapping">
<
p:pipe step=
"content-docs" port=
"mapping"/>
</
p:input>
<
p:with-option name=
"result-uri" select=
"concat($content-dir,'nav.xhtml')"/>
</
pxi:ncx-to-nav>
<
p:sink/>
<
p:choose name=
"media-overlays" px:progress=
"3/19">
<
p:when test=
"$mediaoverlays and $type='text+mo'" px:message=
"Creating EPUB media overlay documents">
<
p:output port=
"fileset.out" primary=
"true"/>
<
p:output port=
"in-memory.out" sequence=
"true">
<
p:pipe port=
"result.in-memory" step=
"media-overlays.inner"/>
</
p:output>
<
px:epub3-create-mediaoverlays flatten=
"false" name=
"media-overlays.inner" px:progress=
"1">
<
p:input port=
"source.fileset">
<
p:pipe step=
"content-docs" port=
"result.fileset"/>
</
p:input>
<
p:input port=
"source.in-memory">
<
p:pipe step=
"content-docs" port=
"result.in-memory"/>
</
p:input>
<
p:input port=
"audio-map">
<
p:pipe step=
"audio-clips" port=
"result"/>
</
p:input>
<
p:with-option name=
"audio-dir" select=
"concat($content-dir,'audio/')"/>
<
p:with-option name=
"mediaoverlay-dir" select=
"concat($content-dir,'mo/')"/>
</
px:epub3-create-mediaoverlays>
</
p:when>
<
p:otherwise>
<
p:output port=
"fileset.out" primary=
"true"/>
<
p:output port=
"in-memory.out" sequence=
"true">
<
p:empty/>
</
p:output>
<
p:identity>
<
p:input port=
"source">
<
p:inline><
d:fileset/></
p:inline>
</
p:input>
</
p:identity>
</
p:otherwise>
</
p:choose>
<
p:sink/>
<
p:documentation>Extract metadata from the DAISY 3 OPF document</
p:documentation>
<
px:oebps-to-opf-metadata name=
"metadata" px:progress=
"1/19">
<
p:input port=
"source">
<
p:pipe step=
"opf" port=
"result"/>
</
p:input>
</
px:oebps-to-opf-metadata>
<
p:sink/>
<
p:group name=
"package-doc" px:progress=
"8/19" px:message=
"Creating EPUB package document">
<
p:output port=
"fileset.out" primary=
"true"/>
<
p:output port=
"in-memory.out">
<
p:pipe port=
"result" step=
"package-doc.create"/>
</
p:output>
<
p:variable name=
"opf-uri" select=
"concat($content-dir,'package.opf')"/>
<
px:fileset-join name=
"package-doc.join-filesets">
<
p:input port=
"source">
<
p:pipe step=
"content-docs" port=
"result.fileset"/>
<
p:pipe step=
"nav-doc" port=
"fileset.out"/>
<
p:pipe step=
"media-overlays" port=
"fileset.out"/>
</
p:input>
</
px:fileset-join>
<
p:sink/>
<
px:epub3-create-package-doc name=
"package-doc.create" px:progress=
"1">
<
p:input port=
"source.fileset">
<
p:pipe step=
"package-doc.join-filesets" port=
"result"/>
</
p:input>
<
p:input port=
"source.in-memory">
<
p:pipe step=
"nav-doc" port=
"in-memory.out"/>
<
p:pipe step=
"content-docs" port=
"result.in-memory"/>
<
p:pipe step=
"media-overlays" port=
"in-memory.out"/>
</
p:input>
<
p:input port=
"spine">
<
p:pipe step=
"content-docs" port=
"result.fileset"/>
</
p:input>
<
p:input port=
"metadata">
<
p:pipe step=
"metadata" port=
"result"/>
</
p:input>
<
p:with-option name=
"output-base-uri" select=
"$opf-uri"/>
<
p:with-option name=
"compatibility-mode" select=
"'false'"/>
</
px:epub3-create-package-doc>
<
p:sink/>
<
px:fileset-join>
<
p:input port=
"source">
<
p:pipe port=
"result" step=
"package-doc.join-filesets"/>
<
p:pipe step=
"package-doc.create" port=
"result.fileset"/>
</
p:input>
</
px:fileset-join>
</
p:group>
<
p:sink/>
<
p:group name=
"finalize" px:progress=
"1/19">
<
p:output port=
"fileset.out" primary=
"true">
<
p:pipe port=
"result" step=
"finalize.ocf"/>
</
p:output>
<
p:output port=
"in-memory.out" sequence=
"true">
<
p:pipe port=
"result" step=
"finalize.in-memory"/>
</
p:output>
<
px:fileset-create name=
"fileset.with-epub-base">
<
p:with-option name=
"base" select=
"$epub-dir"/>
</
px:fileset-create>
<
px:fileset-join name=
"fileset.without-ocf">
<
p:input port=
"source">
<
p:pipe port=
"result" step=
"fileset.with-epub-base"/>
<
p:pipe port=
"fileset.out" step=
"package-doc"/>
</
p:input>
</
px:fileset-join>
<
p:sink/>
<
px:epub3-ocf-finalize name=
"finalize.ocf" px:progress=
"1">
<
p:input port=
"source">
<
p:pipe port=
"result" step=
"fileset.without-ocf"/>
</
p:input>
</
px:epub3-ocf-finalize>
<
p:identity name=
"finalize.in-memory">
<
p:input port=
"source">
<
p:pipe port=
"in-memory.out" step=
"nav-doc"/>
<
p:pipe port=
"result.in-memory" step=
"content-docs"/>
<
p:pipe port=
"in-memory.out" step=
"package-doc"/>
<
p:pipe port=
"in-memory.out" step=
"media-overlays"/>
<
p:pipe port=
"in-memory.out" step=
"finalize.ocf"/>
</
p:input>
</
p:identity>
<
p:sink/>
</
p:group>
</
p:group>
</
p:declare-step>