diff options
author | Glenn Adams <gadams@apache.org> | 2016-03-03 09:40:50 +0000 |
---|---|---|
committer | Glenn Adams <gadams@apache.org> | 2016-03-03 09:40:50 +0000 |
commit | 82804d6ffcb68841cd7adf9740469f3a79c372c8 (patch) | |
tree | 56071c99c43908ca5966b5b5f9ae86cc7218b792 /src/java/org/apache/fop/fo/pagination | |
parent | d1b8e7a211319a30f88b2c9258dda8a04ce6d4fc (diff) | |
parent | cc5867eabd94721c89e436d5339c7b8e496775af (diff) | |
download | xmlgraphics-fop-82804d6ffcb68841cd7adf9740469f3a79c372c8.tar.gz xmlgraphics-fop-82804d6ffcb68841cd7adf9740469f3a79c372c8.zip |
Merge from ^/xmlgraphics/fop/trunk.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/maven@1733431 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/fop/fo/pagination')
8 files changed, 71 insertions, 1 deletions
diff --git a/src/java/org/apache/fop/fo/pagination/Declarations.java b/src/java/org/apache/fop/fo/pagination/Declarations.java index 33c688921..be1ec13e2 100644 --- a/src/java/org/apache/fop/fo/pagination/Declarations.java +++ b/src/java/org/apache/fop/fo/pagination/Declarations.java @@ -78,7 +78,7 @@ public class Declarations extends FObj { public void endOfNode() throws FOPException { if (firstChild != null) { for (FONodeIterator iter = getChildNodes(); iter.hasNext();) { - FONode node = iter.nextNode(); + FONode node = iter.next(); if (node.getName().equals("fo:color-profile")) { ColorProfile cp = (ColorProfile)node; if (!"".equals(cp.getColorProfileName())) { diff --git a/src/java/org/apache/fop/fo/pagination/PageSequence.java b/src/java/org/apache/fop/fo/pagination/PageSequence.java index 6afd15e81..a1a966e90 100644 --- a/src/java/org/apache/fop/fo/pagination/PageSequence.java +++ b/src/java/org/apache/fop/fo/pagination/PageSequence.java @@ -454,4 +454,14 @@ public class PageSequence extends AbstractPageSequence implements WritingModeTra this.flowMap.clear(); } + public SimplePageMaster getLastSimplePageMaster(int page, boolean isFirstPage, boolean isBlank) { + boolean isOddPage = ((page % 2) != 0); // please findbugs... + log.debug("getNextSimplePageMaster(page=" + page + " isOdd=" + isOddPage + " isFirst=" + + isFirstPage + " isLast=true" + " isBlank=" + isBlank + ")"); + if (pageSequenceMaster == null) { + return simplePageMaster; + } + return pageSequenceMaster.getLastSimplePageMaster(isOddPage, isFirstPage, isBlank, getMainFlow() + .getFlowName()); + } } diff --git a/src/java/org/apache/fop/fo/pagination/PageSequenceMaster.java b/src/java/org/apache/fop/fo/pagination/PageSequenceMaster.java index 86d5ff663..f218e43b4 100644 --- a/src/java/org/apache/fop/fo/pagination/PageSequenceMaster.java +++ b/src/java/org/apache/fop/fo/pagination/PageSequenceMaster.java @@ -254,6 +254,24 @@ public class PageSequenceMaster extends FObj { return FO_PAGE_SEQUENCE_MASTER; } + public SimplePageMaster getLastSimplePageMaster(boolean isOddPage, boolean isFirstPage, boolean isBlank, + String flowName) { + if (currentSubSequence == null) { + currentSubSequence = getNextSubSequence(); + if (currentSubSequence == null) { + blockLevelEventProducer.missingSubsequencesInPageSequenceMaster(this, masterName, + getLocator()); + } + if (currentSubSequence.isInfinite() && !currentSubSequence.canProcess(flowName)) { + throw new PageProductionException( + "The current sub-sequence will not terminate whilst processing the main flow"); + } + } + + SimplePageMaster pageMaster = currentSubSequence.getLastPageMaster(isOddPage, isFirstPage, isBlank, + blockLevelEventProducer); + return pageMaster; + } } diff --git a/src/java/org/apache/fop/fo/pagination/RepeatablePageMasterAlternatives.java b/src/java/org/apache/fop/fo/pagination/RepeatablePageMasterAlternatives.java index dc69c600d..2914fb9a8 100644 --- a/src/java/org/apache/fop/fo/pagination/RepeatablePageMasterAlternatives.java +++ b/src/java/org/apache/fop/fo/pagination/RepeatablePageMasterAlternatives.java @@ -31,6 +31,7 @@ import org.apache.fop.fo.FObj; import org.apache.fop.fo.PropertyList; import org.apache.fop.fo.ValidationException; import org.apache.fop.fo.properties.Property; +import org.apache.fop.layoutmgr.BlockLevelEventProducer; /** * Class modelling the <a href="http://www.w3.org/TR/xsl/#fo_repeatable-page-master-alternatives"> @@ -136,6 +137,22 @@ public class RepeatablePageMasterAlternatives extends FObj return null; } + public SimplePageMaster getLastPageMaster(boolean isOddPage, boolean isFirstPage, boolean isBlankPage, + BlockLevelEventProducer blockLevelEventProducer) { + for (ConditionalPageMasterReference cpmr : conditionalPageMasterRefs) { + if (cpmr.isValid(isOddPage, isFirstPage, true, isBlankPage)) { + return cpmr.getMaster(); + } + } + blockLevelEventProducer.lastPageMasterReferenceMissing(this, getLocator()); + for (ConditionalPageMasterReference cpmr : conditionalPageMasterRefs) { + if (cpmr.isValid(isOddPage, isFirstPage, false, isBlankPage)) { + return cpmr.getMaster(); + } + } + throw new PageProductionException("Last page master not found: oddpage=" + isOddPage + + " firstpage=" + isFirstPage + " blankpage=" + isBlankPage); + } /** * Adds a new conditional page master reference. diff --git a/src/java/org/apache/fop/fo/pagination/RepeatablePageMasterReference.java b/src/java/org/apache/fop/fo/pagination/RepeatablePageMasterReference.java index f6d41ce8b..5e43c02b1 100644 --- a/src/java/org/apache/fop/fo/pagination/RepeatablePageMasterReference.java +++ b/src/java/org/apache/fop/fo/pagination/RepeatablePageMasterReference.java @@ -101,6 +101,11 @@ public class RepeatablePageMasterReference extends FObj return master; } + public SimplePageMaster getLastPageMaster(boolean isOddPage, boolean isFirstPage, boolean isEmptyPage, + BlockLevelEventProducer blockLevelEventProducer) { + return getNextPageMaster(isOddPage, isFirstPage, true, isEmptyPage); + } + /** * Get the value of the <code>maximum-repeats</code> property. * @return the "maximum-repeats" property diff --git a/src/java/org/apache/fop/fo/pagination/Root.java b/src/java/org/apache/fop/fo/pagination/Root.java index cb433a064..51309a65d 100644 --- a/src/java/org/apache/fop/fo/pagination/Root.java +++ b/src/java/org/apache/fop/fo/pagination/Root.java @@ -75,6 +75,16 @@ public class Root extends FObj implements CommonAccessibilityHolder { */ private FOEventHandler foEventHandler; + private PageSequence lastSeq; + + public void setLastSeq(PageSequence seq) { + lastSeq = seq; + } + + public PageSequence getLastSeq() { + return lastSeq; + } + /** * Base constructor * diff --git a/src/java/org/apache/fop/fo/pagination/SinglePageMasterReference.java b/src/java/org/apache/fop/fo/pagination/SinglePageMasterReference.java index ed0c041dd..2600909cb 100644 --- a/src/java/org/apache/fop/fo/pagination/SinglePageMasterReference.java +++ b/src/java/org/apache/fop/fo/pagination/SinglePageMasterReference.java @@ -100,6 +100,11 @@ public class SinglePageMasterReference extends FObj } } + public SimplePageMaster getLastPageMaster(boolean isOddPage, boolean isFirstPage, boolean isBlankPage, + BlockLevelEventProducer blockLevelEventProducer) { + return getNextPageMaster(isOddPage, isFirstPage, true, isBlankPage); + } + /** {@inheritDoc} */ public void reset() { this.state = FIRST; diff --git a/src/java/org/apache/fop/fo/pagination/SubSequenceSpecifier.java b/src/java/org/apache/fop/fo/pagination/SubSequenceSpecifier.java index 271d80a95..0905ee8a8 100644 --- a/src/java/org/apache/fop/fo/pagination/SubSequenceSpecifier.java +++ b/src/java/org/apache/fop/fo/pagination/SubSequenceSpecifier.java @@ -20,6 +20,7 @@ package org.apache.fop.fo.pagination; import org.apache.fop.fo.ValidationException; +import org.apache.fop.layoutmgr.BlockLevelEventProducer; /** * Classes that implement this interface can be added to a {@link PageSequenceMaster}, @@ -43,6 +44,10 @@ public interface SubSequenceSpecifier { boolean isBlankPage) throws PageProductionException; + SimplePageMaster getLastPageMaster(boolean isOddPage, boolean isFirstPage, boolean isBlankPage, + BlockLevelEventProducer blockLevelEventProducer) + throws PageProductionException; + /** * Called before a new page sequence is rendered so subsequences can reset * any state they keep during the formatting process. |