Pārlūkot izejas kodu

Changes from revision 768320 introduced another bug: footnotes from later steps were taken into account too early


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@770635 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-1_0
Vincent Hennebert pirms 15 gadiem
vecāks
revīzija
65cc46dec3

+ 18
- 14
src/java/org/apache/fop/layoutmgr/table/ActiveCell.java Parādīt failu

@@ -20,6 +20,7 @@
package org.apache.fop.layoutmgr.table;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

@@ -78,14 +79,6 @@ class ActiveCell {

private int spanIndex = 0;

/**
* The list of active footnotes. Those are the footnotes from the next step
* that is due to be merged by TableStepper.
*
* @see {@link #addFootnotes(List)}
*/
private List footnotes;

private Step previousStep;
private Step nextStep;
/**
@@ -111,6 +104,8 @@ class ActiveCell {
private int penaltyLength;
/** Value of the penalty ending this step, 0 if the step does not end on a penalty. */
private int penaltyValue;
/** List of footnotes for this step. */
private List footnoteList;
/**
* One of {@link Constants#EN_AUTO}, {@link Constants#EN_COLUMN},
* {@link Constants#EN_PAGE}, {@link Constants#EN_EVEN_PAGE},
@@ -140,6 +135,12 @@ class ActiveCell {
this.totalLength = other.totalLength;
this.penaltyLength = other.penaltyLength;
this.penaltyValue = other.penaltyValue;
if (other.footnoteList != null) {
if (this.footnoteList == null) {
this.footnoteList = new ArrayList();
}
this.footnoteList.addAll(other.footnoteList);
}
this.condBeforeContentLength = other.condBeforeContentLength;
this.breakClass = other.breakClass;
}
@@ -303,6 +304,9 @@ class ActiveCell {
afterNextStep.penaltyValue = 0;
afterNextStep.condBeforeContentLength = 0;
afterNextStep.breakClass = Constants.EN_AUTO;
if (afterNextStep.footnoteList != null) {
afterNextStep.footnoteList.clear();
}
boolean breakFound = false;
boolean prevIsBox = false;
boolean boxFound = false;
@@ -333,10 +337,10 @@ class ActiveCell {
prevIsBox = false;
} else {
if (el instanceof KnuthBlockBox && ((KnuthBlockBox) el).hasAnchors()) {
if (footnotes == null) {
footnotes = new ArrayList();
if (afterNextStep.footnoteList == null) {
afterNextStep.footnoteList = new LinkedList();
}
footnotes.addAll(((KnuthBlockBox) el).getFootnoteBodyLMs());
afterNextStep.footnoteList.addAll(((KnuthBlockBox) el).getFootnoteBodyLMs());
}
prevIsBox = true;
boxFound = true;
@@ -566,9 +570,9 @@ class ActiveCell {
* @param footnoteList the list to which this cell must add its footnotes
*/
void addFootnotes(List footnoteList) {
if (includedInLastStep() && footnotes != null) {
footnoteList.addAll(footnotes);
footnotes.clear();
if (includedInLastStep() && nextStep.footnoteList != null) {
footnoteList.addAll(nextStep.footnoteList);
nextStep.footnoteList.clear();
}
}


+ 4
- 0
test/layoutengine/standard-testcases/footnote_in_table_2.xml Parādīt failu

@@ -171,14 +171,18 @@
<eval expected="(3) Third footnote from the table." xpath="//pageSequence[1]//footnote/block[3]"/>

<eval expected="1" xpath="count(//pageSequence[2]/pageViewport[1]//footnote/block)"/>
<eval expected="Cell 1.2(1)." xpath="//pageSequence[2]/pageViewport[1]//regionBody//block[2]/block[3]/block[2]"/>
<eval expected="(1) First footnote from the table." xpath="//pageSequence[2]/pageViewport[1]//footnote/block[1]"/>
<eval expected="2" xpath="count(//pageSequence[2]/pageViewport[2]//footnote/block)"/>
<eval expected="(2) Second footnote from the table." xpath="//pageSequence[2]/pageViewport[2]//footnote/block[1]"/>
<eval expected="(3) Third footnote from the table." xpath="//pageSequence[2]/pageViewport[2]//footnote/block[2]"/>

<eval expected="Cell 1.1(2)" xpath="//pageSequence[3]/pageViewport[1]//regionBody//block[2]/block[2]/block[3]"/>
<eval expected="Cell 1.2(1)." xpath="//pageSequence[3]/pageViewport[1]//regionBody//block[2]/block[3]/block[2]"/>
<eval expected="2" xpath="count(//pageSequence[3]/pageViewport[1]//footnote/block)"/>
<eval expected="(1) First footnote from the table." xpath="//pageSequence[3]/pageViewport[1]//footnote/block[1]"/>
<eval expected="(2) Second footnote from the table." xpath="//pageSequence[3]/pageViewport[1]//footnote/block[2]"/>
<eval expected="Cell(3) 2.2" xpath="//pageSequence[3]/pageViewport[2]//regionBody//block[1]/block[3]/block[1]"/>
<eval expected="1" xpath="count(//pageSequence[3]/pageViewport[2]//footnote/block)"/>
<eval expected="(3) Third footnote from the table." xpath="//pageSequence[3]/pageViewport[2]//footnote/block[1]"/>
</checks>

+ 77
- 0
test/layoutengine/standard-testcases/footnote_in_table_3.xml Parādīt failu

@@ -0,0 +1,77 @@
<?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 that a footnote within the fixed height of a table row is properly handled.
</p>
</info>
<fo>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simple" page-height="220pt" page-width="3in"
margin="10pt">
<fo:region-body background-color="#F0F0F0"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simple" font-size="8pt" line-height="10pt">
<fo:flow flow-name="xsl-region-body">
<fo:block>Before the table</fo:block>
<fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="proportional-column-width(1)"/>
<fo:table-column column-width="proportional-column-width(1)"/>
<fo:table-body border="1pt solid black">
<fo:table-row border="inherit">
<fo:table-cell border="inherit">
<fo:block break-after="page">Cell 1.1</fo:block>
<fo:block>Cell 1.1<fo:footnote>
<fo:inline>(2)</fo:inline>
<fo:footnote-body>
<fo:block>(2) Footnote number 2.</fo:block>
</fo:footnote-body>
</fo:footnote></fo:block>
<fo:block>Cell 1.1</fo:block>
</fo:table-cell>
<fo:table-cell border="inherit">
<fo:block>Cell 1.2<fo:footnote>
<fo:inline>(1)</fo:inline>
<fo:footnote-body>
<fo:block>(1) Footnote number 1.</fo:block>
</fo:footnote-body>
</fo:footnote></fo:block>
<fo:block>Cell 1.2</fo:block>
<fo:block>Cell 1.2</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>
</fo>
<checks>
<eval expected="Cell 1.2(1)" xpath="//pageViewport[1]//regionBody//block[2]/block[2]/block"/>
<eval expected="1" xpath="count(//pageViewport[1]//footnote/block)"/>
<eval expected="(1) Footnote number 1." xpath="//pageViewport[1]//footnote/block[1]"/>

<eval expected="Cell 1.1(2)" xpath="//pageViewport[2]//regionBody//block[1]/block[1]/block[1]"/>
<eval expected="1" xpath="count(//pageViewport[2]//footnote/block)"/>
<eval expected="(2) Footnote number 2." xpath="//pageViewport[2]//footnote/block[1]"/>
</checks>
</testcase>

Notiek ielāde…
Atcelt
Saglabāt