]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Validation added for five more FO's.
authorGlen Mazza <gmazza@apache.org>
Sat, 5 Mar 2005 04:52:06 +0000 (04:52 +0000)
committerGlen Mazza <gmazza@apache.org>
Sat, 5 Mar 2005 04:52:06 +0000 (04:52 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198470 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fo/FONode.java
src/java/org/apache/fop/fo/flow/BlockContainer.java
src/java/org/apache/fop/fo/flow/InlineContainer.java
src/java/org/apache/fop/fo/flow/ListItemBody.java
src/java/org/apache/fop/fo/flow/ListItemLabel.java
src/java/org/apache/fop/fo/flow/MultiToggle.java

index c0f3a2c92b02bc9d0d2724ed58a005396c7bd837..37e2b8222e57e7691efb808bc6ecf8f0b1800f9d 100644 (file)
@@ -185,7 +185,9 @@ public abstract class FONode implements Cloneable {
    }
 
     /**
-     *
+     *  Primarily used for making final content model validation checks
+     *  and/or informing the FOEventHandler that the end of this FO
+     *  has been reached.
      */
     protected void endOfNode() throws FOPException {
         // do nothing by default
index 2195d7702d296d9e0584bdaacf3f885f4e364641..d18c7fbfdc4d7a9fe23c4e63d2fde91aa124d40a 100644 (file)
 
 package org.apache.fop.fo.flow;
 
+import org.xml.sax.Locator;
+
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.datatypes.Numeric;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.ValidationException;
 import org.apache.fop.fo.properties.CommonAbsolutePosition;
 import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
 import org.apache.fop.fo.properties.CommonMarginBlock;
@@ -32,7 +35,6 @@ import org.apache.fop.fo.properties.LengthRangeProperty;
 
 /**
  * Class modelling the fo:block-container object.
- * @todo implement validateChildNode()
  */
 public class BlockContainer extends FObj {
     // The value of properties relevant for fo:block-container.
@@ -59,6 +61,9 @@ public class BlockContainer extends FObj {
     private Numeric zIndex;
     // End of property values
 
+    /** used for FO validation */
+    private boolean blockItemFound = false;
+
     /**
      * @param parent FONode that is the parent of this object
      */
@@ -101,10 +106,35 @@ public class BlockContainer extends FObj {
         getFOEventHandler().startBlockContainer(this);
     }
 
+    /**
+     * @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String)
+     * XSL Content Model: marker* (%block;)+
+     * But: "In addition an fo:block-container that does not generate an 
+     * absolutely positioned area may have a sequence of zero or more 
+     * fo:markers as its initial children."
+     * @todo - implement above restriction if possible
+     */
+    protected void validateChildNode(Locator loc, String nsURI, String localName) 
+        throws ValidationException {
+        if (nsURI == FO_URI && localName.equals("marker")) {
+            if (blockItemFound) {
+               nodesOutOfOrderError(loc, "fo:marker", "(%block;)");
+            }
+        } else if (!isBlockItem(nsURI, localName)) {
+            invalidChildError(loc, nsURI, localName);
+        } else {
+            blockItemFound = true;
+        }
+    }
+
     /**
      * @see org.apache.fop.fo.FONode#endOfNode
      */
     protected void endOfNode() throws FOPException {
+        if (!blockItemFound) {
+            missingChildElementError("marker* (%block;)+");
+        }
+
         getFOEventHandler().endBlockContainer(this);
     }
 
index 6f7d18f01221696784342fd1342ed5ce83071cda..985e6c508d162af0c92ee446738138e4895826bb 100644 (file)
@@ -22,12 +22,15 @@ package org.apache.fop.fo.flow;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.xml.sax.Locator;
+
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.datatypes.Numeric;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.ValidationException;
 import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
 import org.apache.fop.fo.properties.CommonMarginInline;
 import org.apache.fop.fo.properties.CommonRelativePosition;
@@ -38,7 +41,6 @@ import org.apache.fop.layoutmgr.LayoutManager;
 
 /**
  * Class modelling the fo:inline-container object.
- * @todo implement validateChildNode()
  */
 public class InlineContainer extends FObj {
     // The value of properties relevant for fo:inline-container.
@@ -65,6 +67,9 @@ public class InlineContainer extends FObj {
     private int writingMode;
     // End of property values
 
+    /** used for FO validation */
+    private boolean blockItemFound = false;
+
     /**
      * @param parent FONode that is the parent of this object
      */
@@ -106,6 +111,32 @@ public class InlineContainer extends FObj {
         checkId(id);
     }
 
+    /**
+     * @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String)
+     * XSL Content Model: marker* (%block;)+
+     */
+    protected void validateChildNode(Locator loc, String nsURI, String localName) 
+        throws ValidationException {
+        if (nsURI == FO_URI && localName.equals("marker")) {
+            if (blockItemFound) {
+               nodesOutOfOrderError(loc, "fo:marker", "(%block;)");
+            }
+        } else if (!isBlockItem(nsURI, localName)) {
+            invalidChildError(loc, nsURI, localName);
+        } else {
+            blockItemFound = true;
+        }
+    }
+
+    /**
+     * @see org.apache.fop.fo.FONode#endOfNode
+     */
+    protected void endOfNode() throws FOPException {
+        if (!blockItemFound) {
+            missingChildElementError("marker* (%block;)+");
+        }
+    }
+
     /**
      * Return the "id" property.
      */
index 8a79dc988bb1eb5960ca25dbf4c067fd0a8e4ab6..a3f7e776a4a9ef2a32d8941bc5ebfdb26c612280 100644 (file)
@@ -23,14 +23,13 @@ import org.xml.sax.Locator;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
-import org.apache.fop.fo.ValidationException;
 import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.ValidationException;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.KeepProperty;
 
 /**
  * Class modelling the fo:list-item-body object.
- * @todo implement validateChildNode()
  */
 public class ListItemBody extends FObj {
     // The value of properties relevant for fo:list-item-body.
@@ -84,8 +83,6 @@ public class ListItemBody extends FObj {
     }
 
     /**
-     * Make sure content model satisfied, if so then tell the
-     * FOEventHandler that we are at the end of the flow.
      * @see org.apache.fop.fo.FONode#endOfNode
      */
     protected void endOfNode() throws FOPException {
index e6413e2a30434f541ad654941f7f7a870f3ca4b2..86a44d1218b4575664aa9bd2b09f6b4b7ef378de 100644 (file)
 
 package org.apache.fop.fo.flow;
 
+import org.xml.sax.Locator;
+
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.ValidationException;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.KeepProperty;
 
@@ -36,6 +39,9 @@ public class ListItemLabel extends FObj {
     private KeepProperty keepTogether;
     // End of property values
 
+    /** used for FO validation */
+    private boolean blockItemFound = false;
+
     /**
      * @param parent FONode that is the parent of this object
      */
@@ -60,10 +66,31 @@ public class ListItemLabel extends FObj {
         getFOEventHandler().startListLabel();
     }
 
+    /**
+     * @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String)
+     * XSL Content Model: marker* (%block;)+
+     */
+    protected void validateChildNode(Locator loc, String nsURI, String localName) 
+        throws ValidationException {
+        if (nsURI == FO_URI && localName.equals("marker")) {
+            if (blockItemFound) {
+               nodesOutOfOrderError(loc, "fo:marker", "(%block;)");
+            }
+        } else if (!isBlockItem(nsURI, localName)) {
+            invalidChildError(loc, nsURI, localName);
+        } else {
+            blockItemFound = true;
+        }
+    }
+
     /**
      * @see org.apache.fop.fo.FONode#endOfNode
      */
     protected void endOfNode() throws FOPException {
+        if (!blockItemFound) {
+            missingChildElementError("marker* (%block;)+");
+        }
+
         getFOEventHandler().endListLabel();
     }
 
index 7c0111cdec7c4b4155b866a542df474f0d9a8c7f..1a9f6c05f6ef953764522f90210c3beb77ec3462 100644 (file)
 package org.apache.fop.fo.flow;
 
 // FOP
+import org.xml.sax.Locator;
+
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.ValidationException;
 import org.apache.fop.fo.properties.CommonAccessibility;
 
+
 /**
  * Class modelling the fo:multi-toggle property.
- * @todo implement validateChildNode()
  */
 public class MultiToggle extends FObj {
     // The value of properties relevant for fo:multi-toggle.
@@ -56,9 +59,16 @@ public class MultiToggle extends FObj {
         commonAccessibility = pList.getAccessibilityProps();
         // prSwitchTo = pList.get(PR_SWITCH_TO);
 
-        if (!notImplementedWarningGiven) {
-            getLogger().warn("fo:multi-toggle is not yet implemented.");
-            notImplementedWarningGiven = true;
+    }
+
+    /**
+     * @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String)
+     * XSL Content Model: (#PCDATA|%inline;|%block;)*
+     */
+    protected void validateChildNode(Locator loc, String nsURI, String localName) 
+        throws ValidationException {
+        if (!isBlockOrInlineItem(nsURI, localName)) {
+            invalidChildError(loc, nsURI, localName);
         }
     }