[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [docbook-apps] Nested Sections From Block to Inline
On 10/10/06, Bob Stayton <bobs@sagehill.net> wrote: > Hi Keith, > Take a look in titlepage.templates.xsl. That's the stylesheet module > generated from the titlepage spec file, and it also adds fo:blocks. Ah, of course! I somehow managed to convince myself that that was _not_ the place yesterday... I've now got exactly what I was looking for with the sect4/title, that is, it's wrapped in an fo:inline. My next issue is how to get that fo:inline inside the following fo:block. Let's pretend the markup is: <section id="4th-level"> <title>HeadD</title> <para>The quick brown...</para> ... Here's what I'm currently generating: <fo:block id="section-wrapper"> <fo:inline font="bar"> <fo:inline>Head</fo:inline> </fo:inline> <fo:block font="foo">The quick brown... ... Suggestions on how to move the fo:inline inside the fo:block? My current best guess is to match sect4/*[2], but I don't know how to ensure normal processing of that thing (<para>, in this case) once I've done an <xsl:apply-templates select="title" mode="grabme"/> (since I have no idea whether it'll be a <para> or a <orderedlist> or whatever). Also, the problem compounds when I need to match section/*[2] but check if it's $level = 4. Ideas? --------------------------------- For the record, here's how I got rid of all of the fo:blocks on my way to having run-in 4th-level heads (the nested <section>s being the annoying part). Similar, but simpler changes need to be made to the sect4 templates... [note: just snippets, not well-formed]: sections.xsl: <xsl:template match="section/title |simplesect/title |sect1/title |sect2/title |sect3/title |sect4/title |sect5/title" mode="titlepage.mode" priority="2"> <!-- pull _all_ of the variable defs up here --> <xsl:choose> <xsl:when test="$level = 4"> <xsl:call-template name="section.heading"> <xsl:with-param name="level" select="$level"/> <xsl:with-param name="title" select="$title"/> <xsl:with-param name="marker" select="$marker"/> <xsl:with-param name="titleabbrev" select="$titleabbrev.elem"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <!-- all the regular stuff --> <xsl:template name="section.heading"> <xsl:param name="level" select="1"/> <xsl:param name="marker" select="1"/> <xsl:param name="title"/> <xsl:param name="titleabbrev"/> <xsl:choose> <xsl:when test="$level = 4"> <!-- interesting part here --> <fo:inline xsl:use-attribute-sets="section.title.level4.properties orm.section.level4.properties"> <fo:marker marker-class-name="section.head.marker"> <xsl:choose> <xsl:when test="$titleabbrev = ''"> <xsl:value-of select="$title"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$titleabbrev"/> </xsl:otherwise> </xsl:choose> </fo:marker> <xsl:copy-of select="$title"/> <!-- my trailing punctuation... --> <xsl:text>.</xsl:text> </fo:inline> </xsl:when> <xsl:otherwise> <!-- regular stuff here --> titlepage.templates.xsl: <xsl:template name="sect4.titlepage.recto"> <xsl:choose> <xsl:when test="sect4info/title"> <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="sect4info/title"/> </xsl:when> <xsl:when test="info/title"> <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="info/title"/> </xsl:when> <!-- not yet! <xsl:when test="title"> <xsl:apply-templates mode="sect4.titlepage.recto.auto.mode" select="title"/> </xsl:when> --> <!-- rest is normal --> <xsl:template name="section.titlepage"> <xsl:variable name="renderas"> <xsl:choose> <xsl:when test="@renderas = 'sect1'">1</xsl:when> <xsl:when test="@renderas = 'sect2'">2</xsl:when> <xsl:when test="@renderas = 'sect3'">3</xsl:when> <xsl:when test="@renderas = 'sect4'">4</xsl:when> <xsl:when test="@renderas = 'sect5'">5</xsl:when> <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="level"> <xsl:choose> <xsl:when test="$renderas != ''"> <xsl:value-of select="$renderas"/> </xsl:when> <xsl:otherwise> <xsl:call-template name="section.level"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:choose> <xsl:when test="$level = 4"> <xsl:variable name="recto.content"> <xsl:call-template name="section.titlepage.before.recto"/> <xsl:call-template name="section.titlepage.recto"/> </xsl:variable> <xsl:variable name="recto.elements.count"> <xsl:choose> <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($recto.content)/*)"/></xsl:when> <xsl:otherwise>1</xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:if test="(normalize-space($recto.content) != '') or ($recto.elements.count > 0)"> <xsl:copy-of select="$recto.content"/> </xsl:if> <xsl:variable name="verso.content"> <xsl:call-template name="section.titlepage.before.verso"/> <xsl:call-template name="section.titlepage.verso"/> </xsl:variable> <xsl:variable name="verso.elements.count"> <xsl:choose> <xsl:when test="function-available('exsl:node-set')"><xsl:value-of select="count(exsl:node-set($verso.content)/*)"/></xsl:when> <xsl:otherwise>1</xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:if test="(normalize-space($verso.content) != '') or ($verso.elements.count > 0)"> <xsl:copy-of select="$verso.content"/> </xsl:if> <xsl:call-template name="section.titlepage.separator"/> </xsl:when> <xsl:otherwise> <!-- normal stuff --> <xsl:template match="title" mode="section.titlepage.recto.auto.mode"> <xsl:variable name="renderas"> <xsl:choose> <xsl:when test="../@renderas = 'sect1'">1</xsl:when> <xsl:when test="../@renderas = 'sect2'">2</xsl:when> <xsl:when test="../@renderas = 'sect3'">3</xsl:when> <xsl:when test="../@renderas = 'sect4'">4</xsl:when> <xsl:when test="../@renderas = 'sect5'">5</xsl:when> <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="level"> <xsl:choose> <xsl:when test="$renderas != ''"> <xsl:value-of select="$renderas"/> </xsl:when> <xsl:otherwise> <xsl:call-template name="section.level"> <xsl:with-param name="node" select=".."/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:choose> <xsl:when test="$level = 4"> <!-- dunno if I should do nested inlines or not... --> <fo:inline xmlns:fo="http://www.w3.org/1999/XSL/Format" xsl:use-attribute-sets="section.titlepage.recto.style" margin-left="{$title.mar <xsl:apply-templates select="." mode="section.titlepage.recto.mode"/> </fo:inline> </xsl:when> <xsl:otherwise> <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" xsl:use-attribute-sets="section.titlepage.recto.style" margin-left="{$title.marg <xsl:apply-templates select="." mode="section.titlepage.recto.mode"/> </fo:block> </xsl:otherwise> </xsl:choose> </xsl:template> HTH, Keith
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]