blob: 6bdaaf0b1317297c99a49353f41908bd9562072d [file] [log] [blame]
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://docbook.org/ns/docbook"
version="1.0"
exclude-result-prefixes="exsl">
<!-- ********************************************************************
$Id$
********************************************************************
-->
<xsl:import href="topic-maker.xsl"/>
<xsl:import href="../xhtml/chunk-common.xsl"/>
<xsl:include href="../xhtml/chunk-code.xsl"/>
<xsl:param name="root.id.suffix">-info</xsl:param>
<xsl:param name="root.as.resourceref" select="1"/>
<xsl:template match="/" priority="1">
<xsl:apply-templates select="/" mode="process.root"/>
<xsl:call-template name="make.assembly"/>
</xsl:template>
<xsl:template name="chunk-element-content">
<xsl:param name="content">
<xsl:apply-imports/>
</xsl:param>
<xsl:copy-of select="$content"/>
</xsl:template>
<xsl:template name="make.assembly">
<xsl:variable name="content">
<assembly xmlns:xlink="http://www.w3.org/1999/xlink">
<xsl:call-template name="make.resources"/>
<xsl:call-template name="make.structure"/>
</assembly>
</xsl:variable>
<xsl:variable name="filename">
<xsl:if test="$manifest.in.base.dir != 0">
<xsl:value-of select="$base.dir"/>
</xsl:if>
<xsl:value-of select="$assembly.filename"/>
</xsl:variable>
<xsl:call-template name="write.chunk">
<xsl:with-param name="content" select="$content"/>
<xsl:with-param name="filename" select="$filename"/>
<xsl:with-param name="indent">yes</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="make.structure">
<xsl:param name="root" select="/*[1]"/>
<xsl:param name="root.resourceref">
<xsl:call-template name="object.id">
<xsl:with-param name="object" select="$root"/>
</xsl:call-template>
</xsl:param>
<xsl:choose>
<xsl:when test="$root.as.resourceref = 0">
<structure>
<xsl:attribute name="type">
<xsl:value-of select="local-name($root)"/>
</xsl:attribute>
<xsl:attribute name="xml:id">
<xsl:value-of select="$root.resourceref"/>
</xsl:attribute>
<xsl:copy-of select="($root/title | $root/info/title)[1]"/>
<!-- Put the title and info stuff in a content-only module -->
<module resourceref="{$root.resourceref}{$root.id.suffix}" contentonly="true"/>
<xsl:apply-templates select="$root/*" mode="module.list"/>
</structure>
</xsl:when>
<xsl:otherwise>
<structure>
<xsl:attribute name="resourceref">
<xsl:value-of select="$root.resourceref"/>
</xsl:attribute>
<output renderas="{local-name($root)}"/>
<xsl:apply-templates select="$root/*" mode="module.list"/>
</structure>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="*" mode="module.list">
<xsl:variable name="is.chunk">
<xsl:call-template name="chunk">
<xsl:with-param name="node" select="."/>
</xsl:call-template>
</xsl:variable>
<!-- generate an output element for renderas? -->
<xsl:variable name="src.element" select="concat(' ', local-name(.), ' ')"/>
<xsl:variable name="is.topic">
<xsl:choose>
<xsl:when test="contains($topic.list, $src.element)">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="$is.chunk = 1">
<module>
<xsl:attribute name="resourceref">
<xsl:call-template name="object.id"/>
</xsl:attribute>
<xsl:if test="$is.topic = 1">
<output renderas="{local-name()}"/>
</xsl:if>
<xsl:apply-templates select="*" mode="module.list"/>
</module>
</xsl:if>
</xsl:template>
<xsl:template name="make.resources">
<resources>
<!-- Add xml:base from $base.dir if manifest not in base.dir -->
<xsl:if test="string-length($base.dir) != 0 and
$manifest.in.base.dir = 0">
<xsl:attribute name="xml:base">
<!-- strip off trailing slash for xml:base -->
<xsl:choose>
<xsl:when test="substring($base.dir, string-length($base.dir),1) = '/'">
<xsl:value-of select="substring($base.dir, 1, string-length($base.dir) -1)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$base.dir"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="/*[1]" mode="resource.list"/>
</resources>
</xsl:template>
<xsl:template match="*" mode="resource.list">
<xsl:variable name="is.chunk">
<xsl:call-template name="chunk">
<xsl:with-param name="node" select="."/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="$is.chunk = 1">
<resource>
<xsl:attribute name="fileref">
<!--
<xsl:if test="$manifest.in.base.dir = 0">
<xsl:value-of select="$base.dir"/>
</xsl:if>
-->
<xsl:apply-templates select="." mode="chunk-filename"/>
</xsl:attribute>
<xsl:attribute name="xml:id">
<xsl:call-template name="object.id"/>
</xsl:attribute>
<xsl:variable name="title">
<xsl:apply-templates select="." mode="title.markup"/>
</xsl:variable>
<xsl:if test="string-length($title) != 0">
<description>
<xsl:value-of select="$title"/>
</description>
</xsl:if>
</resource>
</xsl:if>
<xsl:apply-templates select="*" mode="resource.list"/>
</xsl:template>
<!-- special case for root id on structure element -->
<xsl:template match="/*" mode="resource.list">
<xsl:param name="root.resourceref">
<xsl:call-template name="object.id">
<xsl:with-param name="object" select="."/>
</xsl:call-template>
</xsl:param>
<resource>
<xsl:attribute name="fileref">
<xsl:apply-templates select="." mode="chunk-filename"/>
</xsl:attribute>
<xsl:attribute name="xml:id">
<xsl:choose>
<xsl:when test="$root.as.resourceref = 0">
<xsl:value-of select="concat($root.resourceref,$root.id.suffix)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$root.resourceref"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</resource>
<xsl:apply-templates select="*" mode="resource.list"/>
</xsl:template>
<!-- This one must be here because of the template in chunk-code.xsl -->
<xsl:template match="@fileref" priority="1">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>