blob: 97d068bafa7c3259e51d7efbd817b1738256d5e3 [file] [log] [blame]
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
version="1.0"
exclude-result-prefixes="doc">
<xsl:import href="docbook.xsl"/>
<xsl:import href="chunk-common.xsl"/>
<xsl:template name="chunk">
<xsl:param name="node" select="."/>
<!-- returns 1 if $node is a chunk -->
<xsl:variable name="id">
<xsl:call-template name="object.id">
<xsl:with-param name="object" select="$node"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="chunks" select="document($chunk.toc,$node)"/>
<xsl:choose>
<xsl:when test="$chunks//tocentry[@linkend=$id]">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- ==================================================================== -->
<xsl:template match="*" mode="chunk-filename">
<!-- returns the filename of a chunk -->
<xsl:variable name="id">
<xsl:call-template name="object.id"/>
</xsl:variable>
<xsl:variable name="chunks" select="document($chunk.toc,.)"/>
<xsl:variable name="chunk" select="$chunks//tocentry[@linkend=$id]"/>
<xsl:variable name="filename">
<xsl:call-template name="dbhtml-filename">
<xsl:with-param name="pis" select="$chunk/processing-instruction('dbhtml')"/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="$chunk">
<xsl:value-of select="$filename"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="parent::*" mode="chunk-filename"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- ==================================================================== -->
<xsl:template name="process-chunk">
<xsl:variable name="id">
<xsl:call-template name="object.id"/>
</xsl:variable>
<xsl:variable name="chunks" select="document($chunk.toc,.)"/>
<xsl:variable name="chunk" select="$chunks//tocentry[@linkend=$id]"/>
<xsl:variable name="prev-id"
select="($chunk/preceding::tocentry
|$chunk/ancestor::tocentry)[last()]/@linkend"/>
<xsl:variable name="next-id"
select="($chunk/following::tocentry
|$chunk/child::tocentry)[1]/@linkend"/>
<xsl:variable name="prev" select="key('id',$prev-id)"/>
<xsl:variable name="next" select="key('id',$next-id)"/>
<xsl:variable name="ischunk">
<xsl:call-template name="chunk"/>
</xsl:variable>
<xsl:variable name="chunkfn">
<xsl:if test="$ischunk='1'">
<xsl:apply-templates mode="chunk-filename" select="."/>
</xsl:if>
</xsl:variable>
<xsl:variable name="filename">
<xsl:call-template name="make-relative-filename">
<xsl:with-param name="base.dir" select="$base.dir"/>
<xsl:with-param name="base.name" select="$chunkfn"/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="$ischunk = 0">
<xsl:apply-imports/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="write.chunk">
<xsl:with-param name="filename" select="$filename"/>
<xsl:with-param name="content">
<xsl:call-template name="chunk-element-content">
<xsl:with-param name="prev" select="$prev"/>
<xsl:with-param name="next" select="$next"/>
</xsl:call-template>
</xsl:with-param>
<xsl:with-param name="quiet" select="$chunk.quietly"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- ==================================================================== -->
<xsl:template match="set">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="book">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="book/appendix">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="book/glossary">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="book/bibliography">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="dedication" mode="dedication">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="preface|chapter">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="part|reference">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="refentry">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="colophon">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="article">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="article/appendix">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="article/glossary">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="article/bibliography">
<xsl:call-template name="process-chunk"/>
</xsl:template>
<xsl:template match="sect1|sect2|sect3|sect4|sect5|section">
<xsl:variable name="ischunk">
<xsl:call-template name="chunk"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="$ischunk != 0">
<xsl:call-template name="process-chunk"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-imports/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="setindex
|book/index
|article/index">
<!-- some implementations use completely empty index tags to indicate -->
<!-- where an automatically generated index should be inserted. so -->
<!-- if the index is completely empty, skip it. -->
<xsl:if test="count(*)>0 or $generate.index != '0'">
<xsl:call-template name="process-chunk"/>
</xsl:if>
</xsl:template>
<!-- ==================================================================== -->
<xsl:template match="/">
<xsl:choose>
<xsl:when test="$chunk.toc = ''">
<xsl:message terminate="yes">
<xsl:text>The chunk.toc file is not set.</xsl:text>
</xsl:message>
</xsl:when>
<xsl:when test="$rootid != ''">
<xsl:choose>
<xsl:when test="count(key('id',$rootid)) = 0">
<xsl:message terminate="yes">
<xsl:text>ID '</xsl:text>
<xsl:value-of select="$rootid"/>
<xsl:text>' not found in document.</xsl:text>
</xsl:message>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="key('id',$rootid)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="/" mode="process.root"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="*" mode="process.root">
<xsl:apply-templates select="."/>
</xsl:template>
</xsl:stylesheet>