git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@770635 13f79535-47bb-0310-9956-ffa450edef68tags/fop-1_0
@@ -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(); | |||
} | |||
} | |||
@@ -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> |
@@ -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> |