Author: jeremias
Date: Tue Sep 7 13:45:39 2010
New Revision: 993357
URL: http://svn.apache.org/viewvc?rev=993357&view=rev
Log:
Bugzilla #49885:
Fixed retrieval of available BPD for cases spanning columns and multiple pages
with differing page masters.
Added:
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/region-body_column-count_span_4.xml
(with props)
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/area/PageViewport.java
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/Page.java
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/PageBreaker.java
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/PageProvider.java
xmlgraphics/fop/trunk/status.xml
Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/area/PageViewport.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/area/PageViewport.java?rev=993357&r1=993356&r2=993357&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/area/PageViewport.java
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/area/PageViewport.java Tue
Sep 7 13:45:39 2010
@@ -95,8 +95,10 @@ public class PageViewport extends AreaTr
* @param pageNumber the page number
* @param pageStr String representation of the page number
* @param blank true if this is a blank page
+ * @param spanAll true if the first span area spans all columns
*/
- public PageViewport(SimplePageMaster spm, int pageNumber, String pageStr,
boolean blank) {
+ public PageViewport(SimplePageMaster spm, int pageNumber, String pageStr,
+ boolean blank, boolean spanAll) {
this.simplePageMasterName = spm.getMasterName();
setExtensionAttachments(spm.getExtensionAttachments());
setForeignAttributes(spm.getForeignAttributes());
@@ -107,7 +109,18 @@ public class PageViewport extends AreaTr
this.pageNumberString = pageStr;
this.viewArea = new Rectangle(0, 0, pageWidth, pageHeight);
this.page = new Page(spm);
- createSpan(false);
+ createSpan(spanAll);
+ }
+
+ /**
+ * Create a page viewport.
+ * @param spm SimplePageMaster indicating the page and region dimensions
+ * @param pageNumber the page number
+ * @param pageStr String representation of the page number
+ * @param blank true if this is a blank page
+ */
+ public PageViewport(SimplePageMaster spm, int pageNumber, String pageStr,
boolean blank) {
+ this(spm, pageNumber, pageStr, blank, false);
}
/**
Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/Page.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/Page.java?rev=993357&r1=993356&r2=993357&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/Page.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/Page.java Tue Sep
7 13:45:39 2010
@@ -41,10 +41,12 @@ public class Page {
* @param pageNumber the page number (as an int)
* @param pageNumberStr the page number (as a String)
* @param blank true if this is a blank page
+ * @param spanAll true if the first span area spans all columns
*/
- public Page(SimplePageMaster spm, int pageNumber, String pageNumberStr,
boolean blank) {
+ public Page(SimplePageMaster spm, int pageNumber, String pageNumberStr,
+ boolean blank, boolean spanAll) {
this.spm = spm;
- this.pageViewport = new PageViewport(spm, pageNumber, pageNumberStr,
blank);
+ this.pageViewport = new PageViewport(spm, pageNumber, pageNumberStr,
blank, spanAll);
}
/**
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/PageBreaker.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/PageBreaker.java?rev=993357&r1=993356&r2=993357&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/PageBreaker.java
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/PageBreaker.java
Tue Sep 7 13:45:39 2010
@@ -45,6 +45,7 @@ public class PageBreaker extends Abstrac
private boolean needColumnBalancing;
private PageProvider pageProvider;
private Block separatorArea;
+ private boolean spanAllActive;
/**
* The FlowLayoutManager object, which processes
@@ -148,8 +149,9 @@ public class PageBreaker extends Abstrac
}
firstPart = false;
pageBreakHandled = true;
+
pageProvider.setStartOfNextElementList(pslm.getCurrentPageNum(),
- pslm.getCurrentPV().getCurrentSpan().getCurrentFlowIndex());
+ pslm.getCurrentPV().getCurrentSpan().getCurrentFlowIndex(),
this.spanAllActive);
return super.getNextBlockList(childLC, nextSequenceStartsOn,
positionAtIPDChange,
restartLM, firstElements);
}
@@ -342,8 +344,9 @@ public class PageBreaker extends Abstrac
pageBreakHandled = true;
//Update so the available BPD is reported correctly
int currentPageNum = pslm.getCurrentPageNum();
+
pageProvider.setStartOfNextElementList(currentPageNum,
- pslm.getCurrentPV().getCurrentSpan().getCurrentFlowIndex());
+ pslm.getCurrentPV().getCurrentSpan().getCurrentFlowIndex(),
this.spanAllActive);
//Make sure we only add the areas we haven't added already
effectiveList.ignoreAtStart = newStartPos;
@@ -387,7 +390,7 @@ public class PageBreaker extends Abstrac
boolean fitsOnePage
= optimalPageCount <= pslm.getCurrentPV()
-
.getBodyRegion().getMainReference().getCurrentSpan().getColumnCount();
+
.getBodyRegion().getMainReference().getCurrentSpan().getColumnCount();
if (needColumnBalancing) {
if (!fitsOnePage) {
@@ -435,7 +438,8 @@ public class PageBreaker extends Abstrac
handleBreakTrait(breakClass);
}
pageProvider.setStartOfNextElementList(pslm.getCurrentPageNum(),
-
pslm.getCurrentPV().getCurrentSpan().getCurrentFlowIndex());
+ pslm.getCurrentPV().getCurrentSpan().getCurrentFlowIndex(),
+ this.spanAllActive);
}
pageBreakHandled = false;
// add static areas and resolve any new id areas
@@ -503,9 +507,11 @@ public class PageBreaker extends Abstrac
case Constants.EN_ALL:
//break due to span change in multi-column layout
curPage.getPageViewport().createSpan(true);
+ this.spanAllActive = true;
return;
case Constants.EN_NONE:
curPage.getPageViewport().createSpan(false);
+ this.spanAllActive = false;
return;
case Constants.EN_COLUMN:
case Constants.EN_AUTO:
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/PageProvider.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/PageProvider.java?rev=993357&r1=993356&r2=993357&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/PageProvider.java
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/PageProvider.java
Tue Sep 7 13:45:39 2010
@@ -51,6 +51,7 @@ public class PageProvider implements Con
private int startPageOfPageSequence;
private int startPageOfCurrentElementList;
private int startColumnOfCurrentElementList;
+ private boolean spanAllForCurrentElementList;
private List cachedPages = new java.util.ArrayList();
private int lastPageIndex = -1;
@@ -88,12 +89,17 @@ public class PageProvider implements Con
* on so it can later retrieve PageViewports relative to this first page.
* @param startPage the number of the first page for the element list.
* @param startColumn the starting column number for the element list.
+ * @param spanAll true if the current element list is for a
column-spanning section
*/
- public void setStartOfNextElementList(int startPage, int startColumn) {
- log.debug("start of the next element list is:"
- + " page=" + startPage + " col=" + startColumn);
+ public void setStartOfNextElementList(int startPage, int startColumn,
boolean spanAll) {
+ if (log.isDebugEnabled()) {
+ log.debug("start of the next element list is:"
+ + " page=" + startPage + " col=" + startColumn
+ + (spanAll ? ", column-spanning" : ""));
+ }
this.startPageOfCurrentElementList = startPage -
startPageOfPageSequence + 1;
this.startColumnOfCurrentElementList = startColumn;
+ this.spanAllForCurrentElementList = spanAll;
//Reset Cache
this.lastRequestedIndex = -1;
this.lastReportedBPD = -1;
@@ -290,7 +296,7 @@ public class PageProvider implements Con
if (log.isTraceEnabled()) {
log.trace("Caching " + index);
}
- cacheNextPage(index, isBlank, isLastPage);
+ cacheNextPage(index, isBlank, isLastPage,
this.spanAllForCurrentElementList);
}
Page page = (Page)cachedPages.get(intIndex);
boolean replace = false;
@@ -306,7 +312,7 @@ public class PageProvider implements Con
}
if (replace) {
discardCacheStartingWith(intIndex);
- page = cacheNextPage(index, isBlank, isLastPage);
+ page = cacheNextPage(index, isBlank, isLastPage,
this.spanAllForCurrentElementList);
}
return page;
}
@@ -320,7 +326,7 @@ public class PageProvider implements Con
}
}
- private Page cacheNextPage(int index, boolean isBlank, boolean isLastPage)
{
+ private Page cacheNextPage(int index, boolean isBlank, boolean isLastPage,
boolean spanAll) {
String pageNumberString = pageSeq.makeFormattedPageNumber(index);
boolean isFirstPage = (startPageOfPageSequence == index);
SimplePageMaster spm = pageSeq.getNextSimplePageMaster(
@@ -335,7 +341,7 @@ public class PageProvider implements Con
eventProducer.flowNotMappingToRegionBody(this,
pageSeq.getMainFlow().getFlowName(), spm.getMasterName(),
spm.getLocator());
}
- Page page = new Page(spm, index, pageNumberString, isBlank);
+ Page page = new Page(spm, index, pageNumberString, isBlank, spanAll);
//Set unique key obtained from the AreaTreeHandler
page.getPageViewport().setKey(areaTreeHandler.generatePageViewportKey());
page.getPageViewport().setForeignAttributes(spm.getForeignAttributes());
Modified: xmlgraphics/fop/trunk/status.xml
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/status.xml?rev=993357&r1=993356&r2=993357&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/status.xml (original)
+++ xmlgraphics/fop/trunk/status.xml Tue Sep 7 13:45:39 2010
@@ -58,6 +58,9 @@
documents. Example: the fix of marks layering will be such a case when
it's done.
-->
<release version="FOP Trunk" date="TBD">
+ <action context="Layout" dev="JM" type="fix" fixes-bug="49885">
+ Fixed retrieval of available BPD for cases spanning columns and
multiple pages with differing page masters.
+ </action>
<action context="Renderers" dev="VH" type="remove">
Removed old Renderer implementations for those output formats that
have a version based on
the new DocumentHandler architecture available (AFP, PCL, PDF, PS).
Added:
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/region-body_column-count_span_4.xml
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/region-body_column-count_span_4.xml?rev=993357&view=auto
==============================================================================
---
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/region-body_column-count_span_4.xml
(added)
+++
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/region-body_column-count_span_4.xml
Tue Sep 7 13:45:39 2010
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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. This particular test
makes sure that pages with different region-body
+ height are handled properly.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="odd-page" page-height="3.5cm"
page-width="4cm" margin="0.45cm">
+ <fo:region-body margin-top="12pt * 1.2 * 2" column-count="2"
background-color="yellow"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master master-name="even-page" page-height="3.5cm"
page-width="4cm" margin="0.45cm">
+ <fo:region-body column-count="2" background-color="orange"/>
+ </fo:simple-page-master>
+ <fo:page-sequence-master master-name="master">
+ <fo:repeatable-page-master-alternatives>
+ <fo:conditional-page-master-reference master-reference="odd-page"
odd-or-even="odd" blank-or-not-blank="not-blank"/>
+ <fo:conditional-page-master-reference master-reference="even-page"
odd-or-even="even" blank-or-not-blank="not-blank"/>
+ </fo:repeatable-page-master-alternatives>
+ </fo:page-sequence-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="master">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block span="all">
+ <fo:block>Line 1</fo:block>
+ <fo:block>Line 2</fo:block>
+ <fo:block>Line 3</fo:block>
+ <fo:block>Line 4</fo:block>
+ <fo:block>Line 5</fo:block>
+ <fo:block>Line 6</fo:block>
+ <fo:block>Line 7</fo:block>
+ <fo:block>Line 8</fo:block>
+ <fo:block>Line 9</fo:block>
+ <fo:block>Line 10</fo:block>
+ <fo:block>Line 11</fo:block>
+ <fo:block>Line 12</fo:block>
+ <fo:block>Line 13</fo:block>
+ <fo:block>Line 14</fo:block>
+ <fo:block>Line 15</fo:block>
+ <fo:block>Line 16</fo:block>
+ <fo:block>Line 17</fo:block>
+ <fo:block>Line 18</fo:block>
+ <fo:block>Line 19</fo:block>
+ <fo:block>Line 20</fo:block>
+ <fo:block>Line 21</fo:block>
+ <fo:block>Line 22</fo:block>
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="6" xpath="count(//pageViewport)"/>
+
+ <eval expected="3" xpath="count(//pageviewpo...@nr=1]//lineArea)"/>
+ <eval expected="5" xpath="count(//pageviewpo...@nr=2]//lineArea)"/>
+ <eval expected="3" xpath="count(//pageviewpo...@nr=3]//lineArea)"/>
+ <eval expected="5" xpath="count(//pageviewpo...@nr=4]//lineArea)"/>
+ <eval expected="3" xpath="count(//pageviewpo...@nr=5]//lineArea)"/>
+ <eval expected="3" xpath="count(//pageviewpo...@nr=6]//lineArea)"/>
+
+ </checks>
+</testcase>
Propchange:
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/region-body_column-count_span_4.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/region-body_column-count_span_4.xml
------------------------------------------------------------------------------
svn:keywords = Id
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]