]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Bugzilla #39443:
authorJeremias Maerki <jeremias@apache.org>
Sun, 7 May 2006 12:21:56 +0000 (12:21 +0000)
committerJeremias Maerki <jeremias@apache.org>
Sun, 7 May 2006 12:21:56 +0000 (12:21 +0000)
Bugfix: Sections with span="all" lead to overlapping text if spanning multiple pages.
Tables and list produced an illegal value for break class on normal breaks.

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

src/java/org/apache/fop/layoutmgr/AbstractBreaker.java
src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java
src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
src/java/org/apache/fop/layoutmgr/table/TableStepper.java
status.xml
test/layoutengine/standard-testcases/region-body_column-count_span_3.xml [new file with mode: 0644]

index 0192008b9fb7fd1f2cb6c3534c9300cb114e6365..55fb76ff20ab9709ef154ddd9dafed48ed69f741 100644 (file)
@@ -372,7 +372,8 @@ public abstract class AbstractBreaker {
 
             log.debug("PLM> part: " + (p + 1)
                     + ", start at pos " + startElementIndex
-                    + ", break at pos " + endElementIndex);
+                    + ", break at pos " + endElementIndex
+                    + ", break class = " + lastBreakClass);
 
             startPart(effectiveList, lastBreakClass);
             
index c3415aeb0b46da8bd1c2f0d3120e63dda5ed2abe..70a00bf6b76d64ce7803efdcad1c2bd5cc9cebbf 100644 (file)
@@ -38,6 +38,7 @@ import org.apache.fop.fo.flow.RetrieveMarker;
 import org.apache.fop.fo.pagination.Flow;
 import org.apache.fop.fo.pagination.PageSequence;
 import org.apache.fop.fo.pagination.Region;
+import org.apache.fop.fo.pagination.RegionBody;
 import org.apache.fop.fo.pagination.SideRegion;
 import org.apache.fop.fo.pagination.SimplePageMaster;
 import org.apache.fop.fo.pagination.StaticContent;
@@ -773,8 +774,23 @@ public class PageSequenceLayoutManager extends AbstractLayoutManager {
             curPage.getPageViewport().createSpan(false);
             return;
         } else if (breakVal == Constants.EN_COLUMN || breakVal <= 0) {
-            if (curPage.getPageViewport().getCurrentSpan().hasMoreFlows()) {
-                curPage.getPageViewport().getCurrentSpan().moveToNextFlow();
+            PageViewport pv = curPage.getPageViewport();
+            
+            //Check if previous page was spanned
+            boolean forceNewPageWithSpan = false;
+            RegionBody rb = (RegionBody)curPage.getSimplePageMaster().getRegion(
+                    Constants.FO_REGION_BODY);
+            if (breakVal < 0 
+                    && rb.getColumnCount() > 1 
+                    && pv.getCurrentSpan().getColumnCount() == 1) {
+                forceNewPageWithSpan = true;
+            }
+            
+            if (forceNewPageWithSpan) {
+                curPage = makeNewPage(false, false);
+                curPage.getPageViewport().createSpan(true);
+            } else if (pv.getCurrentSpan().hasMoreFlows()) {
+                pv.getCurrentSpan().moveToNextFlow();
             } else {
                 curPage = makeNewPage(false, false);
             }
index 7f3794bb6dbad1d24b626d7cd931ba8bcc066fa1..4c7fedea7543db2b641f5e70873fc6e7228da40a 100644 (file)
@@ -300,7 +300,7 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager
                     p = KnuthPenalty.INFINITE;
                 }
                 //returnList.add(new KnuthPenalty(penaltyHeight, p, false, stepPosition, false));
-                returnList.add(new BreakElement(stepPosition, penaltyHeight, p, 0, context));
+                returnList.add(new BreakElement(stepPosition, penaltyHeight, p, -1, context));
             }
         }
 
index 554ae40690380fd99b22b2ac4d399b2b64e209e6..03c04e188fe4269e7c1ff1097b6cb5cdcd31d534 100644 (file)
@@ -359,7 +359,7 @@ public class TableStepper {
                 clearBreakCondition();
             }
             //returnList.add(new KnuthPenalty(effPenaltyLen, p, false, penaltyPos, false));
-            returnList.add(new BreakElement(penaltyPos, effPenaltyLen, p, 0, context));
+            returnList.add(new BreakElement(penaltyPos, effPenaltyLen, p, -1, context));
 
             log.debug("step=" + step + " (+" + increase + ")"
                     + " box=" + boxLen 
index d355d228964eeff611a8e683bfe6c24e8b0cf749..f27e30a18682277e8bb684d6fa0ee165270b644f 100644 (file)
@@ -27,6 +27,9 @@
 
   <changes>
     <release version="FOP Trunk">
+      <action context="Code" dev="JM" type="fix" fixes-bug="39443">
+        Bugfix: Sections with span="all" lead to overlapping text if spanning multiple pages.
+      </action>
       <action context="Code" dev="MM" type="fix">
         Bugfix: Percentages in vertical-align property values were not correctly handled.
       </action>
diff --git a/test/layoutengine/standard-testcases/region-body_column-count_span_3.xml b/test/layoutengine/standard-testcases/region-body_column-count_span_3.xml
new file mode 100644 (file)
index 0000000..b523a29
--- /dev/null
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright 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.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!-- $Id$ -->
+<testcase>
+  <info>
+    <p>
+      This test checks multi-column documents. Check that spanned section that are broken over
+      to multiple pages still respect the span setting.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="320pt" page-height="4in" margin="20pt">
+          <fo:region-body column-count="2" column-gap="10pt"/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block span="all">
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+            <fo:block space-after="1em">This line is spanned over all columns.</fo:block>
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <eval expected="3" xpath="count(//pageViewport)"/>
+    
+    <eval expected="9" xpath="count(//pageViewport[@nr=1]//lineArea)"/>
+    <eval expected="9" xpath="count(//pageViewport[@nr=2]//lineArea)"/>
+    <eval expected="2" xpath="count(//pageViewport[@nr=3]//lineArea)"/>
+
+  </checks>
+</testcase>