Am Montag, 13. Januar 2003 23:09 schrieb Bob Stayton:
On Mon, Jan 13, 2003 at 02:13:24PM -0500, Jeff Beal wrote:
Customizing the chunking to the extent you appear to want is
quite difficult, especially if you want to maintain reasonable
previous/next/up links in the output.
[...]
There was another message that suggested the use of PIs
in the document, but I don't think it was ever implemented.
http://lists.oasis-open.org/archives/docbook-apps/200209/msg00007
.h tml
It was implemented.
The file is attached to this mail. It was quite easy but it is
not very well tested because the need for manual chunking via PI
didn't arrise in the project it was made for.
It just overrides the template name="chunk"
you can use PIs like this to chunk a section. Just put it inside
the section as a child of the section element.
<?dbhtml chunk-childs="1" chunk-first-sections="0"?>
I dont know if this file works with the newest docbook-xsl
release. and it works only with chunkfast.xsl i think.
I just hope it gives you a hint how easy it is to implement
chunking with PIs. I hope this file can be of any help.
kind regards
janning
-----------------------------------------------------------------
-------
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<!--
2002, written by vygen@planwerk6.de,
1) you can decide via Processing Instruction
if you want to chunk the childs of the parent node of the
PI 2) you can override the value of chunk.first.sections via PI
Put PIs like this into your chapter or sections
<?dbhtml chunk-childs="1" chunk-first-sections="0"?>
chunk-first-sections is inherited by all subsequent childs
if not changed again by another PI
chunk-childs affects only the childs of the parnet node of
the PI (put your PI _into_ a chapter to chunk the sections inside
this chapter
you can only decide to
- chunk all childs but not the first
- chunk all child including the first
- chunk no childs
NO WARRENTY, most of the code is copyright by xsl guru norm
walsh -->
<xsl:include href="chunkfast.xsl"/>
<xsl:template name="dbhtml-chunk-childs">
<xsl:param name="pis"
select="./processing-instruction('dbhtml')"/> <xsl:call-template
name="dbhtml-attribute">
<xsl:with-param name="pis" select="$pis"/>
<xsl:with-param
name="attribute">chunk-childs</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="dbhtml-chunk-first-sections">
<xsl:param name="pis"
select="./processing-instruction('dbhtml')"/> <xsl:call-template
name="dbhtml-attribute">
<xsl:with-param name="pis" select="$pis"/>
<xsl:with-param
name="attribute">chunk-first-sections</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="chunk">
<xsl:param name="node" select="."/>
<!-- returns 1 if $node is a chunk -->
<xsl:variable name="dbhtml-chunk-childs">
<xsl:call-template name="dbhtml-chunk-childs">
<xsl:with-param name="pis"
select="$node/parent::*/processing-instruction('dbhtml')"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="dbhtml-chunk-first-sections">
<xsl:call-template name="dbhtml-chunk-first-sections">
<xsl:with-param name="pis"
select="$node/ancestor::*[contains(./processing-instruction('dbht
ml'),'chunk-first-sections=')][1]/processing-instruction('dbhtml')
"/> </xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="not($node/parent::*)">1</xsl:when>
<xsl:when test="local-name($node) = 'sect1'
and ( $dbhtml-chunk-childs = 1 or
($chunk.section.depth >= 1 and $dbhtml-chunk-childs = '') )
and ( ($dbhtml-chunk-first-sections = 1 or ($chunk.first.sections
!= 0 and $dbhtml-chunk-first-sections = '') ) or
count($node/preceding-sibling::sect1) > 0)">
<xsl:text>1</xsl:text>
</xsl:when>
<xsl:when test="local-name($node) = 'sect2'
and ( $dbhtml-chunk-childs = 1 or
($chunk.section.depth >= 2 and $dbhtml-chunk-childs = '') )
and ( ($dbhtml-chunk-first-sections = 1 or ($chunk.first.sections
!= 0 and $dbhtml-chunk-first-sections = '') ) or
count($node/preceding-sibling::sect2) > 0)">
<xsl:call-template name="chunk">
<xsl:with-param name="node" select="$node/parent::*"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="local-name($node) = 'sect3'
and ( $dbhtml-chunk-childs = 1 or
($chunk.section.depth >= 3 and $dbhtml-chunk-childs = '') )
and ( ($dbhtml-chunk-first-sections = 1 or ($chunk.first.sections
!= 0 and $dbhtml-chunk-first-sections = '') ) or
count($node/preceding-sibling::sect3) > 0)">
<xsl:call-template name="chunk">
<xsl:with-param name="node" select="$node/parent::*"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="local-name($node) = 'sect4'
and ( $dbhtml-chunk-childs = 1 or
($chunk.section.depth >= 4 and $dbhtml-chunk-childs = '') )
and ( ($dbhtml-chunk-first-sections = 1 or ($chunk.first.sections
!= 0 and $dbhtml-chunk-first-sections = '') ) or
count($node/preceding-sibling::sect4) > 0)">
<xsl:call-template name="chunk">
<xsl:with-param name="node" select="$node/parent::*"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="local-name($node) = 'sect5'
and ( $dbhtml-chunk-childs = 1 or
($chunk.section.depth >= 5 and $dbhtml-chunk-childs = '') )
and ( ($dbhtml-chunk-first-sections = 1 or ($chunk.first.sections
!= 0 and $dbhtml-chunk-first-sections = '') ) or
count($node/preceding-sibling::sect5) > 0)">
<xsl:call-template name="chunk">
<xsl:with-param name="node" select="$node/parent::*"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="local-name($node) = 'section'
and ( $dbhtml-chunk-childs = 1 or
($chunk.section.depth >= count($node/ancestor::section)+1 and
$dbhtml-chunk-childs = '') ) and ( ($dbhtml-chunk-first-sections
= 1 or ($chunk.first.sections != 0 and
$dbhtml-chunk-first-sections = '') ) or
count($node/preceding-sibling::section) > 0)">
<xsl:call-template name="chunk">
<xsl:with-param name="node" select="$node/parent::*"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="name($node)='preface'">1</xsl:when>
<xsl:when test="name($node)='chapter'">1</xsl:when>
<xsl:when test="name($node)='appendix'">1</xsl:when>
<xsl:when test="name($node)='article'">1</xsl:when>
<xsl:when test="name($node)='part'">1</xsl:when>
<xsl:when test="name($node)='reference'">1</xsl:when>
<xsl:when test="name($node)='refentry'">1</xsl:when>
<xsl:when test="name($node)='index'
and (name($node/parent::*) = 'article'
or name($node/parent::*) =
'book')">1</xsl:when> <xsl:when test="name($node)='bibliography'
and (name($node/parent::*) = 'article'
or name($node/parent::*) =
'book')">1</xsl:when> <xsl:when test="name($node)='glossary'
and (name($node/parent::*) = 'article'
or name($node/parent::*) =
'book')">1</xsl:when> <xsl:when
test="name($node)='colophon'">1</xsl:when> <xsl:when
test="name($node)='book'">1</xsl:when>
<xsl:when test="name($node)='set'">1</xsl:when>
<xsl:when test="name($node)='setindex'">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>