Browse Source

Bugzilla #53101: Ensure that table cell spanning works in right-to-left writing mode.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1328515 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-1_1rc1old
Glenn Adams 12 years ago
parent
commit
46917ef59f

+ 5
- 4
src/java/org/apache/fop/layoutmgr/table/ColumnSetup.java View File

@@ -245,13 +245,14 @@ public class ColumnSetup {
* the left-most column; otherwise, the first column is the left-most
* column.
* @param col column index (1 is first column)
* @param nrColSpan number columns spanned (for calculating offset in rtl mode)
* @param context the context for percentage based calculations
* @return the X offset of the requested column
*/
public int getXOffset(int col, PercentBaseContext context) {
public int getXOffset(int col, int nrColSpan, PercentBaseContext context) {
// TODO handle vertical WMs [GA]
if ( (wmTraits != null) && (wmTraits.getColumnProgressionDirection() == Direction.RL) ) {
return getXOffsetRTL(col, context);
return getXOffsetRTL(col, nrColSpan, context);
} else {
return getXOffsetLTR(col, context);
}
@@ -262,9 +263,9 @@ public class ColumnSetup {
* column; i.e., those columns whose column numbers are greater than the
* specified column number.
*/
private int getXOffsetRTL(int col, PercentBaseContext context) {
private int getXOffsetRTL(int col, int nrColSpan, PercentBaseContext context) {
int xoffset = 0;
for (int i = col, nc = colWidths.size(); ++i < nc;) {
for (int i = (col + nrColSpan - 1), nc = colWidths.size(); ++i < nc;) {
int effCol = i;
if (colWidths.get(effCol) != null) {
xoffset += ((Length) colWidths.get(effCol)).getValue(context);

+ 1
- 1
src/java/org/apache/fop/layoutmgr/table/RowPainter.java View File

@@ -468,7 +468,7 @@ class RowPainter {
block.addTrait(Trait.IS_REFERENCE_AREA, Boolean.TRUE);
block.setIPD(ipd);
block.setBPD(bpd);
block.setXOffset(tclm.getXOffsetOfGridUnit(colIndex)
block.setXOffset(tclm.getXOffsetOfGridUnit(colIndex, 1)
+ (borderStart.getRetainedWidth() / 2));
block.setYOffset(getRowOffset(rowIndex)
- (borderBefore.getRetainedWidth() / 2));

+ 4
- 3
src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java View File

@@ -317,16 +317,17 @@ public class TableContentLayoutManager implements PercentBaseContext {
* @return the requested X offset
*/
protected int getXOffsetOfGridUnit(PrimaryGridUnit gu) {
return getXOffsetOfGridUnit(gu.getColIndex());
return getXOffsetOfGridUnit(gu.getColIndex(), gu.getCell().getNumberColumnsSpanned());
}

/**
* Returns the X offset of the grid unit in the given column.
* @param colIndex the column index (zero-based)
* @param nrColSpan number columns spanned
* @return the requested X offset
*/
protected int getXOffsetOfGridUnit(int colIndex) {
return startXOffset + getTableLM().getColumns().getXOffset(colIndex + 1, getTableLM());
protected int getXOffsetOfGridUnit(int colIndex, int nrColSpan) {
return startXOffset + getTableLM().getColumns().getXOffset(colIndex + 1, nrColSpan, getTableLM());
}

/**

+ 3
- 0
status.xml View File

@@ -62,6 +62,9 @@
documents. Example: the fix of marks layering will be such a case when it's done.
-->
<release version="FOP Trunk" date="TBD">
<action context="Code" dev="GA" type="fix" fixes-bug="53103" due-to="Matthias Reischenbacher">
Ensure that table cell spanning works in right-to-left writing mode.
</action>
<action context="Code" dev="GA" type="fix" fixes-bug="53086">
Ensure that table footer and header are included in bididirectional resolution.
</action>

+ 89
- 0
test/layoutengine/standard-testcases/table-column_column-progression-rl_3.xml View File

@@ -0,0 +1,89 @@
<?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 table column progression with right-to-left writing mode when using multiple
column spans. See also bugzilla #53103.
</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="29.7cm" page-width="21cm" margin-top="1cm" margin-bottom="2cm" margin-left="1cm" margin-right="1cm">
<fo:region-body margin-top="3cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="first">
<fo:flow flow-name="xsl-region-body">
<fo:table table-layout="fixed" width="125mm" writing-mode="rl-tb">
<fo:table-header>
<fo:table-row>
<fo:table-cell number-columns-spanned="2" border="solid 1px black">
<fo:block>header-R1;C1-span2</fo:block>
</fo:table-cell>
<fo:table-cell border="solid 1px black">
<fo:block>header-R1;C2</fo:block>
</fo:table-cell>
<fo:table-cell border="solid 1px black">
<fo:block>header-R1;C3</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<fo:table-row>
<fo:table-cell border="solid 1px black">
<fo:block>body-R2;C1</fo:block>
</fo:table-cell>
<fo:table-cell number-columns-spanned="2" border="solid 1px black">
<fo:block>body-R2;C2</fo:block>
</fo:table-cell>
<fo:table-cell border="solid 1px black">
<fo:block>body-R2;C3</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell number-columns-spanned="3" border="solid 1px black">
<fo:block>body-R3;C1-span3</fo:block>
</fo:table-cell>
<fo:table-cell border="solid 1px black">
<fo:block>body-R3;C2</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>
</fo>
<checks>
<!-- row 1 (header), column 1, span 2 -->
<eval expected="header-R1;C1-span2" xpath="//flow/block[1]/block[3]//lineArea"/>
<eval expected="177664" xpath="//flow/block[1]/block[3]/@left-offset"/>
<eval expected="176164" xpath="//flow/block[1]/block[3]/@ipd"/>
<!-- row 2 (body), column 2, span 1 -->
<eval expected="body-R2;C2" xpath="//flow/block[1]/block[9]//lineArea"/>
<eval expected="89082" xpath="//flow/block[1]/block[9]/@left-offset"/>
<eval expected="176164" xpath="//flow/block[1]/block[9]/@ipd"/>
<!-- row 3 (body), column 1, span 3 -->
<eval expected="body-R3;C1-span3" xpath="//flow/block[1]/block[14]//lineArea"/>
<eval expected="89082" xpath="//flow/block[1]/block[14]/@left-offset"/>
<eval expected="264746" xpath="//flow/block[1]/block[14]/@ipd"/>
</checks>
</testcase>

Loading…
Cancel
Save