This fixes the positioning of footnotes when the page bpd is not the same for all pages. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@668177 13f79535-47bb-0310-9956-ffa450edef68tags/fop-1_0
@@ -325,7 +325,7 @@ class PageBreakingAlgorithm extends BreakingAlgorithm { | |||
// this page contains some footnote citations | |||
// add the footnote separator width | |||
actualWidth += footnoteSeparatorLength.opt; | |||
if (actualWidth + allFootnotes <= getLineWidth()) { | |||
if (actualWidth + allFootnotes <= getLineWidth(activeNode.line)) { | |||
// there is enough space to insert all footnotes: | |||
// add the whole allFootnotes length | |||
actualWidth += allFootnotes; | |||
@@ -337,7 +337,7 @@ class PageBreakingAlgorithm extends BreakingAlgorithm { | |||
= checkCanDeferOldFootnotes(pageNode, elementIndex)) | |||
|| newFootnotes) | |||
&& (footnoteSplit = getFootnoteSplit(pageNode, | |||
getLineWidth() - actualWidth, canDeferOldFootnotes)) > 0) { | |||
getLineWidth(activeNode.line) - actualWidth, canDeferOldFootnotes)) > 0) { | |||
// it is allowed to break or even defer footnotes if either: | |||
// - there are new footnotes in the last piece of content, and | |||
// there is space to add at least a piece of the first one | |||
@@ -683,7 +683,7 @@ class PageBreakingAlgorithm extends BreakingAlgorithm { | |||
insertedFootnotesLength = lastNode.totalFootnotes; | |||
footnoteListIndex = lastNode.footnoteListIndex; | |||
footnoteElementIndex = lastNode.footnoteElementIndex; | |||
int availableBPD = getLineWidth(); | |||
int availableBPD = getLineWidth(lastNode.line); | |||
int split = 0; | |||
KnuthPageNode prevNode = lastNode; | |||
@@ -718,7 +718,7 @@ class PageBreakingAlgorithm extends BreakingAlgorithm { | |||
removeNode(prevNode.line, prevNode); | |||
prevNode = node; | |||
availableBPD = getLineWidth(); | |||
availableBPD = getLineWidth(node.line); | |||
} | |||
} | |||
// create the last node |
@@ -53,6 +53,11 @@ | |||
<changes> | |||
<release version="FOP Trunk" date="TBD"> | |||
<action context="Layout" dev="LF" type="fix"> | |||
Fixed an inconsistency in footnote handling that led to unnecessary | |||
empty areas in pages whose last normal line contains footnotes | |||
when the page bpd is not the same for all pages. | |||
</action> | |||
<!-- change reverted, to be added back later | |||
<action context="Renderers" dev="AC" importance="high" type="add"> | |||
Added SVG support for AFP (GOCA). |
@@ -0,0 +1,97 @@ | |||
<?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 positioning of footnotes when the body bpd changes | |||
from page to page. | |||
</p> | |||
</info> | |||
<fo> | |||
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> | |||
<fo:layout-master-set> | |||
<fo:simple-page-master master-name="first" | |||
page-height="200pt" | |||
page-width="140pt"> | |||
<fo:region-body background-color="lightgrey"/> | |||
</fo:simple-page-master> | |||
<fo:simple-page-master master-name="other" | |||
page-height="200pt" | |||
page-width="140pt"> | |||
<fo:region-body margin-top="20pt" | |||
background-color="lightgrey"/> | |||
</fo:simple-page-master> | |||
<fo:page-sequence-master master-name="all"> | |||
<fo:single-page-master-reference master-reference="first"/> | |||
<fo:repeatable-page-master-reference master-reference="other"/> | |||
</fo:page-sequence-master> | |||
</fo:layout-master-set> | |||
<fo:page-sequence master-reference="all"> | |||
<fo:flow flow-name="xsl-region-body" font-family="Courier"> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 1.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 2.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 3.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 4.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 5.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 6.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 7.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 8.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 9.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 10.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 11.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 12.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 13.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 14.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 15.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 16.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 17. | |||
<fo:footnote> | |||
<fo:inline font-size="50%" vertical-align="top">1</fo:inline> | |||
<fo:footnote-body> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height"><fo:inline font-size="50%" vertical-align="top">1</fo:inline> ftnt line 1/3.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 2/3.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 3/3.</fo:block> | |||
</fo:footnote-body> | |||
</fo:footnote> | |||
</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 18.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 19.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 20.</fo:block> | |||
</fo:flow> | |||
</fo:page-sequence> | |||
</fo:root> | |||
</fo> | |||
<checks> | |||
<eval expected="3" xpath="count(//pageViewport)"/> | |||
<!-- body height for page 1 --> | |||
<eval expected="200000" xpath="//pageViewport[1]/page/regionViewport/@bpd"/> | |||
<!-- body height for page 2 --> | |||
<eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/@bpd"/> | |||
<!-- last content line in page 2 --> | |||
<eval expected="line 17. " xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[last()]/lineArea/text[1]"/> | |||
<!-- last footnote line in page 2 --> | |||
<eval expected="ftnt line 2/3." xpath="//pageViewport[2]/page/regionViewport/regionBody/footnote//block[last()]/lineArea/text[1]"/> | |||
<!-- body height for page 3 --> | |||
<eval expected="180000" xpath="//pageViewport[3]/page/regionViewport/@bpd"/> | |||
<!-- first content line in page 3 --> | |||
<eval expected="line 18." xpath="//pageViewport[3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/lineArea/text[1]"/> | |||
<!-- footnote line in page 3 --> | |||
<eval expected="ftnt line 3/3." xpath="//pageViewport[3]/page/regionViewport/regionBody/footnote//block[1]/lineArea/text[1]"/> | |||
</checks> | |||
</testcase> |
@@ -0,0 +1,102 @@ | |||
<?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 positioning of footnotes when the body bpd changes | |||
from page to page, in particular when footnote pages are created. | |||
</p> | |||
</info> | |||
<fo> | |||
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> | |||
<fo:layout-master-set> | |||
<fo:simple-page-master master-name="first" | |||
page-height="200pt" | |||
page-width="140pt"> | |||
<fo:region-body background-color="lightgrey"/> | |||
</fo:simple-page-master> | |||
<fo:simple-page-master master-name="second" | |||
page-height="200pt" | |||
page-width="140pt"> | |||
<fo:region-body margin-top="60pt" | |||
background-color="lightgrey"/> | |||
</fo:simple-page-master> | |||
<fo:simple-page-master master-name="other" | |||
page-height="200pt" | |||
page-width="140pt"> | |||
<fo:region-body margin-top="20pt" | |||
background-color="lightgrey"/> | |||
</fo:simple-page-master> | |||
<fo:page-sequence-master master-name="all"> | |||
<fo:single-page-master-reference master-reference="first"/> | |||
<fo:single-page-master-reference master-reference="second"/> | |||
<fo:repeatable-page-master-reference master-reference="other"/> | |||
</fo:page-sequence-master> | |||
</fo:layout-master-set> | |||
<fo:page-sequence master-reference="all"> | |||
<fo:flow flow-name="xsl-region-body" font-family="Courier"> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 1.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 2.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 3.</fo:block> | |||
<fo:block line-height="20pt" line-stacking-strategy="font-height">line 4. | |||
<fo:footnote> | |||
<fo:inline font-size="50%" vertical-align="top">1</fo:inline> | |||
<fo:footnote-body> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height"><fo:inline font-size="50%" vertical-align="top">1</fo:inline> ftnt line 1.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 2.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 3.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 4.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 5.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 6.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 7.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 8.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 9.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 10.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 11.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 12.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 13.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 14.</fo:block> | |||
<fo:block background-color="pink" line-height="20pt" line-stacking-strategy="font-height">ftnt line 15.</fo:block> | |||
</fo:footnote-body> | |||
</fo:footnote> | |||
</fo:block> | |||
</fo:flow> | |||
</fo:page-sequence> | |||
</fo:root> | |||
</fo> | |||
<checks> | |||
<eval expected="3" xpath="count(//pageViewport)"/> | |||
<!-- body height for page 1 --> | |||
<eval expected="200000" xpath="//pageViewport[1]/page/regionViewport/@bpd"/> | |||
<!-- body height for page 2 --> | |||
<eval expected="140000" xpath="//pageViewport[2]/page/regionViewport/@bpd"/> | |||
<!-- first footnote line in page 2 --> | |||
<eval expected="ftnt line 7." xpath="//pageViewport[2]/page/regionViewport/regionBody/footnote//block[1]/lineArea/text[1]"/> | |||
<!-- last footnote line in page 2 --> | |||
<eval expected="ftnt line 13." xpath="//pageViewport[2]/page/regionViewport/regionBody/footnote//block[last()]/lineArea/text[1]"/> | |||
<!-- body height for page 3 --> | |||
<eval expected="180000" xpath="//pageViewport[3]/page/regionViewport/@bpd"/> | |||
<!-- first footnote line in page 3 --> | |||
<eval expected="ftnt line 14." xpath="//pageViewport[3]/page/regionViewport/regionBody/footnote//block[1]/lineArea/text[1]"/> | |||
<!-- last footnote line in page 3 --> | |||
<eval expected="ftnt line 15." xpath="//pageViewport[3]/page/regionViewport/regionBody/footnote//block[last()]/lineArea/text[1]"/> | |||
</checks> | |||
</testcase> |