git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1327244 13f79535-47bb-0310-9956-ffa450edef68tags/fop-1_1rc1old
@@ -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 */ |
@@ -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"> |
@@ -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); | |||
} |
@@ -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> |
@@ -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> |