]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Some more validation messages for tables (borders and padding) and improved an existi...
authorJeremias Maerki <jeremias@apache.org>
Mon, 17 Oct 2005 11:04:12 +0000 (11:04 +0000)
committerJeremias Maerki <jeremias@apache.org>
Mon, 17 Oct 2005 11:04:12 +0000 (11:04 +0000)
For the purpose of ValidationPercentBaseContext please see its class description.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_SpaceResolution@325878 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/datatypes/SimplePercentBaseContext.java
src/java/org/apache/fop/datatypes/ValidationPercentBaseContext.java [new file with mode: 0644]
src/java/org/apache/fop/fo/FONode.java
src/java/org/apache/fop/fo/flow/Table.java
src/java/org/apache/fop/fo/flow/TableFObj.java

index 8b0688fe16522f71579a73b64f5546d7aa324b63..4a3f262274bb30a7bb7ba0aa34552784f76566f4 100644 (file)
@@ -31,7 +31,8 @@ public class SimplePercentBaseContext implements PercentBaseContext {
 
     /**
      * @param parentContext the context to be used for all percentages other than lengthBase
-     * @param lengthBase the particular percentage length base for which this context provides a value
+     * @param lengthBase the particular percentage length base for which this context provides 
+     *                   a value
      * @param lengthBaseValue the value to be returned for requests to the given lengthBase
      */
     public SimplePercentBaseContext(PercentBaseContext parentContext,
diff --git a/src/java/org/apache/fop/datatypes/ValidationPercentBaseContext.java b/src/java/org/apache/fop/datatypes/ValidationPercentBaseContext.java
new file mode 100644 (file)
index 0000000..6d3e8fa
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * 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: SimplePercentBaseContext.java 279656 2005-09-08 22:06:48Z pietsch $ */
+
+package org.apache.fop.datatypes;
+
+import org.apache.fop.fo.FObj;
+
+/**
+ * This base context is used during validation when the actual base values are still unknown
+ * but should still already be checked. The actual value returned is not so important in this
+ * case. But it's important that zero and non-zero values can be distinguished.
+ * <p>
+ * Example: A table with collapsing border model has no padding. The Table FO should be able 
+ * to check if non-zero values (even percentages) have been specified.
+ */
+public final class ValidationPercentBaseContext implements PercentBaseContext {
+    
+    /**
+     * Main constructor.
+     */
+    private ValidationPercentBaseContext() {
+    }
+
+    /**
+     * Returns the value for the given lengthBase.
+     * @see org.apache.fop.datatypes.PercentBaseContext#getBaseLength(int, FObj)
+     */
+    public int getBaseLength(int lengthBase, FObj fobj) {
+        //Simply return a dummy value which produces a non-zero value when a non-zero percentage
+        //was specified.
+        return 100000;
+    }
+
+    private static PercentBaseContext pseudoContextForValidation = null;
+    
+    /** @return a base context for validation purposes. See class description. */
+    public static PercentBaseContext getPseudoContextForValidationPurposes() {
+        if (pseudoContextForValidation == null) {
+            pseudoContextForValidation = new ValidationPercentBaseContext();
+        }
+        return pseudoContextForValidation;
+    }
+    
+}
index 86011004e78e3d41919d5cd704ab07c4c9746587..a142b9e3e61b8003f15c5d4682fb5931772adf4c 100644 (file)
@@ -311,7 +311,7 @@ public abstract class FONode implements Cloneable {
      * @param problem text to display that indicates the problem
      */
     protected void attributeWarning(String problem) {
-        log.warn(errorText(locator) + getName() + ", " + problem);
+        log.warn(warningText(locator) + getName() + ", " + problem);
     }
 
     /**
@@ -437,7 +437,7 @@ public abstract class FONode implements Cloneable {
      * @param loc org.xml.sax.Locator object
      * @return String the formatted text
      */
-    protected static String getLocatorString(Locator loc) {
+    public static String getLocatorString(Locator loc) {
         if (loc == null) {
             return "Unknown location";
         } else {
index 42585a6b4c90739bb8bb611a404b38f3fff5064c..e0845612764aa427eea14d2cdf14e9ca74e4985f 100644 (file)
@@ -24,6 +24,7 @@ import java.util.List;
 import org.xml.sax.Locator;
 
 import org.apache.fop.apps.FOPException;
+import org.apache.fop.datatypes.ValidationPercentBaseContext;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.PropertyList;
 import org.apache.fop.fo.StaticPropertyList;
@@ -127,17 +128,19 @@ public class Table extends TableFObj {
         colPList.setWritingMode();
         defaultColumn.bind(colPList);
 
-        /*if (borderCollapse != EN_SEPARATE && commonBorderPaddingBackground.hasPadding()) {
-            //See "17.6.2 The collapsing border model" in CSS2
-            getLogger().warn("Table may not have padding when using the collapsing "
-                    + "border model. Padding will be ignored.");
-        }*/
         if (borderCollapse != EN_SEPARATE) {
-            getLogger().warn("The collapsing border model on an fo:table "
+            attributeWarning("The collapsing border model on an fo:table "
                     + "is currently not supported by FOP");
         }
         if (tableLayout == EN_AUTO) {
-            getLogger().warn("table-layout=\"auto\" is currently not supported by FOP");
+            attributeWarning("table-layout=\"auto\" is currently not supported by FOP");
+        }
+        if (!isSeparateBorderModel() && getCommonBorderPaddingBackground().hasPadding(
+                ValidationPercentBaseContext.getPseudoContextForValidationPurposes())) {
+            //See "17.6.2 The collapsing border model" in CSS2
+            attributeWarning("In collapsing border model a table does not have padding"
+                    + " (see http://www.w3.org/TR/REC-CSS2/tables.html#collapsing-borders)"
+                    + ", but a non-zero value for padding was found. The padding will be ignored.");
         }
     }
 
index 11f4c3295a0a0dadc77380936648b55d3148bd21..db95871e5cce7451c806fef3f50098dabccf1a45 100644 (file)
@@ -20,6 +20,7 @@ package org.apache.fop.fo.flow;
 
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Numeric;
+import org.apache.fop.datatypes.ValidationPercentBaseContext;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.PropertyList;
@@ -27,9 +28,7 @@ import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
 
 /**
  * Superclass for table-related FOs
- *
  */
-
 public abstract class TableFObj extends FObj {
 
     private Numeric borderAfterPrecedence;
@@ -82,8 +81,17 @@ public abstract class TableFObj extends FObj {
         if (getNameId() != FO_TABLE && getNameId() != FO_TABLE_CELL
                 && getTable().isSeparateBorderModel()
                 && getCommonBorderPaddingBackground().hasBorderInfo()) {
-            getLogger().warn("Borders on " + getName() 
-                    + " non-applicable for table with border-collapse=\"separate\"");
+            attributeWarning("In the separate border model (border-collapse=\"separate\")"
+                    + ", borders cannot be specified on a " + getName() 
+                    + ", but a non-zero value for border was found. The border will be ignored. ");
+        }
+        if (getNameId() != FO_TABLE //Separate check for fo:table in Table.java
+                && getNameId() != FO_TABLE_CELL
+                && getCommonBorderPaddingBackground().hasPadding(
+                        ValidationPercentBaseContext.getPseudoContextForValidationPurposes())) {
+            attributeWarning(getName() + " does not have padding"
+                    + " (see the property list for " + getName() + " in XSL 1.0)"
+                    + ", but a non-zero value for padding was found. The padding will be ignored.");
         }
     }