[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Titleabbrev in outer margin
Hello list. I am not a XSL programmer, so I kindly ask you to bear with me. I have a docbook compilant XML file (an operating instruction) that contains several different languages. Basic outline of the XML file is: <part> <article lang="en"> <title /> <titleabbrev>English</titleabbrev > [...] </article> <article lang="de"> <title /> <titleabbrev>Deutsch</titleabbrev> [...] </article> </part> What I like to accomplish is putting the language names into the outer margin of my pdf. I found an example in the mailing list archives (http://www.mail-archive.com/docbook-apps@lists.oasis-open.org/msg12243.html ) which describes a way to extend the pagesetup.xsl template with a static content region. After some tweaks, I actually managed to incorporate the example into my customization layer. However, I need to find a way to calculate an offset value for the top position of the fo-block that contains the language name. Whenever the language name changes, the offset should increase (and the fo block moves down). Right now, those fo-block containers always have the same position. My idea was to get the position of the parent element in the xml tree (the article element) and calculate the offset based on that. But I must be doing something wrong. Here is what I have come up with so far. 1) Changed the pagesetup.xsl template: <xsl:template match="*" mode="running.head.mode"> <xsl:param name="master-reference" select="'unknown'"/> <xsl:param name="gentext-key" select="local-name(.)"/> <!-- remove -draft from reference --> <xsl:variable name="pageclass"> <xsl:choose> <xsl:when test="contains($master-reference, '-draft')"> <xsl:value-of select="substring-before($master-reference,'- draft')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$master-reference"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <fo:static-content flow-name="xsl-region-before-blank"> <fo:block xsl:use-attribute-sets="header.content.properties"> <xsl:call-template name="header.table"> <xsl:with-param name="pageclass" select="$pageclass"/> <xsl:with-param name="sequence" select="'blank'"/> <xsl:with-param name="gentext-key" select="$gentext-key"/> </xsl:call-template> </fo:block> <!-- Sidebar output: --> <xsl:call-template name="article.language.bar"/> </fo:static-content> [...] </xsl:template> 2) Template for the sidebar <xsl:template name="article.language.bar"> <!-- calculate the top offset --> <xsl:call-template name="parent.position"> <xsl:with-param name="node" select="ancestor-or-self::article" /> </xsl:call-template> <fo:block-container text-align="center" reference-orientation="90" left="8in" absolute-position="fixed" height="0.25in" width="1.25in" top="0.5in" <--- This value should be calculated with the offset z-index="1" > <fo:block padding="0.05in" background-color="#ddd" font- size="1em" color="white" font-weight="bold"> <xsl:apply-templates select="." mode="titleabbrev.markup" /> </fo:block> </fo:block-container> </xsl:template> 3) Template for calculating the position of the article element <xsl:template name="parent.position"> <xsl:param name="node" /> <xsl:param name="position" select="position()" /> <xsl:message>Position is: <xsl:value-of select="$position" /></ xsl:message> </xsl:template> But, the position is always 1. Is the basic idea of calculating the offset value for the top position with help of the parent element position feasible or is there an easier way? Kind regards, /frank
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]