[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [docbook-apps] [bug?] Wrong formating of <editor>
Hi Aleksandar, This is a bug in the stylesheets. Basically one part of the stylesheet processes each editor, and another part processes the editors together. Here are the details. The titlepage spec stylesheet generates templates that match on elements specified in the titlepage spec file, such as elements like editor. <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/editor"/> This applies the following generated titlepage template with your specs: <xsl:template match="editor" mode="book.titlepage.recto.auto.mode"> <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" xsl:use-attribute-sets="book.titlepage.recto.style" font-size="14pt" space-before="5mm"> <xsl:apply-templates select="." mode="book.titlepage.recto.mode"/> </fo:block> </xsl:template> That's why two blocks are being generated, because that template matches on each of the editor elements. If you have more editors, you will have more empty blocks. This arrangement works well when each element should be in its own block. But editors are merged together into one block. The generated template eventually does apply-templates mode="titlepage.mode", and those templates are located in fo/titlepage.xsl. The general match on "editor" does nothing. There is a special template with match="editor[1]" (the first editor element) that assembles the list of editors. Here are those templates: <xsl:template match="editor" mode="titlepage.mode"> <!-- The first editor is dealt with in the following template, which in turn displays all editors of the same mode. --> </xsl:template> <xsl:template match="editor[1]" priority="2" mode="titlepage.mode"> <xsl:call-template name="gentext.edited.by"/> <xsl:call-template name="gentext.space"/> <xsl:call-template name="person.name.list"> <xsl:with-param name="person.list" select="../editor"/> </xsl:call-template> </xsl:template> The problem is that this takes place after the titlepage spec template generates the fo:block for each editor. Applying these templates to the first editor element matches on "editor[1]" and generates the list in the first block. The second block is blank because the application of the templates to the second editor do not match on "editor[1]", but only on "editor", and that template does nothing. One workaround for your situation is to add an empty template in mode="book.titlepage.recto.auto.mode" so that the second (or subsequent) editor does not generate the empty block: <xsl:template match="editor[position() != 1]" mode="book.titlepage.recto.auto.mode"> </xsl:template> The first editor will match on the generated template, any additional editors will match on this template and do nothing. The other solution is to use a little-known feature of the titlepage spec mechanism which lets you specify a predicate to be used in the match. Your titlepage spec file could say: <editor t:predicate="[position() = 1]" font-size="14pt" space-before="5mm" /> The predicate is specifed as the content of an attribute named t:predicte (it must have the titlepage namespace on the attribute so it is not interpreted as a formatting attribute like font-size). After recompiling your titlepage template file, it should have a line like this: <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="d:info/d:editor[position() = 1]"/> Now only the first editor is processed at the first step, and others are ignored. Since the template for the first editor outputs all the rest, this is the behavior you need. Could you please file a bug report on the SourceForge site for this? Bob Stayton Sagehill Enterprises bobs@sagehill.net ----- Original Message ----- From: "Aleksandar Kanchev" <kanchev@in.tum.de> To: <docbook-apps@lists.oasis-open.org> Sent: Saturday, March 14, 2009 7:47 PM Subject: [docbook-apps] [bug?] Wrong formating of <editor> > Hello, > > I've defined two editors: > <book><info> > <editor> > > <personname><honorific>...</honorific><firstname>Editor1</firstname><surname>..</surname></personname> > <affiliation><orgname>...</orgname></affiliation> > </editor> > <editor> > > <personname><honorific>...</honorific><firstname>Editor2</firstname><surname>..</surname></personname> > <affiliation><orgname>...</orgname></affiliation> > </editor> > </info>...</book> > > I've customized the titlepage to include the editors: > <t:titlepage t:element="book" t:wrapper="fo:block" > font-family="{$title.fontset}"> > <t:titlepage-content t:side="recto"> > ... > <editor font-size="14pt" space-before="5mm" /> > ... > </t:titlepage-content> > ... > </t:titlepage> > > After generating the FO and then the PDF (with FOP) I've noticed an > annoying extra space is being output after the editors. The editors > themselves are printed correctly with their respective names > concatenated with the "and" word in a single fo:block. I've checked the > generated FO file and found out that the same fo:block for the editors > is being output twiche, while the second one is completely empty. > > Is there a simple way to fix this? I'm currently using docbook5 with > docbook-xsl-1.74. > > best regards, > Aleksandar > > --------------------------------------------------------------------- > To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org > For additional commands, e-mail: docbook-apps-help@lists.oasis-open.org > > >
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]