summaryrefslogtreecommitdiff
path: root/assembly/topic-maker-chunk.xsl
diff options
context:
space:
mode:
Diffstat (limited to 'assembly/topic-maker-chunk.xsl')
-rw-r--r--assembly/topic-maker-chunk.xsl221
1 files changed, 221 insertions, 0 deletions
diff --git a/assembly/topic-maker-chunk.xsl b/assembly/topic-maker-chunk.xsl
new file mode 100644
index 0000000..a91ef50
--- /dev/null
+++ b/assembly/topic-maker-chunk.xsl
@@ -0,0 +1,221 @@
+<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: topic-maker-chunk.xsl,v 1.7 2012-04-16 00:29:35 bobs Exp $
+ ********************************************************************
+-->
+
+<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>