private int remainingLength;
/** Heights of the rows (in the row-group) preceding the one where this cell starts. */
private int previousRowsLength;
- /** Total length of this cell's content. */
+ /** Total length of this cell's content plus the lengths of the previous rows. */
private int totalLength;
/** Length of the Knuth elements already included in the steps. */
private int includedLength;
includedLength = -1; // Avoid troubles with cells having content of zero length
this.previousRowsLength = previousRowsLength;
nextStepLength = previousRowsLength;
- totalLength = ElementListUtils.calcContentLength(elementList);
+ totalLength = previousRowsLength + ElementListUtils.calcContentLength(elementList);
if (pgu.getTable().isSeparateBorderModel()) {
borderBefore = pgu.getBorders().getBorderBeforeWidth(false)
+ tableLM.getHalfBorderSeparationBPD();
end = -1;
endRowIndex = rowIndex + pgu.getCell().getNumberRowsSpanned() - 1;
keepWithNextSignal = false;
- remainingLength = totalLength;
+ remainingLength = totalLength - previousRowsLength;
goToNextLegalBreak();
}
--- /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 that the combining algorithm for tables works properly. There was a bug in
+ the computation of remaining length that caused blank space to appear after the inner table.
+ Instead, the black and red border-after should be adjacent.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="normal" page-width="15cm" page-height="10cm" margin="20pt">
+ <fo:region-body margin="0pt"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="normal">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:table table-layout="fixed" width="100%" border="1pt solid red"
+ border-collapse="separate">
+ <fo:table-column column-width="proportional-column-width(1)"/>
+ <fo:table-body>
+ <fo:table-row>
+ <fo:table-cell>
+ <fo:table table-layout="fixed" width="100%" border-collapse="separate">
+ <fo:table-column column-width="35%"/>
+ <fo:table-column column-width="65%"/>
+ <fo:table-body>
+ <fo:table-row>
+ <fo:table-cell border="1pt solid black">
+ <fo:block>Cell 1.1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border="1pt solid black" number-rows-spanned="2">
+ <fo:block/>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row>
+ <fo:table-cell border="1pt solid black">
+ <fo:block>Cell 2.1 Line 1</fo:block>
+ <fo:block>Cell 2.1 Line 2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <!-- outer table -->
+ <eval expected="47200" xpath="//flow/block/@bpd"/>
+ <eval expected="49200" xpath="//flow/block/@bpda"/>
+ <!-- outer table-cell -->
+ <eval expected="47200" xpath="//flow/block/block/@bpd"/>
+ <eval expected="47200" xpath="//flow/block/block/@bpda"/>
+ <!-- inner table -->
+ <eval expected="47200" xpath="//flow/block/block/block/@bpd"/>
+ <eval expected="47200" xpath="//flow/block/block/block/@bpda"/>
+ <!-- cell 1.1 -->
+ <eval expected="14400" xpath="//flow/block/block/block/block[1]/@bpd"/>
+ <eval expected="16400" xpath="//flow/block/block/block/block[1]/@bpda"/>
+ <!-- cell 2.1 -->
+ <eval expected="28800" xpath="//flow/block/block/block/block[2]/@bpd"/>
+ <eval expected="30800" xpath="//flow/block/block/block/block[2]/@bpda"/>
+ <!-- cell 1.2 -->
+ <eval expected="45200" xpath="//flow/block/block/block/block[3]/@bpd"/>
+ <eval expected="47200" xpath="//flow/block/block/block/block[3]/@bpda"/>
+ </checks>
+</testcase>