]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Added fallback for specified negative or zero for column-number
authorAndreas L. Delmelle <adelmelle@apache.org>
Wed, 21 Sep 2005 16:25:57 +0000 (16:25 +0000)
committerAndreas L. Delmelle <adelmelle@apache.org>
Wed, 21 Sep 2005 16:25:57 +0000 (16:25 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@290736 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fo/flow/TableColumn.java
src/java/org/apache/fop/fo/properties/ColumnNumberPropertyMaker.java
test/fotree/testcases/column-number_cells_body.fo
test/fotree/testcases/column-number_cells_body2.fo
test/fotree/testcases/column-number_cells_out-of-order.fo
test/fotree/testcases/column-number_cells_rows.fo
test/fotree/testcases/column-number_columns_special.fo
test/fotree/testcases/column-number_negative-or-zero.fo [new file with mode: 0644]

index c7b7eab6f1a57c87605ccb3f6e686f39ae84ebf7..55b68a568adfd40298f74780c58384ba13b28351 100644 (file)
@@ -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 {
index 36742014e2d1eb78a255aee302e0c0009f57ac50..46e87c2c6c3fe8bb7ecbd3caf78fc647a7c5a4a3 100644 (file)
@@ -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;
+    }
 }
index 4d9de66727bb89d40c9b3b0cd52e444d0ab610bd..f6012f83844444e877153a9027ee3b3c96267b3b 100644 (file)
@@ -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>
index 3b5d0617a22ad72e85de2ee23b7b6bc5a9c4941a..4bd71fe7d2a3eb13cfb06ff851311da8a23726b8 100644 (file)
@@ -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>
             <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>
index 841d71f7bacb5183deb3177cda3dd6143a7dbcdc..39ecd2a5d1debce2238b624ee81ccac4c0c6860a 100644 (file)
@@ -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>
index 62b3b620f01ff585bfea35b34e635f9ee0221c77..ad453b3cd025ea6d9ee8a89a8afd2214976eee85 100644 (file)
@@ -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>
index 7787b9d9137aaa899d04cca55f584b106fd2445f..035864a348195a0c7524b715d6788bd54cc69759 100644 (file)
@@ -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 (file)
index 0000000..98294ef
--- /dev/null
@@ -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>
+