Hi

I am having a little trouble with FOP 0.95 and <fox:destination> elements in
list items.

XML fragment is something like the following, where a step is a numbered
list item, and a target is a potential bookmark or hyperlink target:

 ----
 <steps>
  <step>
   <target id="one">One</target>
   <target id="first">First</target>
   <para>First step.</para>
  </step>
 </steps>
 ----

XSL-FO for "steps" generates a standard list block, and for "list" a
standard list-item. Targets generate an <fo:inline id="ID"> element which
contains a zero width space (because an empty inline element causes FOP to
crash with a NPE), and each group of targets is enclosed in an <fo:block>
(because fo:inline cannot be a direct child of fo:flow, and some targets
are.

So here's the target bit of my XSL-FO:

 ----
 <xsl:template match="target">
  <xsl:choose>
   <xsl:when test="preceding-sibling::*[1][self::target]" />
   <xsl:otherwise>
    <xsl:apply-templates select="." mode="first-anchor" />
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>

 <xsl:template match="target" mode="first-anchor">
  <fo:block xsl:use-attribute-sets="def.space-none" line-height="1px"
font-size="1">
   <xsl:apply-templates select="." mode="anchor" />
  </fo:block>
 </xsl:template>

 <xsl:template match="target" mode="anchor">
  <xsl:variable name="tid" as="xs:string" select="@id" />
  <fo:inline id="{$tid}">&#8203;</fo:inline>
  <fox:destination internal-destination="{$tid}" />
  <xsl:apply-templates select="following-sibling::*[1][self::target]"
mode="anchor" />
 </xsl:template>
 ----

The def.space-none attribute set ensures that space-before and space-after
is zero. I have a named template for normal blocks which detects when it is
the first block after a group of targets and sets space-before to zero. So
the only thing disturbing the alignment of the list-item-label and the first
list-item-block content is the 1px line-height block containing the id'ed
inline(s) and the fox:bookmark(s).

Is there a way of eliminating the vertical space contributed by that block
so that the list item aligns properly with its label?

Or am I tackling this all wrong?

Cheers
Trevor



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to