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.
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;
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();
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 */
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">
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);
}
+++ /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 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 < //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>
--- /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 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 < //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>
--- /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 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>