Author: adelmelle
Date: Thu May  1 14:34:19 2008
New Revision: 652673

URL: http://svn.apache.org/viewvc?rev=652673&view=rev
Log:
First steps towards fo:retrieve-table-marker

Added:
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java
   (with props)
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/RetrieveTableMarker.java  
 (with props)
    xmlgraphics/fop/trunk/test/fotree/testcases/table_retrieve-table-marker.fo  
 (with props)
Modified:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/events/EventFormatter.xml
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/Constants.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOElementMapping.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/RetrieveMarker.java
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/LayoutManagerMapping.java

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/events/EventFormatter.xml
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/events/EventFormatter.xml?rev=652673&r1=652672&r2=652673&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/events/EventFormatter.xml 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/events/EventFormatter.xml Thu 
May  1 14:34:19 2008
@@ -19,7 +19,8 @@
 <catalogue xml:lang="en">
   <message key="locator">[ (See position {loc})| (See {#gatherContextInfo})| 
(No context info available)]</message>
   <message key="rule.markerDescendantOfFlow">An fo:marker is permitted only as 
the descendant of an fo:flow.</message>
-  <message key="rule.retrieveMarkerDescendatOfStaticContent">An 
fo:retrieve-marker is permitted only as the descendant of an 
fo:static-content.</message>
+  <message key="rule.retrieveMarkerDescendantOfStaticContent">An 
fo:retrieve-marker is permitted only as the descendant of an 
fo:static-content.</message>
+  <message key="rule.retrieveTableMarkerDescendantOfHeaderOrFooter">An 
fo:retrieve-table-marker is permitted only as the descendant of an 
fo:table-header or an fo:table-footer.</message>
   <message key="rule.bidiOverrideContent">An fo:bidi-override that is a 
descendant of an fo:leader or of the fo:inline child of an fo:footnote may not 
have block-level children, unless it has a nearer ancestor that is an 
fo:inline-container.</message>
   <message key="rule.inlineContent">An fo:inline that is a descendant of an 
fo:leader or fo:footnote may not have block-level children, unless it has a 
nearer ancestor that is an fo:inline-container.</message>
   <message key="rule.childOfSPM">The element must be a child of 
fo:simple-page-master.</message>

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/Constants.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/Constants.java?rev=652673&r1=652672&r2=652673&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/Constants.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/Constants.java Thu May  1 
14:34:19 2008
@@ -159,8 +159,10 @@
     int FO_PAGE_SEQUENCE_WRAPPER = 60;
     /** FO element constant - XSL 1.1 */
     int FO_PAGE_NUMBER_CITATION_LAST = 61;
+    /** FO element constant - XSL 1.1 */
+    int FO_RETRIEVE_TABLE_MARKER = 62;
     /** Number of FO element constants defined */
-    int FRM_OBJ_COUNT = 61;
+    int FRM_OBJ_COUNT = 62;
 
     // Masks
     /**
@@ -688,8 +690,12 @@
     int PR_X_WIDOW_CONTENT_LIMIT = 252;
     /** Property constant - FOP proprietary: limit for orphan content in lists 
and tables */
     int PR_X_ORPHAN_CONTENT_LIMIT = 253;
+    /** Property constant */
+    int PR_RETRIEVE_POSITION_WITHIN_TABLE = 254;
+    /** Property constant */
+    int PR_RETRIEVE_BOUNDARY_WITHIN_TABLE = 255;
     /** Number of property constants defined */
-    int PROPERTY_COUNT = 253;
+    int PROPERTY_COUNT = 255;
 
     // compound property constants
 
@@ -1097,6 +1103,16 @@
     int EN_REPLACE = 189;
     /** Enumeration constant -- for fo:basic-link show-destination */
     int EN_NEW = 190;
+    /** Enumeration constant -- for fo:retrieve-table-marker */
+    int EN_FIRST_STARTING = 191;
+    /** Enumeration constant -- for fo:retrieve-table-marker */
+    int EN_LAST_STARTING = 192;
+    /** Enumeration constant -- for fo:retrieve-table-marker */
+    int EN_LAST_ENDING = 193;
+    /** Enumeration constant -- for fo:retrieve-table-marker */
+    int EN_TABLE = 194;
+    /** Enumeration constant -- for fo:retrieve-table-marker */
+    int EN_TABLE_FRAGMENT = 195;
     /** Number of enumeration constants defined */
-    int ENUM_COUNT = 190;
+    int ENUM_COUNT = 195;
 }

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOElementMapping.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOElementMapping.java?rev=652673&r1=652672&r2=652673&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOElementMapping.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOElementMapping.java Thu 
May  1 14:34:19 2008
@@ -135,6 +135,7 @@
             foObjs.put("wrapper", new WrapperMaker());
             foObjs.put("marker", new MarkerMaker());
             foObjs.put("retrieve-marker", new RetrieveMarkerMaker());
+            foObjs.put("retrieve-table-marker", new 
RetrieveTableMarkerMaker());
         }
     }
 
