diff options
-rw-r--r-- | src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java | 18 | ||||
-rw-r--r-- | test/layoutengine/standard-testcases/footnote_footnote-only-final-page_multiple.xml (renamed from test/layoutengine/standard-testcases/footnote-create_new_page.xml) | 0 | ||||
-rw-r--r-- | test/layoutengine/standard-testcases/footnote_footnote-only-final-page_multiple_whole.xml | 82 | ||||
-rw-r--r-- | test/layoutengine/standard-testcases/footnote_footnote-only-final-page_several-pages.xml (renamed from test/layoutengine/standard-testcases/footnote_overflow-to-multiple-pages.xml) | 0 | ||||
-rw-r--r-- | test/layoutengine/standard-testcases/footnote_footnote-only-final-page_simple.xml (renamed from test/layoutengine/standard-testcases/footnote_overflow-to-empty-page.xml) | 0 |
5 files changed, 87 insertions, 13 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java b/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java index 4fa138da5..dce290b50 100644 --- a/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java +++ b/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java @@ -885,19 +885,11 @@ class PageBreakingAlgorithm extends BreakingAlgorithm { // create pages containing the remaining footnote bodies while (insertedFootnotesLength < totalFootnotesLength) { - final int tmpLength = lengthList.get(footnoteListIndex); - // check if last footnote has already been added completely - if (insertedFootnotesLength == tmpLength) { - footnoteListIndex++; - footnoteElementIndex - = getFootnoteList(footnoteListIndex).size() - 1; - } else if ((tmpLength - insertedFootnotesLength) <= availableBPD) { - // try adding some more content - // add a whole footnote - availableBPD -= tmpLength - insertedFootnotesLength; - insertedFootnotesLength = tmpLength; - footnoteElementIndex - = getFootnoteList(footnoteListIndex).size() - 1; + if (totalFootnotesLength - insertedFootnotesLength <= availableBPD) { + // All the remaining footnotes fit + insertedFootnotesLength = totalFootnotesLength; + footnoteListIndex = lengthList.size() - 1; + footnoteElementIndex = getFootnoteList(footnoteListIndex).size() - 1; } else if ((split = getFootnoteSplit // CSOK: InnerAssignment (footnoteListIndex, footnoteElementIndex, insertedFootnotesLength, availableBPD, true)) > 0) { diff --git a/test/layoutengine/standard-testcases/footnote-create_new_page.xml b/test/layoutengine/standard-testcases/footnote_footnote-only-final-page_multiple.xml index 9092f0d74..9092f0d74 100644 --- a/test/layoutengine/standard-testcases/footnote-create_new_page.xml +++ b/test/layoutengine/standard-testcases/footnote_footnote-only-final-page_multiple.xml diff --git a/test/layoutengine/standard-testcases/footnote_footnote-only-final-page_multiple_whole.xml b/test/layoutengine/standard-testcases/footnote_footnote-only-final-page_multiple_whole.xml new file mode 100644 index 000000000..bbddde998 --- /dev/null +++ b/test/layoutengine/standard-testcases/footnote_footnote-only-final-page_multiple_whole.xml @@ -0,0 +1,82 @@ +<?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>When a footnote-only final page must be created, check the case where the final page starts on + a footnote that must be split over several pages.</p> + </info> + <fo> +<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> + <fo:layout-master-set> + <fo:simple-page-master master-name="page" + page-height="120pt" page-width="220pt" margin="10pt"> + <fo:region-body background-color="#F0F0F0"/> + </fo:simple-page-master> + <fo:simple-page-master master-name="small" + page-height="120pt" page-width="220pt" margin="10pt"> + <fo:region-body margin-top="45pt" margin-bottom="45pt" background-color="#F0F0F0"/> + </fo:simple-page-master> + <fo:page-sequence-master master-name="pages"> + <fo:single-page-master-reference master-reference="page"/> + <fo:single-page-master-reference master-reference="small"/> + <fo:repeatable-page-master-reference master-reference="page"/> + </fo:page-sequence-master> + </fo:layout-master-set> + + <fo:page-sequence master-reference="pages"> + <fo:flow flow-name="xsl-region-body" text-align="justify" font-size="8pt" line-height="10pt"> + <fo:block space-before="50pt" space-before.conditionality="retain">Foonote call <fo:footnote> + <fo:inline>1</fo:inline> + <fo:footnote-body> + <fo:block> + <fo:block>Footnote 1</fo:block> + </fo:block> + </fo:footnote-body> + </fo:footnote>, <fo:footnote> + <fo:inline>2</fo:inline> + <fo:footnote-body> + <fo:block> + <fo:block>Footnote 2.1</fo:block> + <fo:block>Footnote 2.2</fo:block> + <fo:block>Footnote 2.3</fo:block> + </fo:block> + </fo:footnote-body> + </fo:footnote>, and <fo:footnote> + <fo:inline>3</fo:inline> + <fo:footnote-body> + <fo:block> + <fo:block>Footnote 3.1</fo:block> + <fo:block>Footnote 3.2</fo:block> + <fo:block>Footnote 3.3</fo:block> + </fo:block> + </fo:footnote-body> + </fo:footnote>.</fo:block> + </fo:flow> + </fo:page-sequence> +</fo:root> + </fo> + <checks> + <eval expected="2" xpath="count(//pageViewport[1]//footnote/block)"/> + <eval expected="3" xpath="count(//pageViewport[1]//footnote/block[2]/block)"/> + <eval expected="Footnote 2.1" xpath="//pageViewport[1]//footnote/block[2]/block[1]"/> + <eval expected="Footnote 2.2" xpath="//pageViewport[1]//footnote/block[2]/block[2]"/> + <eval expected="Footnote 2.3" xpath="//pageViewport[1]//footnote/block[2]/block[3]"/> + <eval expected="1" xpath="count(//pageViewport[2]//footnote/block)"/> + <eval expected="1" xpath="count(//pageViewport[2]//footnote/block/block)"/> + <eval expected="Footnote 3.1" xpath="//pageViewport[2]//footnote/block/block"/> + <eval expected="1" xpath="count(//pageViewport[3]//footnote/block)"/> + <eval expected="2" xpath="count(//pageViewport[3]//footnote/block/block)"/> + <eval expected="Footnote 3.2" xpath="//pageViewport[3]//footnote/block/block[1]"/> + <eval expected="Footnote 3.3" xpath="//pageViewport[3]//footnote/block/block[2]"/> + </checks> +</testcase> diff --git a/test/layoutengine/standard-testcases/footnote_overflow-to-multiple-pages.xml b/test/layoutengine/standard-testcases/footnote_footnote-only-final-page_several-pages.xml index 25f2c8a14..25f2c8a14 100644 --- a/test/layoutengine/standard-testcases/footnote_overflow-to-multiple-pages.xml +++ b/test/layoutengine/standard-testcases/footnote_footnote-only-final-page_several-pages.xml diff --git a/test/layoutengine/standard-testcases/footnote_overflow-to-empty-page.xml b/test/layoutengine/standard-testcases/footnote_footnote-only-final-page_simple.xml index 8220e60b6..8220e60b6 100644 --- a/test/layoutengine/standard-testcases/footnote_overflow-to-empty-page.xml +++ b/test/layoutengine/standard-testcases/footnote_footnote-only-final-page_simple.xml |