]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Bugzilla #53097: Ensure writing-mode specified on fo:table is used to determine writi...
authorGlenn Adams <gadams@apache.org>
Tue, 17 Apr 2012 19:49:33 +0000 (19:49 +0000)
committerGlenn Adams <gadams@apache.org>
Tue, 17 Apr 2012 19:49:33 +0000 (19:49 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1327244 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fo/flow/table/Table.java
status.xml
test/java/org/apache/fop/fo/properties/PropertyListMocks.java
test/layoutengine/standard-testcases/table-column_column-progression-rl.xml [deleted file]
test/layoutengine/standard-testcases/table-column_column-progression-rl_1.xml [new file with mode: 0644]
test/layoutengine/standard-testcases/table-column_column-progression-rl_2.xml [new file with mode: 0644]

index e599fc8c5f00c86ec44b4f49ea56d3306a625c96..304996f1c901896ae26e1442160ec38d038893fc 100644 (file)
@@ -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 */
index 57df340941e1967bd8270d08974565a306367f1b..413ecfac16418a60519b1729b8ffe6e2c5667f91 100644 (file)
       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">
index 380f6e5a82bcec0cd4c1de923d0688546319c4fa..f364c90343ed9f4f0b26bb46d79ec175b2f7c9ce 100644 (file)
@@ -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.xml
deleted file mode 100644 (file)
index 4f6b3d5..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-<?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. 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" writing-mode="rl">
-        <fo:flow flow-name="xsl-region-body">
-          <fo:table table-layout="fixed" width="100%">
-            <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>
diff --git a/test/layoutengine/standard-testcases/table-column_column-progression-rl_1.xml b/test/layoutengine/standard-testcases/table-column_column-progression-rl_1.xml
new file mode 100644 (file)
index 0000000..79db99a
--- /dev/null
@@ -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: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>
+    <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" writing-mode="rl">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:table table-layout="fixed" width="100%">
+            <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>
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 (file)
index 0000000..e7230a5
--- /dev/null
@@ -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>