<
p:declare-step xmlns:p=
"http://www.w3.org/ns/xproc" xmlns:px=
"http://www.daisy.org/ns/pipeline/xproc" xmlns:mo=
"http://www.w3.org/ns/SMIL" version=
"1.0" type=
"px:mediaoverlay-rearrange" name=
"rearrange">
    
    <
p:input port=
"mediaoverlay" primary=
"true" sequence=
"true"/>
    <
p:input port=
"content" sequence=
"true"/>
    <
p:output port=
"result" sequence=
"true" primary=
"true"/>
    <
p:group name=
"rearrange.mediaoverlay-map">
        <
p:output port=
"result"/>
        
        <
p:for-each>
            <
p:add-xml-base all=
"true" relative=
"false"/>
        </
p:for-each>
        <
p:wrap-sequence wrapper=
"smil-map" wrapper-namespace=
"http://www.daisy.org/ns/pipeline/tmp"/>
        <
p:xslt name=
"rearrange.mediaoverlay-annotated">
            <
p:input port=
"parameters">
                <
p:empty/>
            </
p:input>
            <
p:input port=
"stylesheet">
                <
p:inline>
                    <
xsl:stylesheet xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform" xmlns:di=
"http://www.daisy.org/ns/pipeline/tmp" version=
"2.0">
                        <
xsl:template match=
"@*|node()">
                            <
xsl:copy>
                                <
xsl:apply-templates select=
"@*|node()"/>
                            </
xsl:copy>
                        </
xsl:template>
                        <
xsl:template match=
"/di:smil-map">
                            
                            <
xsl:copy>
                                <
xsl:apply-templates select=
"@*|node()"/>
                            </
xsl:copy>
                        </
xsl:template>
                        <
xsl:template match=
"mo:text">
                            <
xsl:copy>
                                <
xsl:copy-of select=
"@*"/>
                                <
xsl:attribute name=
"fragment" select=
"if (contains(@src,'#')) then substring-after(@src,'#') else ''"/>
                                <
xsl:attribute name=
"src" select=
"resolve-uri(substring-before(@src,'#'),base-uri())"/>
                                <
xsl:apply-templates select=
"node()"/>
                            </
xsl:copy>
                        </
xsl:template>
                    </
xsl:stylesheet>
                </
p:inline>
            </
p:input>
        </
p:xslt>
        <
p:xslt>
            <
p:input port=
"parameters">
                <
p:empty/>
            </
p:input>
            <
p:input port=
"stylesheet">
                <
p:document href=
"rearrange.prepare.xsl"/>
            </
p:input>
        </
p:xslt>
        <
p:identity px:message=
"created annotated mediaoverlay" px:message-severity=
"DEBUG"/>
    </
p:group>
    <
p:sink/>
    <
p:for-each name=
"rearrange.for-each">
        <
p:output port=
"mediaoverlay" sequence=
"true" primary=
"true"/>
        <
p:iteration-source>
            <
p:pipe port=
"content" step=
"rearrange"/>
        </
p:iteration-source>
        <
p:variable name=
"content-base" select=
"base-uri(/*)"/>
        <
p:add-attribute match=
"//*" attribute-name=
"xml:base" name=
"rearrange.for-each.content">
            <
p:with-option name=
"attribute-value" select=
"base-uri(/*)"/>
        </
p:add-attribute>
        <
p:wrap-sequence wrapper=
"content-and-mediaoverlay" wrapper-namespace=
"http://www.daisy.org/ns/pipeline/tmp">
            <
p:input port=
"source">
                <
p:pipe port=
"result" step=
"rearrange.for-each.content"/>
                <
p:pipe port=
"result" step=
"rearrange.mediaoverlay-map"/>
            </
p:input>
        </
p:wrap-sequence>
        <
p:xslt>
            <
p:input port=
"parameters">
                <
p:empty/>
            </
p:input>
            <
p:input port=
"stylesheet">
                <
p:document href=
"rearrange.xsl"/>
            </
p:input>
        </
p:xslt>
        <
p:delete match=
"//mo:seq[not(descendant::mo:par)]"/>
        <
p:documentation>generate ids</
p:documentation>
        <
p:xslt>
            <
p:with-param name=
"iteration-position" select=
"p:iteration-position()"/>
            <
p:input port=
"stylesheet">
                <
p:document href=
"generate-ids.xsl"/>
            </
p:input>
        </
p:xslt>
        <
p:documentation>resolve relative uris</
p:documentation>
        <
p:xslt>
            <
p:input port=
"parameters">
                <
p:empty/>
            </
p:input>
            <
p:input port=
"stylesheet">
                <
p:document href=
"resolve-relative-uris.xsl"/>
            </
p:input>
        </
p:xslt>
        <
p:documentation>if there is only one top-level seq; turn it into a body element</
p:documentation>
        <
p:xslt>
            <
p:input port=
"parameters">
                <
p:empty/>
            </
p:input>
            <
p:input port=
"stylesheet">
                <
p:document href=
"conditionally-join-toplevel-seq-with-body.xsl"/>
            </
p:input>
        </
p:xslt>
        <
p:identity px:message=
"created media overlay for {$content-base}" px:message-severity=
"DEBUG"/>
    </
p:for-each>
</
p:declare-step>