]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Bugzilla #38102:
authorJeremias Maerki <jeremias@apache.org>
Wed, 4 Jan 2006 19:30:24 +0000 (19:30 +0000)
committerJeremias Maerki <jeremias@apache.org>
Wed, 4 Jan 2006 19:30:24 +0000 (19:30 +0000)
Bugfix: Space was not adjusted if the space was on a nested block inside an auto-height block-container. This could lead to content overflowing the bottom of a page.

Note: Tables and lists currently don't offer space adjustments due to the current limits of the element list combination process. Once the stretch/shrink components are handled during element list combination, this will have to be rechecked.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@365971 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java
test/layoutengine/standard-testcases/block_space-before_space-after_bug38102.xml

index e39500bef886b1db6690daff73db00b230dc390a..455a7d8fc7a7b0f89ae499b214a155a75e264074 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2005 The Apache Software Foundation.
+ * Copyright 1999-2006 The Apache Software Foundation.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -675,6 +675,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
         LayoutManager childLM = null;
         LayoutManager lastLM = null;
         LayoutContext lc = new LayoutContext(0);
+        lc.setSpaceAdjust(layoutContext.getSpaceAdjust());
         // set space after in the LayoutContext for children
         if (layoutContext.getSpaceAfter() > 0) {
             lc.setSpaceAfter(layoutContext.getSpaceAfter());
index 12f829afdd32d76f985f051f27089c2e18a72a56..b028c79e5b77079250821f24feac95397f8cf14c 100644 (file)
@@ -30,7 +30,7 @@
           <fo:region-body/>
         </fo:simple-page-master>
       </fo:layout-master-set>
-      <fo:page-sequence master-reference="normal">
+      <fo:page-sequence master-reference="normal" id="block">
         <fo:flow flow-name="xsl-region-body">
           <fo:block>
             <fo:block>line1</fo:block>
             <fo:block space-before.optimum="16pt">line3</fo:block>
             <fo:block>line4</fo:block>
             <fo:block>line5</fo:block>
-          <fo:block>line6</fo:block>
+            <fo:block>line6</fo:block>
           </fo:block>
         </fo:flow>
       </fo:page-sequence>
+      <fo:page-sequence master-reference="normal" id="b-c-1">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block-container>
+            <fo:block>line1</fo:block>
+            <fo:block space-before="16pt">line2</fo:block>
+            <fo:block space-before.optimum="16pt">line3</fo:block>
+            <fo:block>line4</fo:block>
+            <fo:block>line5</fo:block>
+            <fo:block>line6</fo:block>
+          </fo:block-container>
+        </fo:flow>
+      </fo:page-sequence>
+      <fo:page-sequence master-reference="normal" id="b-c-2">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block-container height="1.5in">
+            <fo:block>line1</fo:block>
+            <fo:block space-before="16pt">line2</fo:block>
+            <fo:block space-before.optimum="16pt">line3</fo:block>
+            <fo:block>line4</fo:block>
+            <fo:block>line5</fo:block>
+            <fo:block>line6</fo:block>
+          </fo:block-container>
+        </fo:flow>
+      </fo:page-sequence>
+      <!-- Spaces inside tables don't get adjusted. The element list combination process is not that advanced, yet.
+      <fo:page-sequence master-reference="normal" id="table">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:table table-layout="fixed" width="100%">
+            <fo:table-column column-width="100%"/>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell>
+                  <fo:block>line1</fo:block>
+                  <fo:block space-before="16pt">line2</fo:block>
+                  <fo:block space-before.optimum="16pt">line3</fo:block>
+                  <fo:block>line4</fo:block>
+                  <fo:block>line5</fo:block>
+                  <fo:block>line6</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+        </fo:flow>
+      </fo:page-sequence-->
+      <!-- The same applies to lists, too.
+      <fo:page-sequence master-reference="normal" id="list">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:list-block>
+            <fo:list-item>
+              <fo:list-item-label>
+                <fo:block/>
+              </fo:list-item-label>
+              <fo:list-item-body>
+                <fo:block>line1</fo:block>
+                <fo:block space-before="16pt">line2</fo:block>
+                <fo:block space-before.optimum="16pt">line3</fo:block>
+                <fo:block>line4</fo:block>
+                <fo:block>line5</fo:block>
+                <fo:block>line6</fo:block>
+              </fo:list-item-body>
+            </fo:list-item>
+          </fo:list-block>
+        </fo:flow>
+      </fo:page-sequence-->
     </fo:root>
   </fo>
   <checks>
-    <element-list category="breaker">
+    <element-list category="breaker" id="block">
       <box w="14400"/>
       
       <penalty w="0" p="0"/>
       
       <skip>3</skip>
     </element-list>
-    <eval expected="1" xpath="count(//pageViewport)"/>
-    <eval expected="16000" xpath="//flow/block[1]/block[2]/@space-before"/>
+    
+    <!-- page-sequence 1 with fo:block -->
+    <eval expected="1" xpath="count(//pageSequence[1]//pageViewport)"/>
+    <eval expected="16000" xpath="//pageSequence[1]//flow/block[1]/block[2]/@space-before"/>
+    <!-- The breaker needs to shrink the optimal 1600mpt to 5600mpt to fit everything into the one page -->
+    <eval expected="5600" xpath="//pageSequence[1]//flow/block[1]/block[3]/@space-before"/>
+    <true xpath="//pageSequence[1]//flow/@bpd = //pageSequence[1]//regionBody/@bpd"/>
+
+    <!-- page-sequence 2 with fo:block-container (auto-height)-->
+    <eval expected="1" xpath="count(//pageSequence[2]//pageViewport)"/>
+    <eval expected="16000" xpath="//pageSequence[2]//flow/block[1]/block[1]/block[2]/@space-before"/>
+    <!-- The breaker needs to shrink the optimal 1600mpt to 5600mpt to fit everything into the one page -->
+    <eval expected="5600" xpath="//pageSequence[2]//flow/block[1]/block[1]/block[3]/@space-before"/>
+    <true xpath="//pageSequence[2]//flow/@bpd = //pageSequence[2]//regionBody/@bpd"/>
+
+    <!-- page-sequence 3 with fo:block-container (fixed height)-->
+    <eval expected="1" xpath="count(//pageSequence[3]//pageViewport)"/>
+    <eval expected="16000" xpath="//pageSequence[3]//flow/block[1]/block[1]/block[2]/@space-before"/>
     <!-- The breaker needs to shrink the optimal 1600mpt to 5600mpt to fit everything into the one page -->
-    <eval expected="5600" xpath="//flow/block[1]/block[3]/@space-before"/>
-    <true xpath="//flow/@bpd = //regionBody/@bpd"/>
+    <eval expected="5600" xpath="//pageSequence[3]//flow/block[1]/block[1]/block[3]/@space-before"/>
+    <true xpath="//pageSequence[3]//flow/@bpd = //pageSequence[3]//regionBody/@bpd"/>
   </checks>
 </testcase>