From: Andreas L. Delmelle Date: Wed, 21 Sep 2005 16:25:57 +0000 (+0000) Subject: Added fallback for specified negative or zero for column-number X-Git-Tag: fop-0_90-alpha1~188 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1654c995b25b0cc66cf4f51f10335ca733d4f8de;p=xmlgraphics-fop.git Added fallback for specified negative or zero for column-number git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@290736 13f79535-47bb-0310-9956-ffa450edef68 --- 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. --> - + 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. --> - + @@ -58,6 +58,10 @@ cell5 + + + cell5b + cell6 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. --> - + 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. --> - + 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. --> - + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + Cell1 + + + + Cell2 + + + + + + + + +