diff options
8 files changed, 96 insertions, 14 deletions
diff --git a/src/java/org/apache/fop/fo/flow/TableColumn.java b/src/java/org/apache/fop/fo/flow/TableColumn.java index c7b7eab6f..55b68a568 100644 --- a/src/java/org/apache/fop/fo/flow/TableColumn.java +++ b/src/java/org/apache/fop/fo/flow/TableColumn.java @@ -76,15 +76,8 @@ public class TableColumn extends TableFObj { super.bind(pList); if (pList.getExplicit(PR_COLUMN_NUMBER) != null) { - if (columnNumber.getValue() <= 0) { - //TODO: This is actually a non-fatal error. See Rec 7.26.8: - //"A positive integer. If a negative or non-integer value - // is provided, the value will be rounded to the - // nearest integer value greater than or equal to 1." - throw new PropertyException("column-number must be 1 or bigger, " - + "but got " + columnNumber); - } else if (getTable().isColumnNumberUsed(columnNumber.getValue())) { - throw new PropertyException("specified column-number \"" + if (getTable().isColumnNumberUsed(columnNumber.getValue())) { + throw new PropertyException("Specified column-number \"" + columnNumber + "\" has already been assigned to a previous column"); } else { diff --git a/src/java/org/apache/fop/fo/properties/ColumnNumberPropertyMaker.java b/src/java/org/apache/fop/fo/properties/ColumnNumberPropertyMaker.java index 36742014e..46e87c2c6 100644 --- a/src/java/org/apache/fop/fo/properties/ColumnNumberPropertyMaker.java +++ b/src/java/org/apache/fop/fo/properties/ColumnNumberPropertyMaker.java @@ -25,6 +25,11 @@ import org.apache.fop.fo.expr.PropertyException; import org.apache.fop.fo.flow.TableFObj; import org.apache.fop.fo.flow.TableBody; +/** + * Maker class for the column-number property on table-cells and + * table-columns + * + */ public class ColumnNumberPropertyMaker extends NumberProperty.Maker { public ColumnNumberPropertyMaker(int propId) { @@ -67,4 +72,31 @@ public class ColumnNumberPropertyMaker extends NumberProperty.Maker { + fo.getName()); } } + + /** + * Check the value of the column-number property. + * Return the parent's column index (initial value) in case + * of a negative or zero value + * + * @see org.apache.fop.fo.properties.PropertyMaker#get(int, PropertyList, boolean, boolean) + */ + public Property get(int subpropId, PropertyList propertyList, + boolean tryInherit, boolean tryDefault) + throws PropertyException { + + Property p = super.get(0, propertyList, tryInherit, tryDefault); + FObj fo = propertyList.getFObj(); + + if (p.getNumeric().getValue() <= 0) { + TableFObj parent = (TableFObj) propertyList.getParentFObj(); + int columnIndex = parent.getCurrentColumnIndex(); + fo.getLogger().warn("Specified negative or zero value for " + + "column-number on " + fo.getName() + ": " + + p.getNumeric().getValue() + " forced to " + + columnIndex); + return new NumberProperty(columnIndex); + } + //TODO: check for non-integer value and round + return p; + } } diff --git a/test/fotree/testcases/column-number_cells_body.fo b/test/fotree/testcases/column-number_cells_body.fo index 4d9de6672..f6012f838 100644 --- a/test/fotree/testcases/column-number_cells_body.fo +++ b/test/fotree/testcases/column-number_cells_body.fo @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -<!-- $Id: $ --> +<!-- $Id:$ --> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:test="http://xmlgraphics.apache.org/fop/test"> <fo:layout-master-set> diff --git a/test/fotree/testcases/column-number_cells_body2.fo b/test/fotree/testcases/column-number_cells_body2.fo index 3b5d0617a..4bd71fe7d 100644 --- a/test/fotree/testcases/column-number_cells_body2.fo +++ b/test/fotree/testcases/column-number_cells_body2.fo @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -<!-- $Id: $ --> +<!-- $Id:$ --> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:test="http://xmlgraphics.apache.org/fop/test"> <fo:layout-master-set> @@ -58,6 +58,10 @@ <test:assert property="column-number" expected="5" /> <fo:block>cell5</fo:block> </fo:table-cell> + <fo:table-cell> + <test:assert property="column-number" expected="6" /> + <fo:block>cell5b</fo:block> + </fo:table-cell> <fo:table-cell starts-row="true"> <test:assert property="column-number" expected="1" /> <fo:block>cell6</fo:block> diff --git a/test/fotree/testcases/column-number_cells_out-of-order.fo b/test/fotree/testcases/column-number_cells_out-of-order.fo index 841d71f7b..39ecd2a5d 100644 --- a/test/fotree/testcases/column-number_cells_out-of-order.fo +++ b/test/fotree/testcases/column-number_cells_out-of-order.fo @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -<!-- $Id: $ --> +<!-- $Id:$ --> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:test="http://xmlgraphics.apache.org/fop/test"> <fo:layout-master-set> diff --git a/test/fotree/testcases/column-number_cells_rows.fo b/test/fotree/testcases/column-number_cells_rows.fo index 62b3b620f..ad453b3cd 100644 --- a/test/fotree/testcases/column-number_cells_rows.fo +++ b/test/fotree/testcases/column-number_cells_rows.fo @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -<!-- $Id: $ --> +<!-- $Id:$ --> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:test="http://xmlgraphics.apache.org/fop/test"> <fo:layout-master-set> diff --git a/test/fotree/testcases/column-number_columns_special.fo b/test/fotree/testcases/column-number_columns_special.fo index 7787b9d91..035864a34 100644 --- a/test/fotree/testcases/column-number_columns_special.fo +++ b/test/fotree/testcases/column-number_columns_special.fo @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -<!-- $Id: $ --> +<!-- $Id:$ --> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:test="http://xmlgraphics.apache.org/fop/test"> <fo:layout-master-set> diff --git a/test/fotree/testcases/column-number_negative-or-zero.fo b/test/fotree/testcases/column-number_negative-or-zero.fo new file mode 100644 index 000000000..98294efb4 --- /dev/null +++ b/test/fotree/testcases/column-number_negative-or-zero.fo @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + Copyright 2005 The Apache Software Foundation + + Licensed 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:$ --> +<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" + xmlns:test="http://xmlgraphics.apache.org/fop/test"> + <fo:layout-master-set> + <fo:simple-page-master master-name="normal" page-width="5in" page-height="2in" + margin="20pt"> + <fo:region-body /> + </fo:simple-page-master> + </fo:layout-master-set> + <fo:page-sequence master-reference="normal"> + <fo:flow flow-name="xsl-region-body"> + <!-- testcase for specified negative or zero values --> + <fo:table border-collapse="separate" table-layout="fixed" width="7.5in"> + <fo:table-column column-width="60pt" column-number="0"> + <test:assert property="column-number" expected="1" /> + </fo:table-column> + <fo:table-column column-width="7in" column-number="-1"> + <test:assert property="column-number" expected="2" /> + </fo:table-column> + <fo:table-body> + <fo:table-row> + <fo:table-cell column-number="-3"> + <test:assert property="column-number" expected="1" /> + <fo:block>Cell1</fo:block> + </fo:table-cell> + <fo:table-cell column-number="0"> + <test:assert property="column-number" expected="2" /> + <fo:block>Cell2 + </fo:block> + </fo:table-cell> + </fo:table-row> + </fo:table-body> + </fo:table> + </fo:flow> + </fo:page-sequence> +</fo:root> + |