diff options
author | Glenn Adams <gadams@apache.org> | 2012-04-17 19:49:33 +0000 |
---|---|---|
committer | Glenn Adams <gadams@apache.org> | 2012-04-17 19:49:33 +0000 |
commit | f397b576a8c874150e2e3efc2970de0fc1ce3e9f (patch) | |
tree | 267ff2114081cd1d4cf98f7dd2139085d73cc698 | |
parent | a915c74aa4d3bcad9448d1808e5baba10ba91e24 (diff) | |
download | xmlgraphics-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.java | 42 | ||||
-rw-r--r-- | status.xml | 5 | ||||
-rw-r--r-- | test/java/org/apache/fop/fo/properties/PropertyListMocks.java | 4 | ||||
-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.xml | 83 |
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 < //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 > 0"/> + </checks> +</testcase> |