Author: ssteiner
Date: Tue Nov 8 14:34:28 2016
New Revision: 1768702
URL: http://svn.apache.org/viewvc?rev=1768702&view=rev
Log:
FOP-2664: Use page-position=only if there is enough space
Added:
xmlgraphics/fop/trunk/fop/test/layoutengine/standard-testcases/page-position_only_2.xml
(with props)
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/AbstractBreaker.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/AbstractPageSequenceLayoutManager.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/Page.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageBreaker.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageProvider.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/AbstractBreaker.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/AbstractBreaker.java?rev=1768702&r1=1768701&r2=1768702&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/AbstractBreaker.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/AbstractBreaker.java
Tue Nov 8 14:34:28 2016
@@ -45,6 +45,7 @@ public abstract class AbstractBreaker {
private LayoutManager originalRestartAtLM;
private Position positionAtBreak;
private List firstElementsForRestart;
+ protected PageSequenceLayoutManager pslm;
/**
* A page break position.
@@ -368,7 +369,7 @@ public abstract class AbstractBreaker {
* @param autoHeight true if warnings about overflows should be disabled
because the
* the BPD is really undefined (for footnote-separators,
for example)
*/
- public void doLayout(int flowBPD, boolean autoHeight) {
+ public boolean doLayout(int flowBPD, boolean autoHeight) {
LayoutContext childLC = createLayoutContext();
childLC.setStackLimitBP(MinOptMax.getInstance(flowBPD));
alignment = Constants.EN_START;
@@ -418,6 +419,10 @@ public abstract class AbstractBreaker {
onLastPageAndIPDChanges = (lastPageHasIPDChange() &&
!thereIsANonRestartableLM(alg)
&& (shouldRedoLayout() || (wasLayoutRedone() &&
optimalPageCount > 1)));
}
+ if ((ipdChangesOnNextPage || hasMoreContent() ||
optimalPageCount > 1)
+ && pslm != null &&
pslm.getCurrentPage().isPagePositionOnly) {
+ return false;
+ }
if (alg.handlingFloat()) {
nextSequenceStartsOn = handleFloatLayout(alg,
optimalPageCount, blockList, childLC);
} else if (ipdChangesOnNextPage || onLastPageAndIPDChanges) {
@@ -457,6 +462,7 @@ public abstract class AbstractBreaker {
// done
blockLists = null;
+ return true;
}
private LayoutManager getRestartAtLM(PageBreakingAlgorithm alg, boolean
ipdChangesOnNextPage,
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/AbstractPageSequenceLayoutManager.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/AbstractPageSequenceLayoutManager.java?rev=1768702&r1=1768701&r2=1768702&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/AbstractPageSequenceLayoutManager.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/AbstractPageSequenceLayoutManager.java
Tue Nov 8 14:34:28 2016
@@ -111,6 +111,7 @@ public abstract class AbstractPageSequen
public void initialize() {
startPageNum = pageSeq.getStartingPageNumber();
currentPageNum = startPageNum - 1;
+ curPage = null;
}
/**
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/Page.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/Page.java?rev=1768702&r1=1768701&r2=1768702&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/Page.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/Page.java
Tue Nov 8 14:34:28 2016
@@ -34,6 +34,7 @@ public class Page {
private SimplePageMaster spm;
private PageViewport pageViewport;
+ protected boolean isPagePositionOnly;
/**
* Main constructor
@@ -44,9 +45,10 @@ public class Page {
* @param spanAll true if the first span area spans all columns
*/
public Page(SimplePageMaster spm, int pageNumber, String pageNumberStr,
- boolean blank, boolean spanAll) {
+ boolean blank, boolean spanAll, boolean isPagePositionOnly) {
this.spm = spm;
this.pageViewport = new PageViewport(spm, pageNumber, pageNumberStr,
blank, spanAll);
+ this.isPagePositionOnly = isPagePositionOnly;
}
/**
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageBreaker.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageBreaker.java?rev=1768702&r1=1768701&r2=1768702&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageBreaker.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageBreaker.java
Tue Nov 8 14:34:28 2016
@@ -43,7 +43,6 @@ import org.apache.fop.traits.MinOptMax;
*/
public class PageBreaker extends AbstractBreaker {
- private PageSequenceLayoutManager pslm;
private boolean firstPart = true;
private boolean pageBreakHandled;
private boolean needColumnBalancing;
@@ -109,8 +108,8 @@ public class PageBreaker extends Abstrac
* Starts the page breaking process.
* @param flowBPD the constant available block-progression-dimension (used
for every part)
*/
- void doLayout(int flowBPD) {
- doLayout(flowBPD, false);
+ boolean doLayout(int flowBPD) {
+ return doLayout(flowBPD, false);
}
/** {@inheritDoc} */
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageProvider.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageProvider.java?rev=1768702&r1=1768701&r2=1768702&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageProvider.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageProvider.java
Tue Nov 8 14:34:28 2016
@@ -75,6 +75,8 @@ public class PageProvider implements Con
*/
private PageSequence pageSeq;
+ protected boolean skipPagePositionOnly;
+
/**
* Main constructor.
* @param ath the area tree handler
@@ -86,6 +88,10 @@ public class PageProvider implements Con
this.startPageOfPageSequence = ps.getStartingPageNumber();
}
+ public void initialize() {
+ cachedPages.clear();
+ }
+
/**
* The page breaker notifies the provider about the page number an element
list starts
* on so it can later retrieve PageViewports relative to this first page.
@@ -346,7 +352,11 @@ public class PageProvider implements Con
boolean isFirstPage = (startPageOfPageSequence == index);
SimplePageMaster spm = pageSeq.getNextSimplePageMaster(
index, isFirstPage, isLastPage, isBlank);
- Page page = new Page(spm, index, pageNumberString, isBlank, spanAll);
+ boolean isPagePositionOnly = pageSeq.hasPagePositionOnly() &&
!skipPagePositionOnly;
+ if (isPagePositionOnly) {
+ spm = pageSeq.getNextSimplePageMaster(index, isFirstPage, true,
isBlank);
+ }
+ Page page = new Page(spm, index, pageNumberString, isBlank, spanAll,
isPagePositionOnly);
//Set unique key obtained from the AreaTreeHandler
page.getPageViewport().setKey(areaTreeHandler.generatePageViewportKey());
page.getPageViewport().setForeignAttributes(spm.getForeignAttributes());
@@ -372,7 +382,7 @@ public class PageProvider implements Con
int index = this.cachedPages.size();
boolean isFirstPage = (startPageOfPageSequence == index);
SimplePageMaster spm = pageSeq.getLastSimplePageMaster(index,
isFirstPage, false);
- Page page = new Page(spm, index, "", false, false);
+ Page page = new Page(spm, index, "", false, false, false);
if (pageSeq.getRoot().getLastSeq() != null &&
pageSeq.getRoot().getLastSeq() != pageSeq) {
return -1;
}
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java?rev=1768702&r1=1768701&r2=1768702&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java
Tue Nov 8 14:34:28 2016
@@ -131,15 +131,25 @@ public class PageSequenceLayoutManager e
log.debug("Starting layout");
}
- curPage = makeNewPage(false);
+ boolean finished = false;
+ while (!finished) {
+ initialize();
+ curPage = makeNewPage(false);
- pageBreaker = new PageBreaker(this);
- int flowBPD = getCurrentPV().getBodyRegion().getRemainingBPD();
- pageBreaker.doLayout(flowBPD);
+ pageBreaker = new PageBreaker(this);
+ int flowBPD = getCurrentPV().getBodyRegion().getRemainingBPD();
+ finished = pageBreaker.doLayout(flowBPD);
+ pageProvider.skipPagePositionOnly = true;
+ }
finishPage();
}
+ public void initialize() {
+ super.initialize();
+ pageProvider.initialize();
+ }
+
/** {@inheritDoc} */
public void finishPageSequence() {
if (pageSeq.hasId()) {
Added:
xmlgraphics/fop/trunk/fop/test/layoutengine/standard-testcases/page-position_only_2.xml
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop/test/layoutengine/standard-testcases/page-position_only_2.xml?rev=1768702&view=auto
==============================================================================
---
xmlgraphics/fop/trunk/fop/test/layoutengine/standard-testcases/page-position_only_2.xml
(added)
+++
xmlgraphics/fop/trunk/fop/test/layoutengine/standard-testcases/page-position_only_2.xml
Tue Nov 8 14:34:28 2016
@@ -0,0 +1,80 @@
+<?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 for the use of an 'only'
conditional-page-master-reference (XSL 1.1)
+ </p>
+ </info>
+ <fo>
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master margin-left="20mm" margin-right="20mm"
page-height="297mm" page-width="210mm" master-name="OnlyPage"
margin-bottom="5mm" margin-top="12mm">
+ <fo:region-body region-name="Body" margin-bottom="30mm"
margin-top="105mm" background-color="red" />
+ </fo:simple-page-master>
+ <fo:simple-page-master page-height="297mm" page-width="210mm"
master-name="FrontPage" margin-bottom="5mm" margin-left="20mm"
margin-right="20mm" margin-top="12mm">
+ <fo:region-body region-name="Body" margin-bottom="70mm"
margin-top="105mm" background-color="green" />
+ </fo:simple-page-master>
+ <fo:simple-page-master page-height="297mm" page-width="210mm"
master-name="BackPage" margin-bottom="5mm" margin-left="20mm"
margin-right="20mm" margin-top="15mm">
+ <fo:region-body region-name="Body" margin-bottom="30mm"
margin-top="20mm" background-color="transparent" />
+ </fo:simple-page-master>
+ <fo:page-sequence-master master-name="LetterPages">
+ <fo:repeatable-page-master-alternatives>
+ <fo:conditional-page-master-reference master-reference="OnlyPage"
page-position="only" />
+ <fo:conditional-page-master-reference master-reference="FrontPage"
page-position="first" />
+ <fo:conditional-page-master-reference master-reference="BackPage"
page-position="rest" />
+ <fo:conditional-page-master-reference master-reference="BackPage"
page-position="last" />
+ </fo:repeatable-page-master-alternatives>
+ </fo:page-sequence-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="LetterPages" force-page-count="auto"
initial-page-number="auto">
+
+ <fo:flow flow-name="Body">
+ <fo:block>
+ <fo:block>1test</fo:block>
+ <fo:block>2test</fo:block>
+ <fo:block>3test</fo:block>
+ <fo:block>4test</fo:block>
+ <fo:block>5test</fo:block>
+ <fo:block>6test</fo:block>
+ <fo:block>7test</fo:block>
+ <fo:block>8test</fo:block>
+ <fo:block>9test</fo:block>
+ <fo:block>10test</fo:block>
+ <fo:block>11test</fo:block>
+ <fo:block>12test</fo:block>
+ <fo:block>13test</fo:block>
+ <fo:block>14test</fo:block>
+ <fo:block>15test</fo:block>
+ <fo:block>16test</fo:block>
+ <fo:block>17test</fo:block>
+ <fo:block>18test</fo:block>
+ <fo:block>19test</fo:block>
+ <fo:block>20test</fo:block>
+ <fo:block>21test</fo:block>
+ </fo:block>
+
+ </fo:flow>
+ </fo:page-sequence>
+</fo:root>
+ </fo>
+ <checks>
+ <eval expected="21test"
xpath="//pageViewport[1]//flow/block/block[21]/lineArea[1]/text/word[1]"/>
+ </checks>
+</testcase>
Propchange:
xmlgraphics/fop/trunk/fop/test/layoutengine/standard-testcases/page-position_only_2.xml
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]