aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Adams <gadams@apache.org>2012-04-17 19:49:33 +0000
committerGlenn Adams <gadams@apache.org>2012-04-17 19:49:33 +0000
commitf397b576a8c874150e2e3efc2970de0fc1ce3e9f (patch)
tree267ff2114081cd1d4cf98f7dd2139085d73cc698
parenta915c74aa4d3bcad9448d1808e5baba10ba91e24 (diff)
downloadxmlgraphics-fop-f397b576a8c874150e2e3efc2970de0fc1ce3e9f.tar.gz
xmlgraphics-fop-f397b576a8c874150e2e3efc2970de0fc1ce3e9f.zip
Bugzilla #53097: Ensure writing-mode specified on fo:table is used to determine writing mode of table and its descendants.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1327244 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/java/org/apache/fop/fo/flow/table/Table.java42
-rw-r--r--status.xml5
-rw-r--r--test/java/org/apache/fop/fo/properties/PropertyListMocks.java4
-rw-r--r--test/layoutengine/standard-testcases/table-column_column-progression-rl_1.xml (renamed from test/layoutengine/standard-testcases/table-column_column-progression-rl.xml)7
-rw-r--r--test/layoutengine/standard-testcases/table-column_column-progression-rl_2.xml83
5 files changed, 131 insertions, 10 deletions
diff --git a/src/java/org/apache/fop/fo/flow/table/Table.java b/src/java/org/apache/fop/fo/flow/table/Table.java
index e599fc8c5..304996f1c 100644
--- a/src/java/org/apache/fop/fo/flow/table/Table.java
+++ b/src/java/org/apache/fop/fo/flow/table/Table.java
@@ -40,12 +40,16 @@ import org.apache.fop.fo.properties.KeepProperty;
import org.apache.fop.fo.properties.LengthPairProperty;
import org.apache.fop.fo.properties.LengthRangeProperty;
import org.apache.fop.fo.properties.TableColLength;
+import org.apache.fop.traits.Direction;
+import org.apache.fop.traits.WritingMode;
+import org.apache.fop.traits.WritingModeTraits;
+import org.apache.fop.traits.WritingModeTraitsGetter;
/**
* Class modelling the <a href="http://www.w3.org/TR/xsl/#fo_table">
* <code>fo:table</code></a> object.
*/
-public class Table extends TableFObj implements ColumnNumberManagerHolder, BreakPropertySet,
+public class Table extends TableFObj implements ColumnNumberManagerHolder, BreakPropertySet, WritingModeTraitsGetter,
CommonAccessibilityHolder {
// The value of FO traits (refined properties) that apply to fo:table.
@@ -64,7 +68,7 @@ public class Table extends TableFObj implements ColumnNumberManagerHolder, Break
private int tableLayout;
private int tableOmitFooterAtBreak;
private int tableOmitHeaderAtBreak;
- private int writingMode;
+ private WritingModeTraits writingModeTraits;
// Unused but valid items, commented out for performance:
// private CommonAural commonAural;
// private CommonRelativePosition commonRelativePosition;
@@ -131,7 +135,8 @@ public class Table extends TableFObj implements ColumnNumberManagerHolder, Break
tableLayout = pList.get(PR_TABLE_LAYOUT).getEnum();
tableOmitFooterAtBreak = pList.get(PR_TABLE_OMIT_FOOTER_AT_BREAK).getEnum();
tableOmitHeaderAtBreak = pList.get(PR_TABLE_OMIT_HEADER_AT_BREAK).getEnum();
- writingMode = pList.get(PR_WRITING_MODE).getEnum();
+ writingModeTraits = new WritingModeTraits
+ ( WritingMode.valueOf(pList.get(PR_WRITING_MODE).getEnum()) );
//Bind extension properties
widowContentLimit = pList.get(PR_X_WIDOW_CONTENT_LIMIT).getLength();
@@ -516,9 +521,34 @@ public class Table extends TableFObj implements ColumnNumberManagerHolder, Break
return borderSeparation;
}
- /** @return the "writing-mode" FO trait */
- public int getWritingMode() {
- return writingMode;
+ /** {@inheritDoc} */
+ public Direction getInlineProgressionDirection() {
+ return writingModeTraits.getInlineProgressionDirection();
+ }
+
+ /** {@inheritDoc} */
+ public Direction getBlockProgressionDirection() {
+ return writingModeTraits.getBlockProgressionDirection();
+ }
+
+ /** {@inheritDoc} */
+ public Direction getColumnProgressionDirection() {
+ return writingModeTraits.getColumnProgressionDirection();
+ }
+
+ /** {@inheritDoc} */
+ public Direction getRowProgressionDirection() {
+ return writingModeTraits.getRowProgressionDirection();
+ }
+
+ /** {@inheritDoc} */
+ public Direction getShiftDirection() {
+ return writingModeTraits.getShiftDirection();
+ }
+
+ /** {@inheritDoc} */
+ public WritingMode getWritingMode() {
+ return writingModeTraits.getWritingMode();
}
/** @return the "fox:widow-content-limit" extension FO trait */
diff --git a/status.xml b/status.xml
index 57df34094..413ecfac1 100644
--- a/status.xml
+++ b/status.xml
@@ -62,7 +62,10 @@
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="update" fixes-bug="53094" due-to="Luis Bernardo">
+ <action context="Code" dev="GA" type="fix" fixes-bug="53097">
+ Ensure writing-mode specified on fo:table is used to determine writing mode of table and its descendants.
+ </action>
+ <action context="Code" dev="GA" type="fix" fixes-bug="53094" due-to="Luis Bernardo">
Convert block container overflow exception to event model, improving overflow property behavior.
</action>
<action context="Code" dev="GA" type="update" fixes-bug="51617">
diff --git a/test/java/org/apache/fop/fo/properties/PropertyListMocks.java b/test/java/org/apache/fop/fo/properties/PropertyListMocks.java
index 380f6e5a8..f364c9034 100644
--- a/test/java/org/apache/fop/fo/properties/PropertyListMocks.java
+++ b/test/java/org/apache/fop/fo/properties/PropertyListMocks.java
@@ -69,6 +69,10 @@ public final class PropertyListMocks {
final Property borderCollapseProperty = mock(Property.class);
when(borderCollapseProperty.getEnum()).thenReturn(Constants.EN_SEPARATE);
when(mockPList.get(Constants.PR_BORDER_COLLAPSE)).thenReturn(borderCollapseProperty);
+
+ final Property writingModeProperty = mock(Property.class);
+ when(writingModeProperty.getEnum()).thenReturn(Constants.EN_LR_TB);
+ when(mockPList.get(Constants.PR_WRITING_MODE)).thenReturn(writingModeProperty);
} catch (PropertyException e) {
throw new RuntimeException(e);
}
diff --git a/test/layoutengine/standard-testcases/table-column_column-progression-rl.xml b/test/layoutengine/standard-testcases/table-column_column-progression-rl_1.xml
index 4f6b3d53a..79db99a45 100644
--- a/test/layoutengine/standard-testcases/table-column_column-progression-rl.xml
+++ b/test/layoutengine/standard-testcases/table-column_column-progression-rl_1.xml
@@ -19,9 +19,10 @@
<testcase>
<info>
<p>
- This test checks table column progression with right-to-left writing mode. The first column
- should be to the right of the second column; the second column should be to the right of the
- third column. The columns should be colored red, yellow, orange from right to left.
+ This test checks table column progression with right-to-left writing mode when writing-mode
+ is specified on fo:page-sequence. The first column should be to the right of the second column; the
+ second column should be to the right of the third column. The columns should be colored red,
+ yellow, orange from right to left.
</p>
</info>
<fo>
diff --git a/test/layoutengine/standard-testcases/table-column_column-progression-rl_2.xml b/test/layoutengine/standard-testcases/table-column_column-progression-rl_2.xml
new file mode 100644
index 000000000..e7230a574
--- /dev/null
+++ b/test/layoutengine/standard-testcases/table-column_column-progression-rl_2.xml
@@ -0,0 +1,83 @@
+<?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 writing-mode
+ is specified on fo:table. The first column should be to the right of the second column; the
+ second column should be to the right of the third column. The columns should be colored red,
+ yellow, orange from right to left.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in" margin="0.5in">
+ <fo:region-body/>
+ </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%" writing-mode="rl">
+ <fo:table-column column-width="1in" background-color="red"/>
+ <fo:table-column column-width="1in" background-color="yellow"/>
+ <fo:table-column column-width="2in" background-color="orange"/>
+ <fo:table-body>
+ <fo:table-row>
+ <fo:table-cell>
+ <fo:block>cell1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block>cell2</fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block>cell3</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <!-- cell 1 background -->
+ <eval expected="#ff0000" xpath="//flow/block[1]/block[1]/@bkg-color"/>
+ <!-- cell 1 -->
+ <eval expected="cell1" xpath="//flow/block[1]/block[2]/block[1]/lineArea/text"/>
+ <eval expected="72000" xpath="//flow/block[1]/block[2]/@ipd"/>
+ <eval expected="216000" xpath="//flow/block[1]/block[2]/@left-offset"/>
+ <!-- cell 2 background -->
+ <eval expected="#ffff00" xpath="//flow/block[1]/block[3]/@bkg-color"/>
+ <!-- cell 2 -->
+ <eval expected="cell2" xpath="//flow/block[1]/block[4]/block[1]/lineArea/text"/>
+ <eval expected="72000" xpath="//flow/block[1]/block[4]/@ipd"/>
+ <eval expected="144000" xpath="//flow/block[1]/block[4]/@left-offset"/>
+ <!-- cell 3 background -->
+ <eval expected="#ffa500" xpath="//flow/block[1]/block[5]/@bkg-color"/>
+ <!-- cell 3 -->
+ <eval expected="cell3" xpath="//flow/block[1]/block[6]/block[1]/lineArea/text"/>
+ <eval expected="144000" xpath="//flow/block[1]/block[6]/@ipd"/>
+ <true xpath="not(boolean(//flow/block[1]/block[6]/@left-offset))"/>
+ <!-- right-to-left offset invariant - cell 2 to the left of cell 1 -->
+ <true xpath="//flow/block[1]/block[4]/@left-offset &lt; //flow/block[1]/block[2]/@left-offset"/>
+ <!-- right-to-left offset invariant - cell 3 to left right of cell 2 -->
+ <true xpath="//flow/block[1]/block[4]/@left-offset &gt; 0"/>
+ </checks>
+</testcase>