Before I waste a lot of time trying to figure out how I should fix that,
I thought I'd just drop in a test case. Luca, for you it's probably very
easy to say at which point I should hook in to create pages with empty
content so the non-fitting content is simply pushed to the next page. In
the end, that "pushing-loop" need an upper limit (like 50 iterations or
so) after which it throws a layout exception complaining about too
little room to place content (This check used to be in FlowLM [1]). I'm
somewhat stuck in PageBreakingAlgorithm.removeNode(). Intuitively, I'd
say I'd have to create a new KnuthNode that somehow results in an empty
page or something like that.

BTW, Luca, I haven't forgotten your post about keep-with-previous in
tables. Thank you for that one. ATM I'm swimming in another lake trying
to remain on top. :-)

[1] 
http://cvs.apache.org/viewcvs.cgi/xml-fop/src/java/org/apache/fop/layoutmgr/FlowLayoutManager.java?r1=1.9&r2=1.10&diff_format=h

On 21.06.2005 15:10:36 jeremias wrote:
> jeremias    2005/06/21 06:10:36
> 
>   Modified:    test/layoutengine disabled-testcases.txt
>   Added:       test/layoutengine/testcases normal-breaking5.xml
>   Log:
>   In page breaking, content that doesn't fit, should move to the next page 
> even if that means creating empty pages.

<snip/>

>   <testcase>
>     <info>
>       <p>
>         This test checks normal breaking. It checks whether elements that 
> don't fit on a 
>         page are sent over to the next if that one has more room (indirectly 
> checks 
>         changing available BPD, too).
>       </p>
>     </info>
>     <fo>
>       <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"; widows="0" 
> orphans="0">
>         <fo:layout-master-set>
>           <fo:simple-page-master master-name="short" page-height="30pt" 
> page-width="120pt">
>             <fo:region-body/>
>           </fo:simple-page-master>
>           <fo:simple-page-master master-name="long" page-height="100pt" 
> page-width="120pt">
>             <fo:region-body/>
>           </fo:simple-page-master>
>           <fo:page-sequence-master master-name="master">
>             <fo:single-page-master-reference master-reference="long"/>
>             <fo:single-page-master-reference master-reference="short"/>
>             <fo:single-page-master-reference master-reference="long"/>
>           </fo:page-sequence-master>
>         </fo:layout-master-set>
>         <fo:page-sequence master-reference="master">
>           <fo:flow flow-name="xsl-region-body">
>             <fo:block background-color="orange" keep-together="always">Apache 
> FOP is a great tool to create PDF documents with.</fo:block>
>             <fo:block background-color="orange" keep-together="always">Apache 
> FOP is a great tool to create PDF documents with.</fo:block>
>             <fo:block background-color="orange" keep-together="always">Apache 
> FOP is a great tool to create PDF documents with.</fo:block>
>             <fo:block background-color="orange" keep-together="always">Apache 
> FOP is a great tool to create PDF documents with.</fo:block>
>             <fo:block background-color="yellow">last line in new 
> block</fo:block>
>           </fo:flow>
>         </fo:page-sequence>
>       </fo:root>
>     </fo>
>     <checks>
>       <eval expected="4" xpath="count(//pageViewport)"/>
>       
>       <eval expected="6" xpath="sum(//[EMAIL 
> PROTECTED]/page/regionViewport/regionBody/mainReference/span/flow/block/@bpda)
>  div 14400"/>
>       <!-- the second page should be empty since the third block doesn't fit 
> into that page with only 30pt BPD -->
>       <eval expected="0" xpath="sum(//[EMAIL 
> PROTECTED]/page/regionViewport/regionBody/mainReference/span/flow/block/@bpda)
>  div 14400"/>"/>
>       <eval expected="6" xpath="sum(//[EMAIL 
> PROTECTED]/page/regionViewport/regionBody/mainReference/span/flow/block/@bpda)
>  div 14400"/>"/>
>       <eval expected="1" xpath="sum(//[EMAIL 
> PROTECTED]/page/regionViewport/regionBody/mainReference/span/flow/block/@bpda)
>  div 14400"/>"/>
>     </checks>
>   </testcase>

Jeremias Maerki

Reply via email to