Re: [xsl] how to trigger a new page sequence, depending on specific input conditions

Subject: Re: [xsl] how to trigger a new page sequence, depending on specific input conditions
From: "Tony Graham" <tgraham@xxxxxxxxxx>
Date: Thu, 6 Oct 2011 18:10:39 +0100 (IST)
On Thu, October 6, 2011 4:06 pm, team wise wrote:
...
>>> <xsl:template name="insert.lastchapter">
>>>   <xsl:param name="content"/>
>>
>> What does $content do?  You don't seem to be using it.
> --->o Absolutely right. refactored or bought from binsert.chapterb
> named template , it is not used here.

Then you can omit it without ill-effect: you can use
xsl:call-template/xsl:with-param without there being a corresponding
xsl:template/xsl:param.  If you don't have a xsl:param for a parameter
(and also don't try to use it without having a xsl:param) the XSLT
processor won't complain.

...
>> It's also not clear to me whether there's anything that comes after the
>> last element that has 'outputclass="pagebreak"'.
> --->Let me clarify.  It  could be the case that after the last element
> that has 'outputclass="pagebreak"', there is another element featuring
> that attribute and value. Content featuring  attributeb outputclass
> =bpagebreakbb can be either last node or any node within a node tree

Okay.

> (
> in practice, a merged DITA XML is input ) in other words, it is
> randomly attached  as authors work with DITA XML and attach that
> attribute value at will. On the other hand, it is desirable that the
> last content must have 'outputclass="pagebreak"'.

You could add code so markup after the last 'outputclass="pagebreak"'
could be handled.  It seems to me that right now it would be silently
dropped if it existed.

...
>>>        <xsl:apply-templates select=". |
>>> preceding-sibling::*[count(preceding-sibling::*[contains(@outputclass,
>>> 'pagebreak')]) = $position - 1]" />
>>>     <fo:flow flow-name="region.body">
>>
>> I would have thought that the xsl:apply-templates would have gone here,
>> not before the fo:flow.
> ---->I think you are right,. the entire construct works just fine,
> when it comes to trigger a new page sequence to enable the last page
> effect.

Does that mean that the problem is solved?

>> Is it the case that all you really need is 'break-after="page"' or
>> 'break-after="odd-page"' [1] on the fo:block for the element that has
>> 'outputclass="pagebreak"'?
> ---> I think  is 'break-after="page"' on the fo:block for the element that
> has
>  'outputclass="pagebreak"'  is exactly what I am trying to accomplish.
>  The repeated last page in the final PDF is the side effect arising
> from the newly introduced named template that enables the desired last
> page effect.
>>> Second, as indicated below, to prevent <fo:flow
>>> flow-name"region.body"> from flowing in the last node to appear on the
>>> last page or the back page repeatedly within 'insert.chapter', I have
>>> tried
>>
>> I don't understand "prevent <fo:flow flow-name"region.body"> from
>> flowing
>> in the last node".
> ---> To the best of my knowledge, I see that <fo:flow> allows to flow
> in content that is made up of all topic DITA XML of various types.
> Instead of excluding the last topic XML "Explore and get more support"
> or the last node, it pulled in all topics.

I'm still not sure that I get it, but do you need two fo:page-sequence,
one for everything before the element with 'outputclass="pagebreak"' and
one for the element itself?

<xsl:template name="insert.lastchapter">
      <xsl:if test="$outputformat = 'UG_Booklet_Print'">
        <xsl:for-each select="*[contains(@outputclass, 'pagebreak')]">
         <xsl:variable name="position" select="position()" />
          <fo:page-sequence initial-page-number="auto" format="1"
            master-reference="chapter-master"
            color="rgb-icc(#CMYK,0%,0%,0%,80%)">>
         </xsl:otherwise>
       </xsl:choose>
       <xsl:apply-templates select="
preceding-sibling::*[count(preceding-sibling::*[contains(@outputclass,
'pagebreak')]) = $position - 1]" />
    <fo:flow flow-name="region.body">
     </fo:flow>
     </fo:page-sequence>
          <fo:page-sequence initial-page-number="auto" format="1"
            master-reference="chapter-master"
          axf:background-color="{$background_colour}"
           color="rgb-icc(#CMYK,0%,0%,0%,0%)">
       <xsl:apply-templates />
     </fo:page-sequence>
  </xsl:for-each>
   </xsl:if>
</xsl:template>


Regards,


Tony Graham                                   tgraham@xxxxxxxxxx
Consultant                                 http://www.mentea.net
Mentea       13 Kelly's Bay Beach, Skerries, Co. Dublin, Ireland
 --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --
    XML, XSL FO and XSLT consulting, training and programming

Current Thread