<
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" xmlns:pf=
"http://www.daisy.org/ns/pipeline/functions" xmlns:d=
"http://www.daisy.org/ns/pipeline/data" xmlns:c=
"http://www.w3.org/ns/xproc-step" xmlns:cx=
"http://xmlcalabash.com/ns/extensions" xmlns:xs=
"http://www.w3.org/2001/XMLSchema" xmlns:pef=
"http://www.daisy.org/ns/2008/pef" xmlns:math=
"http://www.w3.org/1998/Math/MathML" type=
"px:dtbook-to-pef" version=
"1.0" exclude-inline-prefixes=
"#all" name=
"main">
<
p:input port=
"source.fileset" primary=
"true">
<
p:documentation xmlns=
"http://www.w3.org/1999/xhtml">
<
p>DTBook fileset</
p>
</
p:documentation>
</
p:input>
<
p:input port=
"source.in-memory" sequence=
"true">
<
p:documentation xmlns=
"http://www.w3.org/1999/xhtml">
<
p>DTBook files</
p>
</
p:documentation>
</
p:input>
<
p:output port=
"result" primary=
"true" sequence=
"true">
<
p:documentation xmlns=
"http://www.w3.org/1999/xhtml">
<
p>PEF</
p>
</
p:documentation>
</
p:output>
<
p:output port=
"obfl" sequence=
"true">
<
p:documentation xmlns=
"http://www.w3.org/1999/xhtml">
<
p>OBFL</
p>
</
p:documentation>
<
p:pipe step=
"transform" port=
"obfl"/>
</
p:output>
<
p:output port=
"css" sequence=
"false">
<
p:documentation xmlns=
"http://www.w3.org/1999/xhtml">
<
p>DTBook with inline CSS</
p>
</
p:documentation>
<
p:pipe step=
"dtbook-with-css" port=
"result"/>
</
p:output>
<
p:output port=
"status" px:media-type=
"application/vnd.pipeline.status+xml">
<
p:documentation xmlns=
"http://www.w3.org/1999/xhtml">
<
p>Whether or not the conversion was successful. When include-css and/or include-obfl is
true, the conversion may fail but still output documents on the "css" and/or "obfl"
ports.</
p>
</
p:documentation>
<
p:pipe step=
"transform" port=
"status"/>
</
p:output>
<
p:option name=
"stylesheet" select=
"''"/>
<
p:option name=
"parameters" select=
"map{}"/>
<
p:option name=
"transform" select=
"'(translator:liblouis)(formatter:dotify)'"/>
<
p:option name=
"medium" select=
"'embossed'">
<
p:documentation xmlns=
"http://www.w3.org/1999/xhtml">
<
p>The target medium</
p>
</
p:documentation>
</
p:option>
<
p:option name=
"include-obfl" select=
"'false'" cx:as=
"xs:string"/>
<
p:option name=
"temp-dir" required=
"true"/>
<
p:import href=
"http://www.daisy.org/pipeline/modules/common-utils/library.xpl">
<
p:documentation>
px:assert
px:message
</
p:documentation>
</
p:import>
<
p:import href=
"http://www.daisy.org/pipeline/modules/css-utils/library.xpl">
<
p:documentation>
px:css-cascade
</
p:documentation>
</
p:import>
<
p:import href=
"http://www.daisy.org/pipeline/modules/braille/common-utils/library.xpl">
<
p:documentation>
px:transform
px:parse-query
</
p:documentation>
</
p:import>
<
p:import href=
"http://www.daisy.org/pipeline/modules/braille/pef-utils/library.xpl">
<
p:documentation>
px:pef-add-metadata
</
p:documentation>
</
p:import>
<
p:import href=
"http://www.daisy.org/pipeline/modules/fileset-utils/library.xpl">
<
p:documentation>
px:fileset-load
</
p:documentation>
</
p:import>
<
p:import href=
"http://www.daisy.org/pipeline/modules/dtbook-to-epub3/library.xpl">
<
p:documentation>
px:dtbook-to-opf-metadata
</
p:documentation>
</
p:import>
<
cx:import href=
"http://www.daisy.org/pipeline/modules/css-utils/library.xsl" type=
"application/xslt+xml">
<
p:documentation>
pf:css-parse-param-set
</
p:documentation>
</
cx:import>
<
p:variable name=
"parameter-map" select=
"pf:css-parse-param-set($parameters)">
</
p:variable>
<
px:parse-query name=
"transform-query">
<
p:with-option name=
"query" select=
"$transform"/>
</
px:parse-query>
<
p:sink/>
<
p:group name=
"dtbook" px:message=
"Loading DTBook" px:progress=
".04">
<
p:output port=
"result"/>
<
px:fileset-load media-types=
"application/x-dtbook+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 message=
"No DTBook document found." test-count-min=
"1" error-code=
"PEZE00"/>
<
px:assert message=
"More than one DTBook found in fileset." test-count-max=
"1" error-code=
"PEZE00"/>
</
p:group>
<
px:css-cascade name=
"dtbook-with-css" px:message=
"Applying style sheets" px:progress=
".08" include-user-agent-stylesheet=
"true" content-type=
"application/x-dtbook+xml">
<
p:with-option name=
"user-stylesheet" select=
"$stylesheet"/>
<
p:with-option name=
"parameters" select=
"$parameter-map"/>
<
p:with-option name=
"media" select=
"$medium"/>
<
p:input port=
"parameters">
<
p:empty/>
</
p:input>
</
px:css-cascade>
<
p:choose px:progress=
".04">
<
p:when test=
"//math:math" px:message=
"Transforming MathML">
<
p:variable name=
"document-locale" select=
"concat('(document-locale:',(/*/@xml:lang,'und')[1],')')">
<
p:pipe step=
"dtbook" port=
"result"/>
</
p:variable>
<
p:viewport px:progress=
"1" match=
"math:math">
<
px:transform px:progress=
"1">
<
p:with-option name=
"query" select=
"('(input:mathml)', //c:param[@name=('locale','math-code','math-translator')], $document-locale)">
<
p:pipe step=
"transform-query" port=
"result"/>
</
p:with-option>
<
p:input port=
"parameters">
<
p:pipe step=
"dtbook-with-css" port=
"result.parameters"/>
</
p:input>
<
p:with-param port=
"parameters" name=
"medium" select=
"$medium"/>
<
p:with-param port=
"parameters" name=
"temp-dir" select=
"$temp-dir"/>
</
px:transform>
</
p:viewport>
</
p:when>
<
p:otherwise>
<
p:identity/>
</
p:otherwise>
</
p:choose>
<
p:choose name=
"transform" px:progress=
".83">
<
p:variable name=
"document-locale" select=
"concat('(document-locale:',(/*/@xml:lang,'und')[1],')')"/>
<
p:when test=
"$include-obfl='true'">
<
p:output port=
"result" primary=
"true" sequence=
"true"/>
<
p:output port=
"obfl" sequence=
"true">
<
p:pipe step=
"try-obfl" port=
"result"/>
</
p:output>
<
p:output port=
"status">
<
p:pipe step=
"try-pef" port=
"status"/>
</
p:output>
<
p:try name=
"try-obfl" px:message=
"Transforming from DTBook XML with inline CSS to OBFL" px:progress=
".95">
<
p:group>
<
p:output port=
"result" primary=
"true"/>
<
p:output port=
"status">
<
p:inline>
<
d:status result=
"ok"/>
</
p:inline>
</
p:output>
<
px:transform px:progress=
"1">
<
p:with-option name=
"query" select=
"('(input:css)(output:obfl)', //c:param[not(@name=('math-code','math-translator'))], $document-locale)">
<
p:pipe step=
"transform-query" port=
"result"/>
</
p:with-option>
<
p:with-param port=
"parameters" name=
"medium" select=
"$medium"/>
<
p:with-param port=
"parameters" name=
"temp-dir" select=
"$temp-dir"/>
<
p:input port=
"parameters">
<
p:pipe step=
"dtbook-with-css" port=
"result.parameters"/>
</
p:input>
</
px:transform>
</
p:group>
<
p:catch name=
"catch">
<
p:output port=
"result" primary=
"true" sequence=
"true"/>
<
p:output port=
"status">
<
p:inline><
d:status result=
"error"/></
p:inline>
</
p:output>
<
p:identity>
<
p:input port=
"source">
<
p:empty/>
</
p:input>
</
p:identity>
<
px:message severity=
"ERROR">
<
p:input port=
"error">
<
p:pipe step=
"catch" port=
"error"/>
</
p:input>
</
px:message>
<
p:identity px:message-severity=
"ERROR" px:message=
"Failed to convert XML with CSS to OBFL"/>
</
p:catch>
</
p:try>
<
p:try name=
"try-pef" px:progress=
".5">
<
p:group>
<
p:output port=
"result" primary=
"true" sequence=
"true"/>
<
p:output port=
"status">
<
p:pipe step=
"try-obfl" port=
"status"/>
</
p:output>
<
p:for-each px:progress=
"1">
<
px:transform query=
"(input:obfl)(input:text-css)(output:pef)" px:message=
"Transforming from OBFL to PEF" px:progress=
"1">
<
p:with-param port=
"parameters" name=
"temp-dir" select=
"$temp-dir"/>
<
p:input port=
"parameters">
<
p:pipe step=
"dtbook-with-css" port=
"result.parameters"/>
</
p:input>
</
px:transform>
</
p:for-each>
</
p:group>
<
p:catch name=
"catch">
<
p:output port=
"result" primary=
"true" sequence=
"true"/>
<
p:output port=
"status">
<
p:inline><
d:status result=
"error"/></
p:inline>
</
p:output>
<
p:identity>
<
p:input port=
"source">
<
p:empty/>
</
p:input>
</
p:identity>
<
px:message>
<
p:input port=
"error">
<
p:pipe step=
"catch" port=
"error"/>
</
p:input>
</
px:message>
<
p:identity px:message=
"Failed to convert OBFL to PEF" px:message-severity=
"ERROR"/>
</
p:catch>
</
p:try>
</
p:when>
<
p:otherwise px:message=
"Transforming from XML with inline CSS to PEF">
<
p:output port=
"result" primary=
"true" sequence=
"true"/>
<
p:output port=
"obfl" sequence=
"true">
<
p:empty/>
</
p:output>
<
p:output port=
"status">
<
p:inline>
<
d:status result=
"ok"/>
</
p:inline>
</
p:output>
<
px:transform px:progress=
"1">
<
p:with-option name=
"query" select=
"('(input:css)(output:pef)', //c:param[not(@name=('math-code','math-translator'))], $document-locale)">
<
p:pipe step=
"transform-query" port=
"result"/>
</
p:with-option>
<
p:with-param port=
"parameters" name=
"medium" select=
"$medium"/>
<
p:with-param port=
"parameters" name=
"temp-dir" select=
"$temp-dir"/>
<
p:input port=
"parameters">
<
p:pipe step=
"dtbook-with-css" port=
"result.parameters"/>
</
p:input>
</
px:transform>
</
p:otherwise>
</
p:choose>
<
p:choose name=
"add-metadata" px:progress=
".01">
<
p:xpath-context>
<
p:pipe step=
"transform" port=
"status"/>
</
p:xpath-context>
<
p:when test=
"/*/@result='ok'">
<
px:dtbook-to-opf-metadata name=
"metadata" px:message=
"Extracting metadata from DTBook" px:progress=
"1/2">
<
p:input port=
"source">
<
p:pipe step=
"dtbook" port=
"result"/>
</
p:input>
</
px:dtbook-to-opf-metadata>
<
px:pef-add-metadata px:message=
"Adding metadata to PEF" px:progress=
"1/2">
<
p:input port=
"source">
<
p:pipe step=
"transform" port=
"result"/>
</
p:input>
<
p:input port=
"metadata">
<
p:pipe step=
"metadata" port=
"result"/>
</
p:input>
</
px:pef-add-metadata>
</
p:when>
<
p:otherwise>
<
p:identity/>
</
p:otherwise>
</
p:choose>
</
p:declare-step>