public boolean isSkipPagePositionOnlyAllowed() {
return factory.isSkipPagePositionOnlyAllowed();
}
+
+ public boolean isLegacySkipPagePositionOnly() {
+ return factory.isLegacySkipPagePositionOnly();
+ }
}
private static final String TABLE_BORDER_OVERPAINT = "table-border-overpaint";
private static final String SIMPLE_LINE_BREAKING = "simple-line-breaking";
private static final String SKIP_PAGE_POSITION_ONLY_ALLOWED = "skip-page-position-only-allowed";
+ private static final String LEGACY_SKIP_PAGE_POSITION_ONLY = "legacy-skip-page-position-only";
private final Log log = LogFactory.getLog(FopConfParser.class);
LogUtil.handleException(log, e, false);
}
}
+ if (cfg.getChild(LEGACY_SKIP_PAGE_POSITION_ONLY, false) != null) {
+ try {
+ fopFactoryBuilder.setLegacySkipPagePositionOnly(
+ cfg.getChild(LEGACY_SKIP_PAGE_POSITION_ONLY).getValueAsBoolean());
+ } catch (ConfigurationException e) {
+ LogUtil.handleException(log, e, false);
+ }
+ }
// configure font manager
new FontManagerConfigurator(cfg, baseURI, fopFactoryBuilder.getBaseURI(), resourceResolver)
return config.isSkipPagePositionOnlyAllowed();
}
+ boolean isLegacySkipPagePositionOnly() {
+ return config.isLegacySkipPagePositionOnly();
+ }
+
/**
* Returns a new {@link Fop} instance. FOP will be configured with a default user agent
* instance. Use this factory method if your output type requires an output stream.
return this;
}
+ public FopFactoryBuilder setLegacySkipPagePositionOnly(boolean b) {
+ fopFactoryConfigBuilder.setLegacySkipPagePositionOnly(b);
+ return this;
+ }
+
public static class FopFactoryConfigImpl implements FopFactoryConfig {
private final EnvironmentProfile enviro;
private boolean skipPagePositionOnlyAllowed = true;
+ private boolean legacySkipPagePositionOnly;
+
private static final class ImageContextImpl implements ImageContext {
private final FopFactoryConfig config;
return skipPagePositionOnlyAllowed;
}
+ public boolean isLegacySkipPagePositionOnly() {
+ return legacySkipPagePositionOnly;
+ }
+
public Map<String, String> getHyphenationPatternNames() {
return hyphPatNames;
}
void setSimpleLineBreaking(boolean b);
void setSkipPagePositionOnlyAllowed(boolean b);
+
+ void setLegacySkipPagePositionOnly(boolean b);
}
private static final class CompletedFopFactoryConfigBuilder implements FopFactoryConfigBuilder {
public void setSkipPagePositionOnlyAllowed(boolean b) {
throwIllegalStateException();
}
+
+ public void setLegacySkipPagePositionOnly(boolean b) {
+ throwIllegalStateException();
+ }
}
private static final class ActiveFopFactoryConfigBuilder implements FopFactoryConfigBuilder {
public void setSkipPagePositionOnlyAllowed(boolean b) {
config.skipPagePositionOnlyAllowed = b;
}
+
+ public void setLegacySkipPagePositionOnly(boolean b) {
+ config.legacySkipPagePositionOnly = b;
+ }
}
}
boolean isSkipPagePositionOnlyAllowed();
+ boolean isLegacySkipPagePositionOnly();
+
/** @return the hyphenation pattern names */
Map<String, String> getHyphenationPatternNames();
while (hasMoreContent()) {
blockLists.clear();
- //*** Phase 1: Get Knuth elements ***
- nextSequenceStartsOn = getNextBlockList(childLC, nextSequenceStartsOn);
- empty = empty && blockLists.size() == 0;
-
- //*** Phases 2 and 3 ***
- log.debug("PLM> blockLists.size() = " + blockLists.size());
- for (blockListIndex = 0; blockListIndex < blockLists.size(); blockListIndex++) {
- blockList = blockLists.get(blockListIndex);
-
- //debug code start
- if (log.isDebugEnabled()) {
- log.debug(" blockListIndex = " + blockListIndex);
- log.debug(" sequence starts on " + getBreakClassName(blockList.startOn));
- }
- observeElementList(blockList);
- //debug code end
-
- //*** Phase 2: Alignment and breaking ***
- log.debug("PLM> start of algorithm (" + this.getClass().getName()
- + "), flow BPD =" + flowBPD);
- PageBreakingAlgorithm alg = new PageBreakingAlgorithm(getTopLevelLM(),
- getPageProvider(), createLayoutListener(),
- alignment, alignmentLast, footnoteSeparatorLength,
- isPartOverflowRecoveryActivated(), autoHeight, isSinglePartFavored());
-
- alg.setConstantLineWidth(flowBPD);
- int optimalPageCount = alg.findBreakingPoints(blockList, 1, true,
- BreakingAlgorithm.ALL_BREAKS);
- boolean ipdChangesOnNextPage = (alg.getIPDdifference() != 0);
- boolean onLastPageAndIPDChanges = false;
- if (!ipdChangesOnNextPage) {
- onLastPageAndIPDChanges = (lastPageHasIPDChange(optimalPageCount) && !thereIsANonRestartableLM(alg)
- && (shouldRedoLayout() || (wasLayoutRedone() && optimalPageCount > 1)));
- }
- if (shouldRedoLayoutWithoutPagePositionOnly(ipdChangesOnNextPage, optimalPageCount)) {
- return false;
- }
- if (alg.handlingFloat()) {
- nextSequenceStartsOn = handleFloatLayout(alg, optimalPageCount, blockList, childLC);
- } else if (ipdChangesOnNextPage || onLastPageAndIPDChanges) {
- boolean visitedBefore = false;
- if (onLastPageAndIPDChanges) {
- visitedBefore = wasLayoutRedone();
- prepareToRedoLayout(alg, optimalPageCount, blockList, blockList);
+ try {
+ //*** Phase 1: Get Knuth elements ***
+ nextSequenceStartsOn = getNextBlockList(childLC, nextSequenceStartsOn);
+ empty = empty && blockLists.size() == 0;
+
+ //*** Phases 2 and 3 ***
+ log.debug("PLM> blockLists.size() = " + blockLists.size());
+ for (blockListIndex = 0; blockListIndex < blockLists.size(); blockListIndex++) {
+ blockList = blockLists.get(blockListIndex);
+
+ //debug code start
+ if (log.isDebugEnabled()) {
+ log.debug(" blockListIndex = " + blockListIndex);
+ log.debug(" sequence starts on " + getBreakClassName(blockList.startOn));
}
-
- firstElementsForRestart = null;
- RestartAtLM restartAtLMClass = new RestartAtLM();
- LayoutManager restartAtLM = restartAtLMClass.getRestartAtLM(this, alg, ipdChangesOnNextPage,
- onLastPageAndIPDChanges, visitedBefore, blockList, 1);
- if (restartAtLMClass.invalidPosition) {
+ observeElementList(blockList);
+ //debug code end
+
+ //*** Phase 2: Alignment and breaking ***
+ log.debug("PLM> start of algorithm (" + this.getClass().getName()
+ + "), flow BPD =" + flowBPD);
+ PageBreakingAlgorithm alg = new PageBreakingAlgorithm(getTopLevelLM(),
+ getPageProvider(), createLayoutListener(),
+ alignment, alignmentLast, footnoteSeparatorLength,
+ isPartOverflowRecoveryActivated(), autoHeight, isSinglePartFavored());
+
+ alg.setConstantLineWidth(flowBPD);
+ int optimalPageCount = alg.findBreakingPoints(blockList, 1, true,
+ BreakingAlgorithm.ALL_BREAKS);
+ boolean ipdChangesOnNextPage = (alg.getIPDdifference() != 0);
+ boolean onLastPageAndIPDChanges = false;
+ if (!ipdChangesOnNextPage) {
+ onLastPageAndIPDChanges = (lastPageHasIPDChange(optimalPageCount)
+ && !thereIsANonRestartableLM(alg)
+ && (shouldRedoLayout() || (wasLayoutRedone() && optimalPageCount > 1)));
+ }
+ if (shouldRedoLayoutWithoutPagePositionOnly(ipdChangesOnNextPage, optimalPageCount, alg)) {
return false;
}
- if (restartAtLM == null || restartAtLM.getChildLMs().isEmpty()) {
+ if (alg.handlingFloat()) {
+ nextSequenceStartsOn = handleFloatLayout(alg, optimalPageCount, blockList, childLC);
+ } else if (ipdChangesOnNextPage || onLastPageAndIPDChanges) {
+ boolean visitedBefore = false;
+ if (onLastPageAndIPDChanges) {
+ visitedBefore = wasLayoutRedone();
+ prepareToRedoLayout(alg, optimalPageCount, blockList, blockList);
+ }
+
firstElementsForRestart = null;
- LayoutManager restartAtLM2 = new RestartAtLM().getRestartAtLM(this, alg, ipdChangesOnNextPage,
- onLastPageAndIPDChanges, visitedBefore, blockList, 0);
- if (restartAtLM2 != null) {
- restartAtLM = restartAtLM2;
+ RestartAtLM restartAtLMClass = new RestartAtLM();
+ LayoutManager restartAtLM = restartAtLMClass.getRestartAtLM(this, alg, ipdChangesOnNextPage,
+ onLastPageAndIPDChanges, visitedBefore, blockList, 1);
+ if (restartAtLMClass.invalidPosition) {
+ return false;
}
- }
- if (ipdChangesOnNextPage) {
- addAreas(alg, optimalPageCount, blockList, blockList);
- }
- blockLists.clear();
- blockListIndex = -1;
- nextSequenceStartsOn = getNextBlockList(childLC, Constants.EN_COLUMN, positionAtBreak,
- restartAtLM, firstElementsForRestart);
- } else {
- log.debug("PLM> optimalPageCount= " + optimalPageCount
- + " pageBreaks.size()= " + alg.getPageBreaks().size());
+ if (restartAtLM == null || restartAtLM.getChildLMs().isEmpty()) {
+ firstElementsForRestart = null;
+ LayoutManager restartAtLM2 = new RestartAtLM().getRestartAtLM(this, alg,
+ ipdChangesOnNextPage, onLastPageAndIPDChanges, visitedBefore, blockList, 0);
+ if (restartAtLM2 != null) {
+ restartAtLM = restartAtLM2;
+ }
+ }
+ if (ipdChangesOnNextPage) {
+ addAreas(alg, optimalPageCount, blockList, blockList);
+ }
+ blockLists.clear();
+ blockListIndex = -1;
+ nextSequenceStartsOn = getNextBlockList(childLC, Constants.EN_COLUMN, positionAtBreak,
+ restartAtLM, firstElementsForRestart);
+ } else {
+ log.debug("PLM> optimalPageCount= " + optimalPageCount
+ + " pageBreaks.size()= " + alg.getPageBreaks().size());
- //*** Phase 3: Add areas ***
- doPhase3(alg, optimalPageCount, blockList, blockList);
+ //*** Phase 3: Add areas ***
+ doPhase3(alg, optimalPageCount, blockList, blockList);
+ }
}
+ } catch (PagePositionOnlyException e) {
+ return false;
}
}
return true;
}
- private boolean shouldRedoLayoutWithoutPagePositionOnly(boolean ipdChangesOnNextPage, int optimalPageCount) {
+ static class PagePositionOnlyException extends RuntimeException {
+ }
+
+ private boolean shouldRedoLayoutWithoutPagePositionOnly(boolean ipdChangesOnNextPage, int optimalPageCount,
+ PageBreakingAlgorithm alg) {
if ((ipdChangesOnNextPage || hasMoreContent() || optimalPageCount > 1)
&& pslm != null && pslm.getCurrentPage().isPagePositionOnly) {
+ if (getPageProvider().foUserAgent.isLegacySkipPagePositionOnly()) {
+ return true;
+ }
RegionBody rb = (RegionBody)pslm.getCurrentPage().getSimplePageMaster().getRegion(Constants.FO_REGION_BODY);
- return rb.getColumnCount() == 1;
+ if (rb.getColumnCount() == 1) {
+ return true;
+ }
+ int restartPoint = getPageProvider().getStartingPartIndexForLastPage(optimalPageCount);
+ if (restartPoint > 0) {
+ PageBreakPosition pbp = (PageBreakPosition) alg.getPageBreaks().get(restartPoint - 1);
+ int newStartPos = alg.par.getFirstBoxIndex(pbp.getLeafPos() + 1);
+ return newStartPos > 0;
+ }
}
return false;
}
private int lastGeneratedPosition = -1;
private int smallestPosNumberChecked = Integer.MAX_VALUE;
- private boolean preserveChildrenAtEndOfLayout;
+ private boolean preserveChildrenAtEndOfLayout = true;
/**
* Abstract layout manager.
log.trace("Moving to next flow");
pv.getCurrentSpan().moveToNextFlow();
} else {
+ if (pslm.getCurrentPage().isPagePositionOnly
+ && !pslm.fobj.getUserAgent().isLegacySkipPagePositionOnly()) {
+ throw new PagePositionOnlyException();
+ }
log.trace("Making new page");
pslm.makeNewPage(false, emptyContent);
}
return delegate.isSkipPagePositionOnlyAllowed();
}
+ public boolean isLegacySkipPagePositionOnly() {
+ return delegate.isLegacySkipPagePositionOnly();
+ }
+
public Map<String, String> getHyphenationPatternNames() {
return delegate.getHyphenationPatternNames();
}
builder.setTableBorderOverpaint(isTableBorderOverpaint(testDoc));
builder.setSimpleLineBreaking(isSimpleLineBreaking(testDoc));
builder.setSkipPagePositionOnlyAllowed(isSkipPagePositionOnlyAllowed(testDoc));
+ builder.setLegacySkipPagePositionOnly(isLegacySkipPagePositionOnly(testDoc));
return builder.build();
}
}
}
+ private boolean isLegacySkipPagePositionOnly(Document testDoc) {
+ try {
+ String s = eval(testDoc, "/testcase/cfg/legacy-skip-page-position-only");
+ return "true".equalsIgnoreCase(s);
+ } catch (XPathExpressionException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
/**
* Loads a test case into a DOM document.
* @param testFile the test file
</fo:root>
</fo>
<checks>
+ <eval expected="236" xpath="count(//word)"/>
<eval expected="1" xpath="count(//page)"/>
<eval expected="PageOnly" xpath="//pageViewport/@simple-page-master-name"/>
</checks>
--- /dev/null
+<?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>
+ <cfg>
+ <legacy-skip-page-position-only>true</legacy-skip-page-position-only>
+ </cfg>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:fox="http://xmlgraphics.apache.org/fop/extensions">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="PageOnly" page-width="8.5in" page-height="11in" margin-bottom="0.5cm" margin-right="1cm" margin-top="1cm" margin-left="1cm">
+ <fo:region-body margin-bottom="2cm" margin-right="0cm" margin-top="0cm" margin-left="0cm" background-color="red" column-count="2"/>
+ <fo:region-after extent="1cm" region-name="Footer1"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master margin-bottom="0.5cm" master-name="PageFirst" page-width="8.5in" page-height="11in" margin-right="1cm" margin-top="1cm" margin-left="1cm">
+ <fo:region-body margin-bottom="2cm" margin-right="0cm" margin-top="0cm" margin-left="0cm" background-color="yellow" column-count="2"/>
+ <fo:region-after extent="1cm" region-name="Footer2"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master master-name="PageLast" page-width="8.5in" page-height="11in" margin-bottom="0.3cm" margin-right="1cm" margin-top="1cm" margin-left="1cm">
+ <fo:region-body margin-bottom="2cm" column-count="2" background-color="green" margin-right="0cm" margin-top="0cm" margin-left="0cm"/>
+ <fo:region-after extent="1cm" region-name="Footer3"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master master-name="PageRestEven" page-width="8.5in" page-height="11in" margin-bottom="0.3cm" margin-right="1cm" margin-top="1cm" margin-left="1cm">
+ <fo:region-body margin-bottom="2cm" column-count="2" background-color="aqua" margin-right="0cm" margin-top="0cm" margin-left="0cm"/>
+ <fo:region-after extent="1cm" region-name="Footer4"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master master-name="PageRestOdd" page-width="8.5in" page-height="11in" margin-bottom="0.3cm" margin-right="1cm" margin-top="1cm" margin-left="1cm">
+ <fo:region-body margin-bottom="2cm" column-count="2" background-color="fuchsia" margin-right="0cm" margin-top="0cm" margin-left="0cm"/>
+ <fo:region-after extent="1cm" region-name="Footer5"/>
+ </fo:simple-page-master>
+ <fo:page-sequence-master master-name="LetterPages">
+ <fo:repeatable-page-master-alternatives>
+ <fo:conditional-page-master-reference page-position="only" master-reference="PageOnly"/>
+ <fo:conditional-page-master-reference page-position="first" master-reference="PageFirst"/>
+ <fo:conditional-page-master-reference odd-or-even="even" page-position="rest" master-reference="PageRestEven"/>
+ <fo:conditional-page-master-reference odd-or-even="odd" page-position="rest" master-reference="PageRestOdd"/>
+ <fo:conditional-page-master-reference page-position="last" master-reference="PageLast"/>
+ </fo:repeatable-page-master-alternatives>
+ </fo:page-sequence-master>
+ </fo:layout-master-set>
+ <fo:page-sequence format="1" id="th_default_sequence1" initial-page-number="1" force-page-count="auto" master-reference="LetterPages">
+ <fo:static-content flow-name="Footer1">
+ <fo:block line-height="16pt" font-size="10pt" space-before="12pt" span="all">Footer 1</fo:block>
+ </fo:static-content>
+ <fo:static-content flow-name="Footer2">
+ <fo:block line-height="16pt" font-size="10pt" space-before="12pt" span="all">Footer 2</fo:block>
+ </fo:static-content>
+ <fo:static-content flow-name="Footer3">
+ <fo:block line-height="16pt" font-size="10pt" space-before="12pt" span="all">Footer 3</fo:block>
+ </fo:static-content>
+ <fo:static-content flow-name="Footer4">
+ <fo:block line-height="16pt" font-size="10pt" space-before="12pt" span="all">Footer 4</fo:block>
+ </fo:static-content>
+ <fo:static-content flow-name="Footer5">
+ <fo:block line-height="16pt" font-size="10pt" space-before="12pt" span="all">Footer 5</fo:block>
+ </fo:static-content>
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block line-height="16pt" font-size="10pt" space-before="12pt" span="all">Page 1 Page 1 Page 1 Page 1 Page 1 Page 1 Page 1 Page 1 Page 1 Page 1</fo:block>
+ <fo:block line-height="16pt" font-size="10pt" space-before="12pt">bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw bgbg gresgfe rwfwr rfrw fwrfrw </fo:block>
+ <fo:block line-height="16pt" font-size="10pt" space-before="12pt" span="all">end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="236" xpath="count(//word)"/>
+ <eval expected="1" xpath="count(//page)"/>
+ <eval expected="PageFirst" xpath="//pageViewport/@simple-page-master-name"/>
+ </checks>
+</testcase>
--- /dev/null
+<?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 the page-position first is used as there is not enough space on page-position only.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:fox="http://xmlgraphics.apache.org/fop/extensions">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="PageOnly" page-width="8.5in" page-height="11in" margin-bottom="0.25in" margin-right="0.5in" margin-top="0.35in" margin-left="0.5in">
+ <fo:region-body background-color="red" margin-top="0.85in" margin-bottom="2.1in" column-gap="0.3in" column-count="2" region-name="PageBody"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master margin-right="0.5in" margin-left="0.5in" margin-top="0.35in" margin-bottom="0.25in" master-name="PageFirst" page-width="8.5in" page-height="11in">
+ <fo:region-body background-color="blue" margin-top="0.85in" column-count="2" column-gap="0.3in" margin-bottom="1in" region-name="PageBody"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master master-name="PageRest" margin-right="0.5in" margin-left="0.5in" margin-top="0.35in" margin-bottom="0.25in" page-width="8.5in" page-height="11in">
+ <fo:region-body margin-bottom="1in" margin-top="0.5in" column-gap="0.3in" column-count="2" region-name="PageBody"/>
+ </fo:simple-page-master>
+ <fo:page-sequence-master master-name="LetterPages">
+ <fo:repeatable-page-master-alternatives>
+ <fo:conditional-page-master-reference page-position="only" master-reference="PageOnly"/>
+ <fo:conditional-page-master-reference page-position="first" master-reference="PageFirst"/>
+ <fo:conditional-page-master-reference page-position="rest" master-reference="PageRest"/>
+ <fo:conditional-page-master-reference page-position="last" master-reference="PageRest"/>
+ </fo:repeatable-page-master-alternatives>
+ </fo:page-sequence-master>
+ </fo:layout-master-set>
+ <fo:page-sequence format="1" id="th_default_sequence1" initial-page-number="auto" force-page-count="auto" master-reference="LetterPages">
+ <fo:flow flow-name="PageBody">
+ <fo:block-container span="all" id="1">
+ <fo:block>test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test </fo:block>
+ </fo:block-container>
+ <fo:block-container id="2">
+ <fo:block>
+ <fo:block font-size="30pt">test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test </fo:block>
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container span="all" id="3">
+ <fo:block>
+ <fo:block>
+ <fo:leader/>
+ </fo:block>
+ </fo:block>
+ </fo:block-container>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="216" xpath="count(//word)"/>
+ <eval expected="1" xpath="count(//page)"/>
+ <eval expected="PageFirst" xpath="//pageViewport/@simple-page-master-name"/>
+ </checks>
+</testcase>
--- /dev/null
+<?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 the page-position only is not used as there is more than 1 page
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:fox="http://xmlgraphics.apache.org/fop/extensions" font-family="Helvetica">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="PageFrontSingle" page-width="8.5in" page-height="11in" margin-bottom="0.32in" margin-right="1in" margin-top="0.2in" margin-left="0.9in">
+ <fo:region-body margin-bottom="1.35in" margin-right="0in" margin-top="0.5in" margin-left="0in" column-gap=".5in" column-count="2" region-name="letterPageBody" background-color="yellow"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master master-name="PageFront" page-width="8.5in" page-height="11in" margin-bottom="0.32in" margin-right="1in" margin-top="0.2in" margin-left="0.9in">
+ <fo:region-body margin-bottom="0.7in" margin-right="0in" margin-top="0.5in" margin-left="0in" column-gap=".5in" column-count="2" region-name="letterPageBody" background-color="orange"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master master-name="PageRest" page-width="8.5in" page-height="11in" margin-bottom="0.32in" margin-right="1in" margin-top="0.7in" margin-left="0.9in">
+ <fo:region-body margin-bottom="0.7in" margin-right="0in" margin-top="0in" margin-left="0in" column-gap=".5in" column-count="2" region-name="letterPageBody" background-color="red"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master master-name="PageLast" page-width="8.5in" page-height="11in" margin-bottom="0.32in" margin-right="1in" margin-top="0.7in" margin-left="0.9in">
+ <fo:region-body margin-bottom="1.35in" margin-right="0in" margin-top="0in" margin-left="0in" region-name="LetterPageBody" background-color="pink"/>
+ </fo:simple-page-master>
+ <fo:page-sequence-master master-name="LetterPages">
+ <fo:repeatable-page-master-alternatives>
+ <fo:conditional-page-master-reference page-position="only" master-reference="PageFrontSingle"/>
+ <fo:conditional-page-master-reference page-position="first" master-reference="PageFront"/>
+ <fo:conditional-page-master-reference page-position="rest" master-reference="PageRest"/>
+ <fo:conditional-page-master-reference page-position="last" master-reference="PageLast"/>
+ </fo:repeatable-page-master-alternatives>
+ </fo:page-sequence-master>
+ </fo:layout-master-set>
+ <fo:page-sequence format="1" id="th_default_sequence1" initial-page-number="auto" force-page-count="auto" master-reference="LetterPages">
+ <fo:flow flow-name="letterPageBody">
+ <fo:block font-size="60pt">test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="124" xpath="count(//word)"/>
+ <eval expected="4" xpath="count(//page)"/>
+ <eval expected="PageFront" xpath="//pageViewport/@simple-page-master-name"/>
+ </checks>
+</testcase>