From 56d2a1386836557650baa9db7f839dd2f78247d7 Mon Sep 17 00:00:00 2001 From: Jeremias Maerki Date: Wed, 7 Dec 2005 09:01:26 +0000 Subject: [PATCH] Bugzilla #37813: Fixed a bug that occurred if the first block was span="all". A page break was inserted in this situation, the first span was calculated as if it were span="none". Code added to remove empty span areas. This is a lot easier and cleaner than trying not to instantiate the first span right from the beginning. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@354752 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/fop/area/MainReference.java | 4 ++ .../apache/fop/layoutmgr/AbstractBreaker.java | 1 + .../layoutmgr/PageSequenceLayoutManager.java | 5 +- status.xml | 4 ++ .../region-body_column-count_bug37813.xml | 58 +++++++++++++++++++ 5 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 test/layoutengine/standard-testcases/region-body_column-count_bug37813.xml diff --git a/src/java/org/apache/fop/area/MainReference.java b/src/java/org/apache/fop/area/MainReference.java index 638008587..bdba40f1e 100644 --- a/src/java/org/apache/fop/area/MainReference.java +++ b/src/java/org/apache/fop/area/MainReference.java @@ -51,6 +51,10 @@ public class MainReference extends Area { * @return the created span area. */ public Span createSpan(boolean spanAll) { + if (spanAreas.size() > 0 && getCurrentSpan().getBPD() == 0) { + //Remove the current one if it is empty + spanAreas.remove(spanAreas.size() - 1); + } RegionViewport rv = parent.getRegionViewport(); int ipdWidth = (int) parent.getIPD() - rv.getBorderAndPaddingWidthStart() - rv.getBorderAndPaddingWidthEnd(); diff --git a/src/java/org/apache/fop/layoutmgr/AbstractBreaker.java b/src/java/org/apache/fop/layoutmgr/AbstractBreaker.java index fbac14f38..83f3c3afb 100644 --- a/src/java/org/apache/fop/layoutmgr/AbstractBreaker.java +++ b/src/java/org/apache/fop/layoutmgr/AbstractBreaker.java @@ -439,6 +439,7 @@ public abstract class AbstractBreaker { BlockSequence blockList; if ((returnedList = getNextKnuthElements(childLC, alignment)) != null) { if (returnedList.size() == 0) { + nextSequenceStartsOn = handleSpanChange(childLC, nextSequenceStartsOn); return nextSequenceStartsOn; } blockList = new BlockSequence(nextSequenceStartsOn); diff --git a/src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java b/src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java index fce0b4479..9bc09c2f5 100644 --- a/src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java +++ b/src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java @@ -29,6 +29,7 @@ import org.apache.fop.area.Footnote; import org.apache.fop.area.PageViewport; import org.apache.fop.area.LineArea; import org.apache.fop.area.Resolvable; +import org.apache.fop.area.Span; import org.apache.fop.fo.Constants; import org.apache.fop.fo.flow.Marker; @@ -326,7 +327,9 @@ public class PageSequenceLayoutManager extends AbstractLayoutManager { + ", new start position: " + newStartPos); //Handle page break right here to avoid any side-effects - handleBreakTrait(EN_PAGE); + if (newStartPos > 0) { + handleBreakTrait(EN_PAGE); + } pageBreakHandled = true; //Update so the available BPD is reported correctly pvProvider.setStartOfNextElementList(currentPageNum, diff --git a/status.xml b/status.xml index f4b99d6ab..1af95ffff 100644 --- a/status.xml +++ b/status.xml @@ -27,6 +27,10 @@ + + Bugfix: A span="all" on the first block cause a subsequent page break and the first block + didn't span all columns. + Bugfix: Self-created OutputStreams in PNG Renderer were not properly closed. diff --git a/test/layoutengine/standard-testcases/region-body_column-count_bug37813.xml b/test/layoutengine/standard-testcases/region-body_column-count_bug37813.xml new file mode 100644 index 000000000..82985e591 --- /dev/null +++ b/test/layoutengine/standard-testcases/region-body_column-count_bug37813.xml @@ -0,0 +1,58 @@ + + + + + +

+ This test checks multi-column documents. Checks a problem described in Bugzilla #37813. + A page break is performed after the first block which spans. +

+
+ + + + + + + + + + + This line is spanned over all columns. + + + line1 + line2 + line3 + line4 + line5 + line6 + + + This line is spanned over all columns. + + + + + + + + + + + +
-- 2.39.5