@@ -514,4 +515,9 @@
         }
     }
 
+    static class RetrieveTableMarkerMaker extends ElementMapping.Maker {
+        public FONode make(FONode parent) {
+            return new org.apache.fop.fo.flow.RetrieveTableMarker(parent);
+        }
+    }
 }

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java?rev=652673&r1=652672&r2=652673&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java Thu 
May  1 14:34:19 2008
@@ -2097,6 +2097,25 @@
         m.addEnum("document", getEnumProperty(EN_DOCUMENT, "DOCUMENT"));
         m.setDefault("page-sequence");
         addPropertyMaker("retrieve-boundary", m);
+
+        // retrieve-position-within-table
+        m  = new EnumProperty.Maker(PR_RETRIEVE_POSITION_WITHIN_TABLE);
+        m.setInherited(false);
+        m.addEnum("first-starting", getEnumProperty(EN_FIRST_STARTING, 
"FIRST_STARTING"));
+        m.addEnum("first-including-carryover", getEnumProperty(EN_FIC, "FIC"));
+        m.addEnum("last-starting", getEnumProperty(EN_LAST_STARTING, 
"LAST_STARTING"));
+        m.addEnum("last-ending", getEnumProperty(EN_LAST_ENDING, 
"LAST_ENDING"));
+        m.setDefault("first-starting");
+        addPropertyMaker("retrieve-position-within-table", m);
+
+        // retrieve-boundary-within-table
+        m  = new EnumProperty.Maker(PR_RETRIEVE_BOUNDARY_WITHIN_TABLE);
+        m.setInherited(false);
+        m.addEnum("table", getEnumProperty(EN_TABLE, "TABLE"));
+        m.addEnum("table-fragment", getEnumProperty(EN_TABLE_FRAGMENT, 
"TABLE_FRAGMENT"));
+        m.addEnum("page", getEnumProperty(EN_DOCUMENT, "PAGE"));
+        m.setDefault("table");
+        addPropertyMaker("retrieve-boundary-within-table", m);
     }
 
     private void createNumberToStringProperties() {

Added: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java?rev=652673&view=auto
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java
 (added)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java
 Thu May  1 14:34:19 2008
@@ -0,0 +1,168 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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:$ */
+package org.apache.fop.fo.flow;
+
+import org.apache.fop.fo.*;
+import org.apache.fop.fo.flow.table.TableFObj;
+import org.apache.fop.fo.flow.table.Table;
+import org.apache.fop.apps.FOPException;
+
+import java.util.Iterator;
+
+/**
+ * Abstract base class for the <a 
href="http://www.w3.org/TR/xsl/#fo_retrieve-marker";>
+ * <code>fo:retrieve-marker</code></a> and
+ * <a href="http://www.w3.org/TR/xsl/#fo_retrieve-table-marker";>
+ * <code>fo:retrieve-table-marker</code></a> formatting objects.
+
+ */
+public abstract class AbstractRetrieveMarker extends FObjMixed {
+
+    private PropertyList propertyList;
+
+    /**
+     * Create a new AbstractRetrieveMarker instance that
+     * is a child of the given [EMAIL PROTECTED] FONode}
+     *
+     * @param parent    the parent [EMAIL PROTECTED] FONode}
+     */
+    public AbstractRetrieveMarker(FONode parent) {
+        super(parent);
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     * Store a reference to the parent [EMAIL PROTECTED] PropertyList}
+     * to be used when the retrieve-marker is resolved.
+     */
+    public void bind(PropertyList pList) throws FOPException {
+        super.bind(pList);
+        this.propertyList = pList.getParentPropertyList();
+    }
+
+    private PropertyList createPropertyListFor(FObj fo, PropertyList parent) {
+        return getFOEventHandler().getPropertyListMaker().make(fo, parent);
+    }
+
+    private void cloneSingleNode(FONode child, FONode newParent,
+                            Marker marker, PropertyList parentPropertyList)
+        throws FOPException {
+
+        if (child != null) {
+            FONode newChild = child.clone(newParent, true);
+            if (child instanceof FObj) {
+                Marker.MarkerPropertyList pList;
+                PropertyList newPropertyList = createPropertyListFor(
+                            (FObj) newChild, parentPropertyList);
+
+                pList = marker.getPropertyListFor(child);
+                newChild.processNode(
+                        child.getLocalName(),
+                        getLocator(),
+                        pList,
+                        newPropertyList);
+                if (newChild instanceof TableFObj) {
+                    // TODO calling startOfNode (and endOfNode, below) on 
other fobjs may
+                    // have undesirable side-effects. This is really ugly and 
will need to
+                    // be addressed sooner or later
+                    ((TableFObj) newChild).startOfNode();
+                }
+                addChildTo(newChild, (FObj) newParent);
+                if (newChild.getNameId() == FO_TABLE) {
+                    Table t = (Table) child;
+                    cloneSubtree(t.getColumns().listIterator(),
+                            newChild, marker, newPropertyList);
+                    cloneSingleNode(t.getTableHeader(),
+                            newChild, marker, newPropertyList);
+                    cloneSingleNode(t.getTableFooter(),
+                            newChild, marker, newPropertyList);
+                }
+                cloneSubtree(child.getChildNodes(), newChild,
+                        marker, newPropertyList);
+                if (newChild instanceof TableFObj) {
+                    // TODO this is ugly
+                    ((TableFObj) newChild).endOfNode();
+                }
+            } else if (child instanceof FOText) {
+                FOText ft = (FOText) newChild;
+                ft.bind(parentPropertyList);
+                addChildTo(newChild, (FObj) newParent);
+            }
+            if (newChild instanceof FObjMixed) {
+                handleWhiteSpaceFor((FObjMixed) newChild);
+            }
+        }
+    }
+
+    /**
+     * Clone the FO nodes in the parent iterator,
+     * attach the new nodes to the new parent,
+     * and map the new nodes to the existing property lists.
+     * FOText nodes are also in the new map, with a null value.
+     * Clone the subtree by a recursive call to this method.
+     * @param parentIter the iterator over the children of the old parent
+     * @param newParent the new parent for the cloned nodes
+     * @param marker the marker that contains the old property list mapping
+     * @param parentPropertyList the parent PropertyList
+     * @throws FOPException in case there was an error
+     */
+    private void cloneSubtree(Iterator parentIter, FONode newParent,
+                              Marker marker, PropertyList parentPropertyList)
+        throws FOPException {
+        if (parentIter != null) {
+            FONode child;
+            while (parentIter.hasNext()) {
+                child = (FONode) parentIter.next();
+                cloneSingleNode(child, newParent,
+                        marker, parentPropertyList);
+            }
+        }
+    }
+
+    private void cloneFromMarker(Marker marker)
+        throws FOPException {
+        // clean up remnants from a possible earlier layout
+        if (firstChild != null) {
+            currentTextNode = null;
+            firstChild = null;
+        }
+        cloneSubtree(marker.getChildNodes(), this,
+                        marker, propertyList);
+        handleWhiteSpaceFor(this);
+    }
+
+    /**
+     * Clone the subtree of the given marker
+     *
+     * @param marker the marker that is to be cloned
+     */
+    public void bindMarker(Marker marker) {
+        if (marker.getChildNodes() != null) {
+            try {
+                cloneFromMarker(marker);
+            } catch (FOPException exc) {
+                getFOValidationEventProducer().markerCloningFailed(this,
+                        marker.getMarkerClassName(), exc, getLocator());
+            }
+        } else if (log.isDebugEnabled()) {
+            log.debug("Empty marker retrieved...");
+        }
+    }
+
+}

Propchange: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/RetrieveMarker.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/RetrieveMarker.java?rev=652673&r1=652672&r2=652673&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/RetrieveMarker.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/RetrieveMarker.java 
Thu May  1 14:34:19 2008
@@ -23,29 +23,25 @@
 
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
-import org.apache.fop.fo.FOText;
-import org.apache.fop.fo.FObj;
-import org.apache.fop.fo.FObjMixed;
 import org.apache.fop.fo.PropertyList;
 import org.apache.fop.fo.ValidationException;
-import org.apache.fop.fo.flow.table.Table;
-import org.apache.fop.fo.flow.table.TableFObj;
 import org.xml.sax.Locator;
+import org.xml.sax.Attributes;
 
 /**
- * Class modelling the fo:retrieve-marker object.
+ * Class modelling the <a href="http://www.w3.org/TR/xsl/#fo_retrieve-marker";>
+ * <code>fo:retrieve-marker</code></a> formatting object.
  * This will create a layout manager that will retrieve
  * a marker based on the information.
  */
-public class RetrieveMarker extends FObjMixed {
+public class RetrieveMarker extends AbstractRetrieveMarker {
+
     // The value of properties relevant for fo:retrieve-marker.
     private String retrieveClassName;
     private int retrievePosition;
     private int retrieveBoundary;
     // End of property values
 
-    private PropertyList propertyList;
-
     /**
      * Create a new RetrieveMarker instance that is a
      * child of the given [EMAIL PROTECTED] FONode}.
@@ -56,12 +52,26 @@
         super(parent);
     }
 
-    /** [EMAIL PROTECTED] */
-    public void bind(PropertyList pList) throws FOPException {
+    /**
+     * [EMAIL PROTECTED]
+     * <i>NOTE: An <code>fo:retrieve-marker</code> is only permitted as a 
descendant
+     * of an <code>fo:static-content</code>.</i>
+     */
+    public void processNode(String elementName,
+                            Locator locator,
+                            Attributes attlist,
+                            PropertyList pList)
+            throws FOPException {
         if (findAncestor(FO_STATIC_CONTENT) < 0) {
             invalidChildError(locator, getParent().getName(), FO_URI, 
getName(),
-                "rule.retrieveMarkerDescendatOfStaticContent");
+                "rule.retrieveMarkerDescendantOfStaticContent");
+        } else {
+            super.processNode(elementName, locator, attlist, pList);
         }
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void bind(PropertyList pList) throws FOPException {
 
         retrieveClassName = pList.get(PR_RETRIEVE_CLASS_NAME).getString();
         retrievePosition = pList.get(PR_RETRIEVE_POSITION).getEnum();
@@ -70,8 +80,6 @@
         if (retrieveClassName == null || retrieveClassName.equals("")) {
             missingPropertyError("retrieve-class-name");
         }
-
-        propertyList = pList.getParentPropertyList();
         super.bind(pList);
     }
 
@@ -107,115 +115,6 @@
         return retrieveBoundary;
     }
 
-    private PropertyList createPropertyListFor(FObj fo, PropertyList parent) {
-        return getFOEventHandler().getPropertyListMaker().make(fo, parent);
-    }
-
-    private void cloneSingleNode(FONode child, FONode newParent,
-                            Marker marker, PropertyList parentPropertyList)
-        throws FOPException {
-
-        if (child != null) {
-            FONode newChild = child.clone(newParent, true);
-            if (child instanceof FObj) {
-                Marker.MarkerPropertyList pList;
-                PropertyList newPropertyList = createPropertyListFor(
-                            (FObj) newChild, parentPropertyList);
-
-                pList = marker.getPropertyListFor(child);
-                newChild.processNode(
-                        child.getLocalName(),
-                        getLocator(),
-                        pList,
-                        newPropertyList);
-                if (newChild instanceof TableFObj) {
-                    // TODO calling startOfNode (and endOfNode, below) on 
other fobjs may
-                    // have undesirable side-effects. This is really ugly and 
will need to
-                    // be addressed sooner or later
-                    ((TableFObj) newChild).startOfNode();
-                }
-                addChildTo(newChild, (FObj) newParent);
-                if (newChild.getNameId() == FO_TABLE) {
-                    Table t = (Table) child;
-                    cloneSubtree(t.getColumns().listIterator(),
-                            newChild, marker, newPropertyList);
-                    cloneSingleNode(t.getTableHeader(),
-                            newChild, marker, newPropertyList);
-                    cloneSingleNode(t.getTableFooter(),
-                            newChild, marker, newPropertyList);
-                }
-                cloneSubtree(child.getChildNodes(), newChild,
-                        marker, newPropertyList);
-                if (newChild instanceof TableFObj) {
-                    // TODO this is ugly
-                    ((TableFObj) newChild).endOfNode();
-                }
-            } else if (child instanceof FOText) {
-                FOText ft = (FOText) newChild;
-                ft.bind(parentPropertyList);
-                addChildTo(newChild, (FObj) newParent);
-            }
-            if (newChild instanceof FObjMixed) {
-                handleWhiteSpaceFor((FObjMixed) newChild);
-            }
-        }
-    }
-
-    /**
-     * Clone the FO nodes in the parent iterator,
-     * attach the new nodes to the new parent,
-     * and map the new nodes to the existing property lists.
-     * FOText nodes are also in the new map, with a null value.
-     * Clone the subtree by a recursive call to this method.
-     * @param parentIter the iterator over the children of the old parent
-     * @param newParent the new parent for the cloned nodes
-     * @param marker the marker that contains the old property list mapping
-     * @param descPLists the map of the new nodes to property lists
-     */
-    private void cloneSubtree(Iterator parentIter, FONode newParent,
-                              Marker marker, PropertyList parentPropertyList)
-        throws FOPException {
-        if (parentIter != null) {
-            FONode child;
-            while (parentIter.hasNext()) {
-                child = (FONode) parentIter.next();
-                cloneSingleNode(child, newParent,
-                        marker, parentPropertyList);
-            }
-        }
-    }
-
-    private void cloneFromMarker(Marker marker)
-        throws FOPException {
-        // clean up remnants from a possible earlier layout
-        if (firstChild != null) {
-            currentTextNode = null;
-            firstChild = null;
-        }
-        cloneSubtree(marker.getChildNodes(), this,
-                        marker, propertyList);
-        handleWhiteSpaceFor(this);
-    }
-
-    /**
-     * Clone the subtree of the given marker
-     *
-     * @param marker the marker that is to be cloned
-     */
-    public void bindMarker(Marker marker) {
-        if (marker.getChildNodes() != null) {
-            try {
-                cloneFromMarker(marker);
-            } catch (FOPException exc) {
-                getFOValidationEventProducer().markerCloningFailed(this,
-                        marker.getMarkerClassName(), exc, getLocator());
-                return;
-            }
-        } else if (log.isDebugEnabled()) {
-            log.debug("Empty marker retrieved...");
-        }
-    }
-
     /** [EMAIL PROTECTED] */
     public String getLocalName() {
         return "retrieve-marker";

Added: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/RetrieveTableMarker.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/RetrieveTableMarker.java?rev=652673&view=auto
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/RetrieveTableMarker.java 
(added)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/RetrieveTableMarker.java 
Thu May  1 14:34:19 2008
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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:$ */
+package org.apache.fop.fo.flow;
+
+import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.PropertyList;
+import org.apache.fop.apps.FOPException;
+import org.xml.sax.Locator;
+import org.xml.sax.Attributes;
+
+/**
+ * Class modelling the <a 
href="http://www.w3.org/TR/xsl/#fo_retrieve-table-marker";>
+ * <code>fo:retrieve-table-marker</code></a> formatting object.
+ */
+public class RetrieveTableMarker extends AbstractRetrieveMarker {
+
+    // The value of properties relevant for fo:retrieve-marker.
+    private String retrieveClassName;
+    private int retrievePositionWithinTable;
+    private int retrieveBoundaryWithinTable;
+    // end property values
+
+    /**
+     * Create a new RetrieveTableMarker instance that is
+     * a child of the given [EMAIL PROTECTED] FONode}.
+     *
+     * @param parent    the parent [EMAIL PROTECTED] FONode}
+     */
+    public RetrieveTableMarker(FONode parent) {
+        super(parent);
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void processNode(String elementName, Locator locator, Attributes 
attlist, PropertyList pList) throws FOPException {
+        if (findAncestor(FO_TABLE_HEADER) < 0
+                && findAncestor(FO_TABLE_FOOTER) < 0) {
+            invalidChildError(locator, getParent().getName(), FO_URI, 
getName(),
+                "rule.retrieveTableMarkerDescendantOfHeaderOrFooter");
+        } else {
+            super.processNode(elementName, locator, attlist, pList);
+        }
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void bind(PropertyList pList) throws FOPException {
+        this.retrieveClassName = pList.get(PR_RETRIEVE_CLASS_NAME).getString();
+        this.retrievePositionWithinTable
+                = pList.get(PR_RETRIEVE_POSITION_WITHIN_TABLE).getEnum();
+        this.retrieveBoundaryWithinTable
+                = pList.get(PR_RETRIEVE_BOUNDARY_WITHIN_TABLE).getEnum();
+    }
+
+    /** [EMAIL PROTECTED] */
+    public String getRetrieveClassName() {
+        return this.retrieveClassName;
+    }
+
+    /**
+     * Return the value for the <code>retrieve-position-within-table</code>
+     * property
+     * @return  the value for retrieve-position-within-table; one of
+     *              [EMAIL PROTECTED] 
org.apache.fop.fo.Constants#EN_FIRST_STARTING},
+     *              [EMAIL PROTECTED] org.apache.fop.fo.Constants#EN_FIC},
+     *              [EMAIL PROTECTED] 
org.apache.fop.fo.Constants#EN_LAST_STARTING},
+     *              [EMAIL PROTECTED] 
org.apache.fop.fo.Constants#EN_LAST_ENDING}.
+     */
+    public int getRetrievePositionWithinTable() {
+        return this.retrievePositionWithinTable;
+    }
+
+    /**
+     * Return the value for the <code>retrieve-boundary-within-table</code>
+     * property
+     * @return  the value for retrieve-boundary-within-table; one of
+     *              [EMAIL PROTECTED] org.apache.fop.fo.Constants#EN_TABLE},
+     *              [EMAIL PROTECTED] 
org.apache.fop.fo.Constants#EN_TABLE_FRAGMENT},
+     *              [EMAIL PROTECTED] org.apache.fop.fo.Constants#EN_PAGE}.
+     */
+    public int getRetrieveBoundaryWithinTable() {
+        return this.retrieveBoundaryWithinTable;
+    }
+
+    /** [EMAIL PROTECTED] */
+    public String getLocalName() {
+        return "retrieve-table-marker";
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     * @return  [EMAIL PROTECTED] 
org.apache.fop.fo.Constants#FO_RETRIEVE_TABLE_MARKER}
+     */
+    public int getNameId() {
+        return FO_RETRIEVE_TABLE_MARKER;
+    }
+}

Propchange: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/RetrieveTableMarker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/RetrieveTableMarker.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/LayoutManagerMapping.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/LayoutManagerMapping.java?rev=652673&r1=652672&r2=652673&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/LayoutManagerMapping.java
 (original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/LayoutManagerMapping.java
 Thu May  1 14:34:19 2008
@@ -51,6 +51,7 @@
 import org.apache.fop.fo.flow.PageNumberCitation;
 import org.apache.fop.fo.flow.PageNumberCitationLast;
 import org.apache.fop.fo.flow.RetrieveMarker;
+import org.apache.fop.fo.flow.RetrieveTableMarker;
 import org.apache.fop.fo.flow.Wrapper;
 import org.apache.fop.fo.flow.table.Table;
 import org.apache.fop.fo.flow.table.TableBody;
@@ -117,6 +118,7 @@
         makers.put(Block.class, new BlockLayoutManagerMaker());
         makers.put(Leader.class, new LeaderLayoutManagerMaker());
         makers.put(RetrieveMarker.class, new 
RetrieveMarkerLayoutManagerMaker());
+        makers.put(RetrieveTableMarker.class, new Maker());
         makers.put(Character.class, new CharacterLayoutManagerMaker());
         makers.put(ExternalGraphic.class,
                    new ExternalGraphicLayoutManagerMaker());
@@ -207,9 +209,7 @@
         return new StaticContentLayoutManager(pslm, sc, reg);
     }
     
-    /*
-     * [EMAIL PROTECTED] 
-     */
+    /** [EMAIL PROTECTED] */
     public StaticContentLayoutManager makeStaticContentLayoutManager(
         PageSequenceLayoutManager pslm, StaticContent sc, 
org.apache.fop.area.Block block) {
         return new StaticContentLayoutManager(pslm, sc, block);
@@ -218,7 +218,6 @@
     public static class Maker {
         public void make(FONode node, List lms) {
             // no layout manager
-            return;
         }
     }
 
@@ -231,18 +230,6 @@
         }
     }
 
-    /*
-    public static class FObjMixedLayoutManagerMaker extends Maker {
-        public void make(FONode node, List lms) {
-            if (node.getChildNodes() != null) {
-                InlineStackingLayoutManager lm;
-                lm = new InlineStackingLayoutManager((FObjMixed) node);
-                lms.add(lm);
-            }
-        }       
-    }
-    */
-
     public static class BidiOverrideLayoutManagerMaker extends Maker {
         // public static class BidiOverrideLayoutManagerMaker extends 
FObjMixedLayoutManagerMaker {
         public void make(BidiOverride node, List lms) {

Added: 
xmlgraphics/fop/trunk/test/fotree/testcases/table_retrieve-table-marker.fo
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/fotree/testcases/table_retrieve-table-marker.fo?rev=652673&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/fotree/testcases/table_retrieve-table-marker.fo 
(added)
+++ xmlgraphics/fop/trunk/test/fotree/testcases/table_retrieve-table-marker.fo 
Thu May  1 14:34:19 2008
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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$ -->
+<!-- This test checks the processing of the initial values for properties on
+     fo:table-retrieve-marker -->
+<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="A4" page-height="29.7cm" 
page-width="21cm">
+      <fo:region-body/>
+    </fo:simple-page-master>
+  </fo:layout-master-set>
+  <fo:page-sequence master-reference="A4">
+    <fo:flow flow-name="xsl-region-body">
+      <fo:table table-layout="fixed" border-collapse="separate" 
border-spacing="5pt 2pt">
+        <test:assert property="border-separation.inline-progression-direction" 
expected="5000mpt"/>
+        <test:assert property="border-separation.block-progression-direction" 
expected="2000mpt"/>
+        <fo:table-column column-width="160pt"/>
+        <fo:table-column column-width="160pt"/>
+        <fo:table-header>
+          <fo:table-row>
+            <fo:table-cell number-columns-spanned="2">
+              <fo:block>
+                <fo:retrieve-table-marker marker-class-name="mc1">
+                  <test:assert property="marker-class-name" expected="mc1" />
+                  <test:assert property="retrieve-position-within-table" 
expected="FIRST_STARTING" />
+                  <test:assert property="retrieve-boundary-within-table" 
expected="TABLE" />
+                </fo:retrieve-table-marker>
+              </fo:block>
+            </fo:table-cell>
+          </fo:table-row>
+        </fo:table-header>
+        <fo:table-body>
+          <fo:table-row>
+            <fo:table-cell>
+              <fo:block>cell1</fo:block>
+            </fo:table-cell>
+            <fo:table-cell border="solid 5pt black">
+              <fo:block>cell2</fo:block>
+            </fo:table-cell>
+          </fo:table-row>
+          <fo:table-row>
+            <fo:table-cell border="solid 5pt">
+              <fo:block>cell3</fo:block>
+            </fo:table-cell>
+            <fo:table-cell height="20pt" border="solid 10pt red">
+              <fo:block>cell4</fo:block>
+            </fo:table-cell>
+          </fo:table-row>
+        </fo:table-body>
+      </fo:table>
+    </fo:flow>
+  </fo:page-sequence>
+</fo:root>

Propchange: 
xmlgraphics/fop/trunk/test/fotree/testcases/table_retrieve-table-marker.fo
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
xmlgraphics/fop/trunk/test/fotree/testcases/table_retrieve-table-marker.fo
------------------------------------------------------------------------------
    svn:keywords = Id



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to