]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
1. Remove fo/FOTreeExternal and layoutmgr/LMFOTreeExternal (in favor of Visitor conce...
authorWilliam Victor Mote <vmote@apache.org>
Tue, 19 Aug 2003 00:53:55 +0000 (00:53 +0000)
committerWilliam Victor Mote <vmote@apache.org>
Tue, 19 Aug 2003 00:53:55 +0000 (00:53 +0000)
2. Add fo/FOTreeVisitor and layoutmgr/AddLMVisitor
3. Remove all occurrences of addLayoutManager in fo/FObj subclasses, replacing them with equivalent methods in AddLMVisitor

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

89 files changed:
src/java/org/apache/fop/apps/Driver.java
src/java/org/apache/fop/area/LinkResolver.java [new file with mode: 0644]
src/java/org/apache/fop/extensions/Bookmarks.java
src/java/org/apache/fop/extensions/ExtensionObj.java
src/java/org/apache/fop/extensions/Label.java
src/java/org/apache/fop/extensions/Outline.java
src/java/org/apache/fop/fo/FONode.java
src/java/org/apache/fop/fo/FOText.java
src/java/org/apache/fop/fo/FOTreeExternal.java
src/java/org/apache/fop/fo/FOTreeVisitor.java [new file with mode: 0644]
src/java/org/apache/fop/fo/FObj.java
src/java/org/apache/fop/fo/FObjMixed.java
src/java/org/apache/fop/fo/ToBeImplementedElement.java
src/java/org/apache/fop/fo/Unknown.java
src/java/org/apache/fop/fo/UnknownXMLObj.java
src/java/org/apache/fop/fo/XMLElement.java
src/java/org/apache/fop/fo/XMLObj.java
src/java/org/apache/fop/fo/flow/BasicLink.java
src/java/org/apache/fop/fo/flow/BidiOverride.java
src/java/org/apache/fop/fo/flow/Block.java
src/java/org/apache/fop/fo/flow/BlockContainer.java
src/java/org/apache/fop/fo/flow/Character.java
src/java/org/apache/fop/fo/flow/ExternalGraphic.java
src/java/org/apache/fop/fo/flow/Float.java
src/java/org/apache/fop/fo/flow/Footnote.java
src/java/org/apache/fop/fo/flow/FootnoteBody.java
src/java/org/apache/fop/fo/flow/InitialPropertySet.java
src/java/org/apache/fop/fo/flow/Inline.java
src/java/org/apache/fop/fo/flow/InlineContainer.java
src/java/org/apache/fop/fo/flow/InstreamForeignObject.java
src/java/org/apache/fop/fo/flow/Leader.java
src/java/org/apache/fop/fo/flow/ListBlock.java
src/java/org/apache/fop/fo/flow/ListItem.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/Marker.java
src/java/org/apache/fop/fo/flow/MultiCase.java
src/java/org/apache/fop/fo/flow/MultiProperties.java
src/java/org/apache/fop/fo/flow/MultiPropertySet.java
src/java/org/apache/fop/fo/flow/MultiSwitch.java
src/java/org/apache/fop/fo/flow/MultiToggle.java
src/java/org/apache/fop/fo/flow/PageNumber.java
src/java/org/apache/fop/fo/flow/PageNumberCitation.java
src/java/org/apache/fop/fo/flow/RetrieveMarker.java
src/java/org/apache/fop/fo/flow/Table.java
src/java/org/apache/fop/fo/flow/TableAndCaption.java
src/java/org/apache/fop/fo/flow/TableBody.java
src/java/org/apache/fop/fo/flow/TableCaption.java
src/java/org/apache/fop/fo/flow/TableCell.java
src/java/org/apache/fop/fo/flow/TableColumn.java
src/java/org/apache/fop/fo/flow/TableFooter.java
src/java/org/apache/fop/fo/flow/TableHeader.java
src/java/org/apache/fop/fo/flow/TableRow.java
src/java/org/apache/fop/fo/flow/Wrapper.java
src/java/org/apache/fop/fo/pagination/ColorProfile.java
src/java/org/apache/fop/fo/pagination/ConditionalPageMasterReference.java
src/java/org/apache/fop/fo/pagination/Declarations.java
src/java/org/apache/fop/fo/pagination/Flow.java
src/java/org/apache/fop/fo/pagination/LayoutMasterSet.java
src/java/org/apache/fop/fo/pagination/PageMasterReference.java
src/java/org/apache/fop/fo/pagination/PageSequence.java
src/java/org/apache/fop/fo/pagination/PageSequenceMaster.java
src/java/org/apache/fop/fo/pagination/Region.java
src/java/org/apache/fop/fo/pagination/RegionAfter.java
src/java/org/apache/fop/fo/pagination/RegionBA.java
src/java/org/apache/fop/fo/pagination/RegionBASE.java
src/java/org/apache/fop/fo/pagination/RegionBefore.java
src/java/org/apache/fop/fo/pagination/RegionBody.java
src/java/org/apache/fop/fo/pagination/RegionEnd.java
src/java/org/apache/fop/fo/pagination/RegionSE.java
src/java/org/apache/fop/fo/pagination/RegionStart.java
src/java/org/apache/fop/fo/pagination/RepeatablePageMasterAlternatives.java
src/java/org/apache/fop/fo/pagination/RepeatablePageMasterReference.java
src/java/org/apache/fop/fo/pagination/Root.java
src/java/org/apache/fop/fo/pagination/SimplePageMaster.java
src/java/org/apache/fop/fo/pagination/SinglePageMasterReference.java
src/java/org/apache/fop/fo/pagination/StaticContent.java
src/java/org/apache/fop/fo/pagination/Title.java
src/java/org/apache/fop/fonts/type1/PFMFile.java
src/java/org/apache/fop/layout/LayoutStrategy.java
src/java/org/apache/fop/layoutmgr/AddLMVisitor.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/BidiLayoutManager.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/ICLayoutManager.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/LMFOTreeExternal.java [deleted file]
src/java/org/apache/fop/layoutmgr/LMiter.java
src/java/org/apache/fop/layoutmgr/LayoutManagerLS.java
src/java/org/apache/fop/layoutmgr/RetrieveMarkerLayoutManager.java
src/java/org/apache/fop/svg/SVGElement.java
src/java/org/apache/fop/svg/SVGObj.java

index 198e6303eaded010905c0e6189c915a727de7ec0..dcd012206740e780eb1e8bb4fbd6417b1cf0c7bb 100644 (file)
@@ -321,7 +321,7 @@ public class Driver implements LogEnabled, FOTreeListener {
      * @return the logger
      * @see #enableLogging(Logger)
      */
-    protected Logger getLogger() {
+    public Logger getLogger() {
         if (this.log == null) {
             // use ConsoleLogger as default when logger not explicitly set
             this.log = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
diff --git a/src/java/org/apache/fop/area/LinkResolver.java b/src/java/org/apache/fop/area/LinkResolver.java
new file mode 100644 (file)
index 0000000..4289bf5
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * $Id$
+ * ============================================================================
+ *                    The Apache Software License, Version 1.1
+ * ============================================================================
+ *
+ * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if any, must
+ *    include the following acknowledgment: "This product includes software
+ *    developed by the Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself, if
+ *    and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ *    endorse or promote products derived from this software without prior
+ *    written permission. For written permission, please contact
+ *    apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache", nor may
+ *    "Apache" appear in their name, without prior written permission of the
+ *    Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ============================================================================
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <jtauber@jtauber.com>. For more information on the Apache
+ * Software Foundation, please see <http://www.apache.org/>.
+ */
+package org.apache.fop.area;
+
+// Java
+import java.util.List;
+import java.io.Serializable;
+
+// FOP
+import org.apache.fop.area.Trait;
+import org.apache.fop.area.Resolveable;
+import org.apache.fop.area.PageViewport;
+import org.apache.fop.area.Area;
+
+/**
+ * Link resolving for resolving internal links.
+ */
+public class LinkResolver implements Resolveable, Serializable {
+    private boolean resolved = false;
+    private String idRef;
+    private Area area;
+
+    /**
+     * Create a new link resolver.
+     *
+     * @param id the id to resolve
+     * @param a the area that will have the link attribute
+     */
+    public LinkResolver(String id, Area a) {
+        idRef = id;
+        area = a;
+    }
+
+    /**
+     * @return true if this link is resolved
+     */
+    public boolean isResolved() {
+        return resolved;
+    }
+
+    public String[] getIDs() {
+        return new String[] {idRef};
+    }
+
+    /**
+     * Resolve by adding an internal link.
+     */
+    public void resolve(String id, List pages) {
+        resolved = true;
+        if (idRef.equals(id) && pages != null) {
+            PageViewport page = (PageViewport)pages.get(0);
+            area.addTrait(Trait.INTERNAL_LINK, page.getKey());
+        }
+    }
+}
index 9152b7a5671523ba67d0c522be82d90fc3dad756..f383db27d696f3a6373e0283c4ef92e34ba77518 100644 (file)
@@ -52,6 +52,7 @@ package org.apache.fop.extensions;
 
 import org.apache.fop.fo.FOTreeHandler;
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.area.AreaTree;
 
 import java.util.ArrayList;
@@ -114,5 +115,10 @@ public class Bookmarks extends ExtensionObj {
             data.setAreaTree(at);
         }
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 05d6a63e41265dcbb197baf171f4644d0b13b891..00e827a72dec0d69055715d5b007edfb1382c3c7 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.extensions;
 
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * Base class for pdf bookmark extension objects.
@@ -67,5 +68,9 @@ public abstract class ExtensionObj extends FObj {
         super(parent);
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index da4068cf581d28f70d77625a745aadb163d8dbd5..1ab3db92c1a27271fae8429f1b885e9e9acc5d5a 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.extensions;
 
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * Labal for PDF bookmark extension.
@@ -89,4 +90,8 @@ public class Label extends ExtensionObj {
         return label;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 061d3705cdb5cfead30555a66cd6c7e0685a1846..ff3b840fbace0bfbae6596c80d229d0693d391b9 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.extensions;
 
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.apps.FOPException;
 
 import java.util.ArrayList;
@@ -140,5 +141,9 @@ public class Outline extends ExtensionObj {
         return label == null ? "" : label.toString();
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index e51744f67ba99026a97b0e8c2b74e782034cd6ed..0b20e67526fe9542024d21409b5e914e420ff9aa 100644 (file)
@@ -97,7 +97,7 @@ public abstract class FONode {
      * Returns the logger for the node.
      * @return the logger
      */
-    protected Logger getLogger() {
+    public Logger getLogger() {
         return userAgent.getLogger();
     }
 
@@ -113,7 +113,7 @@ public abstract class FONode {
      * Returns the user agent for the node.
      * @return FOUserAgent
      */
-    protected FOUserAgent getUserAgent() {
+    public FOUserAgent getUserAgent() {
         return userAgent;
     }
 
@@ -211,9 +211,24 @@ public abstract class FONode {
         return false;
     }
 
+    /**
+     * Recursively goes up the FOTree hierarchy until the FONode is found,
+     * which returns the parent Document.
+     * @return the Document object that is the parent of this node.
+     */
     public Document getDocument() {
         return parent.getDocument();
     }
 
+    /**
+     * This is a hook for an FOTreeVisitor subclass to be able to access
+     * this object.
+     * @param fotv the FOTreeVisitor subclass that can access this object.
+     * @see org.apache.fop.fo.FOTreeVisitor
+     */
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index da91da0b620513b1b0db8121e586e02d68c48a92..a7d066cdfa9a2de6e44154bc5175f744c4075373 100644 (file)
@@ -76,10 +76,10 @@ import org.apache.fop.fo.properties.TextTransform;
  */
 public class FOText extends FObj {
 
-    private char[] ca;
+    public char[] ca;
     private int start;
-    private int length;
-    private TextInfo textInfo;
+    public int length;
+    public TextInfo textInfo;
     private TextState ts;
 
     /**
@@ -165,22 +165,6 @@ public class FOText extends FObj {
         return false;
     }
 
-    public void addLayoutManager(List list) {
-        // if nothing left (length=0)?
-        if (length == 0) {
-            return;
-        }
-
-        if (length < ca.length) {
-            char[] tmp = ca;
-            ca = new char[length];
-            System.arraycopy(tmp, 0, ca, 0, length);
-        }
-        LayoutManager lm = new TextLayoutManager(ca, textInfo);
-        lm.setFObj(this);
-        list.add(lm);
-    }
-
     /**
      * @return a new TextCharIterator
      */
@@ -503,4 +487,7 @@ public class FOText extends FObj {
         }
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
 }
index 5378f8fc1ce59f4cedbf1ef7b8181deeb8d657b0..f129f1bb0923781725408256615bdd28afd804ae 100644 (file)
@@ -50,6 +50,8 @@
  */
 package org.apache.fop.fo;
 
+import org.apache.fop.fo.FONode;
+
 /**
  * Default class for handling external calls as an FO Tree is being built.
  * "External calls" are processes that are not directly related to building
@@ -64,5 +66,11 @@ package org.apache.fop.fo;
 
 public class FOTreeExternal {
 
+    public void extFONode(FONode foNode) {
+    }
+
+    public void extFObj(FObj fobj) {
+    }
+
 }
 
diff --git a/src/java/org/apache/fop/fo/FOTreeVisitor.java b/src/java/org/apache/fop/fo/FOTreeVisitor.java
new file mode 100644 (file)
index 0000000..e29afae
--- /dev/null
@@ -0,0 +1,673 @@
+/*
+ * $Id$
+ * ============================================================================
+ *                    The Apache Software License, Version 1.1
+ * ============================================================================
+ *
+ * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if any, must
+ *    include the following acknowledgment: "This product includes software
+ *    developed by the Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself, if
+ *    and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ *    endorse or promote products derived from this software without prior
+ *    written permission. For written permission, please contact
+ *    apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache", nor may
+ *    "Apache" appear in their name, without prior written permission of the
+ *    Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ============================================================================
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <jtauber@jtauber.com>. For more information on the Apache
+ * Software Foundation, please see <http://www.apache.org/>.
+ */
+package org.apache.fop.fo;
+
+import org.apache.fop.fo.flow.BlockContainer;
+import org.apache.fop.fo.flow.Character;
+import org.apache.fop.fo.pagination.ColorProfile;
+import org.apache.fop.fo.pagination.ConditionalPageMasterReference;
+import org.apache.fop.fo.pagination.Declarations;
+import org.apache.fop.extensions.ExtensionObj;
+import org.apache.fop.extensions.Bookmarks;
+import org.apache.fop.extensions.Label;
+import org.apache.fop.extensions.Outline;
+import org.apache.fop.fo.flow.ExternalGraphic;
+import org.apache.fop.fo.pagination.Flow;
+import org.apache.fop.fo.pagination.StaticContent;
+import org.apache.fop.fo.flow.BidiOverride;
+import org.apache.fop.fo.flow.Block;
+import org.apache.fop.fo.flow.Inline;
+import org.apache.fop.fo.flow.BasicLink;
+import org.apache.fop.fo.flow.Leader;
+import org.apache.fop.fo.flow.Marker;
+import org.apache.fop.fo.flow.RetrieveMarker;
+import org.apache.fop.fo.pagination.Title;
+import org.apache.fop.fo.flow.Wrapper;
+import org.apache.fop.fo.flow.Footnote;
+import org.apache.fop.fo.flow.FootnoteBody;
+import org.apache.fop.fo.flow.InlineContainer;
+import org.apache.fop.fo.flow.InstreamForeignObject;
+import org.apache.fop.fo.pagination.LayoutMasterSet;
+import org.apache.fop.fo.flow.ListBlock;
+import org.apache.fop.fo.flow.ListItem;
+import org.apache.fop.fo.flow.ListItemBody;
+import org.apache.fop.fo.flow.ListItemLabel;
+import org.apache.fop.fo.pagination.PageMasterReference;
+import org.apache.fop.fo.pagination.RepeatablePageMasterReference;
+import org.apache.fop.fo.pagination.SinglePageMasterReference;
+import org.apache.fop.fo.flow.PageNumber;
+import org.apache.fop.fo.flow.PageNumberCitation;
+import org.apache.fop.fo.pagination.PageSequence;
+import org.apache.fop.fo.pagination.PageSequenceMaster;
+import org.apache.fop.fo.pagination.Region;
+import org.apache.fop.fo.pagination.RegionBASE;
+import org.apache.fop.fo.pagination.RegionBA;
+import org.apache.fop.fo.pagination.RegionAfter;
+import org.apache.fop.fo.pagination.RegionBefore;
+import org.apache.fop.fo.pagination.RegionSE;
+import org.apache.fop.fo.pagination.RegionEnd;
+import org.apache.fop.fo.pagination.RegionStart;
+import org.apache.fop.fo.pagination.RegionBody;
+import org.apache.fop.fo.pagination.RepeatablePageMasterAlternatives;
+import org.apache.fop.fo.pagination.Root;
+import org.apache.fop.fo.pagination.SimplePageMaster;
+import org.apache.fop.fo.flow.Table;
+import org.apache.fop.fo.flow.TableBody;
+import org.apache.fop.fo.flow.TableFooter;
+import org.apache.fop.fo.flow.TableHeader;
+import org.apache.fop.fo.flow.TableCell;
+import org.apache.fop.fo.flow.TableColumn;
+import org.apache.fop.fo.flow.TableRow;
+import org.apache.fop.fo.flow.Float;
+import org.apache.fop.fo.flow.InitialPropertySet;
+import org.apache.fop.fo.flow.MultiCase;
+import org.apache.fop.fo.flow.MultiProperties;
+import org.apache.fop.fo.flow.MultiPropertySet;
+import org.apache.fop.fo.flow.MultiSwitch;
+import org.apache.fop.fo.flow.MultiToggle;
+import org.apache.fop.fo.flow.TableAndCaption;
+import org.apache.fop.fo.flow.TableCaption;
+import org.apache.fop.svg.SVGObj;
+import org.apache.fop.svg.SVGElement;
+
+/**
+ * <p>Implements the GoF Visitor design pattern to allow access to the FOTree
+ * hierarchy without knowing what subclass of FONode is being accessed.
+ * To preserve inheritance, and simulate the polymorphism that would exist if
+ * the subclass methods were embedded in the visited hierarchy, the default for
+ * each method (except serveVisitor(FONode)) is to run the the visitXXXX method
+ * that corresponds to the superclass of the FOTree child element. Thus, any
+ * method that is overridden in a subclass of FOTreeVisitor will affect not only
+ * FOTree elements of the class that method was written for, but also all
+ * subclasses of that class.</p>
+ * <p>Caveat: Because there appears to be no way for one
+ * object to cast objects from another class to their superclass, this
+ * superclass logic has been hard-coded into FOTreeVisitor. So, for example,
+ * serveVisitor(FObj) runs the following:</p>
+ * <pre><code>    serveVisitor((FONode)node);</code></pre>
+ * <p>If FObj ceases to be a direct subclass of FONode, then the above may cause
+ * problems.</p>
+ */
+public abstract class FOTreeVisitor {
+
+    /**
+     * @param node FONode object to process
+     */
+    public void serveVisitor(FONode node) {
+    }
+
+    /**
+     * @param node FObj object to process
+     */
+    public void serveVisitor(FObj node) {
+        serveVisitor((FONode)node);
+    }
+
+    /**
+     * @param node BlockContainer object to process
+     */
+    public void serveVisitor(BlockContainer node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node Character object to process
+     */
+    public void serveVisitor(Character node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node ColorProfile object to process
+     */
+    public void serveVisitor(ColorProfile node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node ConditionalPageMasterReference object to process
+     */
+    public void serveVisitor(ConditionalPageMasterReference node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node Declarations object to process
+     */
+    public void serveVisitor(Declarations node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node ExtensionObj object to process
+     */
+    public void serveVisitor(ExtensionObj node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node Bookmarks object to process
+     */
+    public void serveVisitor(Bookmarks node) {
+        serveVisitor((ExtensionObj)node);
+    }
+
+    /**
+     * @param node Label object to process
+     */
+    public void serveVisitor(Label node) {
+        serveVisitor((ExtensionObj)node);
+    }
+
+    /**
+     * @param node Outline object to process
+     */
+    public void serveVisitor(Outline node) {
+        serveVisitor((ExtensionObj)node);
+    }
+
+    /**
+     * @param node ExternalGraphic object to process
+     */
+    public void serveVisitor(ExternalGraphic node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node Flow object to process
+     */
+    public void serveVisitor(Flow node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node StaticContent object to process
+     */
+    public void serveVisitor(StaticContent node) {
+        serveVisitor((Flow)node);
+    }
+
+    /**
+     * @param node FObjMixed object to process
+     */
+    public void serveVisitor(FObjMixed node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node BidiOverride object to process
+     */
+    public void serveVisitor(BidiOverride node) {
+        serveVisitor((FObjMixed)node);
+    }
+
+    /**
+     * @param node Block object to process
+     */
+    public void serveVisitor(Block node) {
+        serveVisitor((FObjMixed)node);
+    }
+
+    /**
+     * @param node Inline object to process
+     */
+    public void serveVisitor(Inline node) {
+        serveVisitor((FObjMixed)node);
+    }
+
+    /**
+     * @param node BasicLink object to process
+     */
+    public void serveVisitor(BasicLink node) {
+        serveVisitor((Inline)node);
+    }
+
+    /**
+     * @param node Leader object to process
+     */
+    public void serveVisitor(Leader node) {
+        serveVisitor((FObjMixed)node);
+    }
+
+    /**
+     * @param node Marker object to process
+     */
+    public void serveVisitor(Marker node) {
+        serveVisitor((FObjMixed)node);
+    }
+
+    /**
+     * @param node RetrieveMarker object to process
+     */
+    public void serveVisitor(RetrieveMarker node) {
+        serveVisitor((FObjMixed)node);
+    }
+
+    /**
+     * @param node Title object to process
+     */
+    public void serveVisitor(Title node) {
+        serveVisitor((FObjMixed)node);
+    }
+
+    /**
+     * @param node Wrapper object to process
+     */
+    public void serveVisitor(Wrapper node) {
+        serveVisitor((FObjMixed)node);
+    }
+
+    /**
+     * @param node Footnote object to process
+     */
+    public void serveVisitor(Footnote node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node FootnoteBody object to process
+     */
+    public void serveVisitor(FootnoteBody node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node FOText object to process
+     */
+    public void serveVisitor(FOText node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node InlineContainer object to process
+     */
+    public void serveVisitor(InlineContainer node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node InstreamForeignObject object to process
+     */
+    public void serveVisitor(InstreamForeignObject node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node LayoutMasterSet object to process
+     */
+    public void serveVisitor(LayoutMasterSet node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node ListBlock object to process
+     */
+    public void serveVisitor(ListBlock node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node ListItem object to process
+     */
+    public void serveVisitor(ListItem node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node ListItemBody object to process
+     */
+    public void serveVisitor(ListItemBody node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node ListItemLabel object to process
+     */
+    public void serveVisitor(ListItemLabel node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node PageMasterReference object to process
+     */
+    public void serveVisitor(PageMasterReference node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node RepeatablePageMasterReference object to process
+     */
+    public void serveVisitor(RepeatablePageMasterReference node) {
+        serveVisitor((PageMasterReference)node);
+    }
+
+    /**
+     * @param node SinglePageMasterReference object to process
+     */
+    public void serveVisitor(SinglePageMasterReference node) {
+        serveVisitor((PageMasterReference)node);
+    }
+
+    /**
+     * @param node PageNumber object to process
+     */
+    public void serveVisitor(PageNumber node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node PageNumberCitation object to process
+     */
+    public void serveVisitor(PageNumberCitation node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node PageSequence object to process
+     */
+    public void serveVisitor(PageSequence node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node PageSequenceMaster object to process
+     */
+    public void serveVisitor(PageSequenceMaster node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node Region object to process
+     */
+    public void serveVisitor(Region node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node RegionBASE object to process
+     */
+    public void serveVisitor(RegionBASE node) {
+        serveVisitor((Region)node);
+    }
+
+    /**
+     * @param node RegionBA object to process
+     */
+    public void serveVisitor(RegionBA node) {
+        serveVisitor((RegionBASE)node);
+    }
+
+    /**
+     * @param node RegionAfter object to process
+     */
+    public void serveVisitor(RegionAfter node) {
+        serveVisitor((RegionBA)node);
+    }
+
+    /**
+     * @param node RegionBefore object to process
+     */
+    public void serveVisitor(RegionBefore node) {
+        serveVisitor((RegionBA)node);
+    }
+
+    /**
+     * @param node RegionSE object to process
+     */
+    public void serveVisitor(RegionSE node) {
+        serveVisitor((RegionBASE)node);
+    }
+
+    /**
+     * @param node RegionEnd object to process
+     */
+    public void serveVisitor(RegionEnd node) {
+        serveVisitor((RegionSE)node);
+    }
+
+    /**
+     * @param node RegionStart object to process
+     */
+    public void serveVisitor(RegionStart node) {
+        serveVisitor((RegionSE)node);
+    }
+
+    /**
+     * @param node RegionBody object to process
+     */
+    public void serveVisitor(RegionBody node) {
+        serveVisitor((Region)node);
+    }
+
+    /**
+     * @param node RepeatablePageMasterAlternatives object to process
+     */
+    public void serveVisitor(RepeatablePageMasterAlternatives node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node Root object to process
+     */
+    public void serveVisitor(Root node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node SimplePageMaster object to process
+     */
+    public void serveVisitor(SimplePageMaster node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node Table object to process
+     */
+    public void serveVisitor(Table node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node TableBody object to process
+     */
+    public void serveVisitor(TableBody node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node TableFooter object to process
+     */
+    public void serveVisitor(TableFooter node) {
+        serveVisitor((TableBody)node);
+    }
+
+    /**
+     * @param node TableHeader object to process
+     */
+    public void serveVisitor(TableHeader node) {
+        serveVisitor((TableBody)node);
+    }
+
+    /**
+     * @param node TableCell object to process
+     */
+    public void serveVisitor(TableCell node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node TableColumn object to process
+     */
+    public void serveVisitor(TableColumn node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node TableRow object to process
+     */
+    public void serveVisitor(TableRow node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node ToBeImplementedElement object to process
+     */
+    public void serveVisitor(ToBeImplementedElement node) {
+        serveVisitor((FObj)node);
+    }
+
+    /**
+     * @param node Float object to process
+     */
+    public void serveVisitor(Float node) {
+        serveVisitor((ToBeImplementedElement)node);
+    }
+
+    /**
+     * @param node InitialPropertySet object to process
+     */
+    public void serveVisitor(InitialPropertySet node) {
+        serveVisitor((ToBeImplementedElement)node);
+    }
+
+    /**
+     * @param node MultiCase object to process
+     */
+    public void serveVisitor(MultiCase node) {
+        serveVisitor((ToBeImplementedElement)node);
+    }
+
+    /**
+     * @param node MultiProperties object to process
+     */
+    public void serveVisitor(MultiProperties node) {
+        serveVisitor((ToBeImplementedElement)node);
+    }
+
+    /**
+     * @param node MultiPropertySet object to process
+     */
+    public void serveVisitor(MultiPropertySet node) {
+        serveVisitor((ToBeImplementedElement)node);
+    }
+
+    /**
+     * @param node MultiSwitch object to process
+     */
+    public void serveVisitor(MultiSwitch node) {
+        serveVisitor((ToBeImplementedElement)node);
+    }
+
+    /**
+     * @param node MultiToggle object to process
+     */
+    public void serveVisitor(MultiToggle node) {
+        serveVisitor((ToBeImplementedElement)node);
+    }
+
+    /**
+     * @param node TableAndCaption object to process
+     */
+    public void serveVisitor(TableAndCaption node) {
+        serveVisitor((ToBeImplementedElement)node);
+    }
+
+    /**
+     * @param node TableCaption object to process
+     */
+    public void serveVisitor(TableCaption node) {
+        serveVisitor((ToBeImplementedElement)node);
+    }
+
+    /**
+     * @param node Unknown object to process
+     */
+    public void serveVisitor(Unknown node) {
+        serveVisitor((FONode)node);
+    }
+
+    /**
+     * @param node XMLObj object to process
+     */
+    public void serveVisitor(XMLObj node) {
+        serveVisitor((FONode)node);
+    }
+
+    /**
+     * @param node SVGObj object to process
+     */
+    public void serveVisitor(SVGObj node) {
+        serveVisitor((XMLObj)node);
+    }
+
+    /**
+     * @param node SVGElement object to process
+     */
+    public void serveVisitor(SVGElement node) {
+        serveVisitor((SVGObj)node);
+    }
+
+    /**
+     * @param node UnknownXMLObj object to process
+     */
+    public void serveVisitor(UnknownXMLObj node) {
+        serveVisitor((XMLObj)node);
+    }
+
+    /**
+     * @param node XMLElement object to process
+     */
+    public void serveVisitor(XMLElement node) {
+        serveVisitor((XMLObj)node);
+    }
+
+}
+
index 6f5199591d55716fd0f02379cb380c8ec3a5603e..c95bfec109a6834fc104ed2c754b914411c5bd0e 100644 (file)
@@ -276,7 +276,7 @@ public class FObj extends FONode {
      * This methods checks that the id isn't already used by another
      * fo and sets the id attribute of this object.
      */
-    protected void setupID() {
+    public void setupID() {
         Property prop = this.properties.get("id");
         if (prop != null) {
             String str = prop.getString();
@@ -340,14 +340,6 @@ public class FObj extends FONode {
           p.getProperty("writing-mode").getEnum());
     }
 
-    /**
-     * Return a LayoutManager responsible for laying out this FObj's content.
-     * Must override in subclasses if their content can be laid out.
-     * @param list the list to which the layout manager(s) should be added
-     */
-    public void addLayoutManager(List list) {
-    }
-
     /**
      * Return an iterator over all the children of this FObj.
      * @return A ListIterator.
@@ -436,5 +428,8 @@ public class FObj extends FONode {
         return this.propMgr;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
 }
 
index 58ba11288407aeea8baa22dcb8d2dbc63536b2d5..d0320b6cc935186b25c192fc075f60519e2d5f76 100644 (file)
@@ -81,20 +81,6 @@ public class FObjMixed extends FObj {
         fontInfo = foih.getFontInfo();
     }
 
-    /**
-     * @param lms the list to which the layout manager(s) should be added
-     */
-    public void addLayoutManager(List lms) {
-        if (children != null) {
-            InlineStackingLayoutManager lm;
-            lm = new InlineStackingLayoutManager();
-            lm.setUserAgent(getUserAgent());
-            lm.setFObj(this);
-            lm.setLMiter(new LMiter(children.listIterator()));
-            lms.add(lm);
-        }
-    }
-
     /**
      * @param data array of characters containing text to be added
      * @param start starting array element to add
@@ -127,5 +113,8 @@ public class FObjMixed extends FObj {
         return new RecursiveCharIterator(this);
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
 }
 
index e36f0afebc6e085d0921215bfecb50e5f77bb8b3..2db857bdaa58f07c291c42fa959b1c60ecf318e7 100644 (file)
@@ -67,4 +67,8 @@ public class ToBeImplementedElement extends FObj {
                              + "\" is not yet implemented.");
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index b40dd4ec6e0d1c286416c21dd6a4b0935f471e23..fd6e0b4b2516175ea0936248db044e60b9e12381 100644 (file)
@@ -83,4 +83,9 @@ public class Unknown extends FONode {
     private void setup() {
         getLogger().debug("Layout Unknown element");
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 02a8b87a1f7770dbe0a81bc861984d32eff6c9fa..7e6577fc80337fea866a889847ee29a9a60526fb 100644 (file)
@@ -118,5 +118,9 @@ public class UnknownXMLObj extends XMLObj {
         super.addCharacters(data, start, length);
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 3a2db019634042d825b98d03883f1ae99253f8c4..08c91c2d3bd82f3d18bb5ff4859266809a13d966 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo;
 
 // XML
@@ -85,4 +85,9 @@ public class XMLElement extends XMLObj {
     public String getNameSpace() {
         return namespace;
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index b1e1b5b9bb98065596965317b094a762d3609023..c499748a6147e5583f28f3d7d1863d774f237c1f 100644 (file)
@@ -231,5 +231,9 @@ public abstract class XMLObj extends FONode {
         element.appendChild(text);
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 3e75e3c6b8d51af277ab9347fcddaea5cd5e8454..477674f12a31e668aea5fb242dbf5d77198b076d 100644 (file)
@@ -56,6 +56,7 @@ import java.io.Serializable;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
 import org.apache.fop.fo.properties.CommonBorderAndPadding;
@@ -88,44 +89,7 @@ public class BasicLink extends Inline {
         super(parent);
     }
 
-    /**
-     * Add start and end properties for the link
-     * @see org.apache.fop.fo.FObj#addLayoutManager
-     */
-    public void addLayoutManager(List lms) {
-        setup();
-        InlineStackingLayoutManager lm;
-        lm = new InlineStackingLayoutManager() {
-                    protected InlineParent createArea() {
-                        InlineParent area = super.createArea();
-                        setupLinkArea(parentLM, area);
-                        return area;
-                    }
-                };
-        lm.setUserAgent(getUserAgent());
-        lm.setFObj(this);
-        lm.setLMiter(new LMiter(children.listIterator()));
-        lms.add(lm);
-    }
-
-    protected void setupLinkArea(LayoutProcessor parentLM, InlineParent area) {
-        if (link == null) {
-            return;
-        }
-        if (external) {
-            area.addTrait(Trait.EXTERNAL_LINK, link);
-        } else {
-            PageViewport page = parentLM.resolveRefID(link);
-            if (page != null) {
-                area.addTrait(Trait.INTERNAL_LINK, page.getKey());
-            } else {
-                LinkResolver res = new LinkResolver(link, area);
-                parentLM.addUnresolvedArea(link, res);
-            }
-        }
-    }
-
-    private void setup() {
+    public void setup() {
         String destination;
         int linkType;
 
@@ -181,48 +145,16 @@ public class BasicLink extends Inline {
         return true;
     }
 
-    /**
-     * Link resolving for resolving internal links.
-     * This is static since it is independant of the link fo.
-     */
-    protected static class LinkResolver implements Resolveable, Serializable {
-        private boolean resolved = false;
-        private String idRef;
-        private Area area;
-
-        /**
-         * Create a new link resolver.
-         *
-         * @param id the id to resolve
-         * @param a the area that will have the link attribute
-         */
-        public LinkResolver(String id, Area a) {
-            idRef = id;
-            area = a;
-        }
-
-        /**
-         * @return true if this link is resolved
-         */
-        public boolean isResolved() {
-            return resolved;
-        }
+    public String getLink() {
+        return link;
+    }
 
-        public String[] getIDs() {
-            return new String[] {idRef};
-        }
+    public boolean getExternal() {
+        return external;
+    }
 
-        /**
-         * Resolve by adding an internal link.
-         */
-        public void resolve(String id, List pages) {
-            resolved = true;
-            if (idRef.equals(id) && pages != null) {
-                PageViewport page = (PageViewport)pages.get(0);
-                area.addTrait(Trait.INTERNAL_LINK, page.getKey());
-            }
-        }
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
     }
 
 }
-
index 886472cd976d8c73037a4b2e0a9e4c722e436cae..a037d5a58801b6b521434f07b549c09400f8b301 100644 (file)
@@ -53,6 +53,7 @@ package org.apache.fop.fo.flow;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObjMixed;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.CommonAural;
 import org.apache.fop.fo.properties.CommonRelativePosition;
 
@@ -75,28 +76,6 @@ public class BidiOverride extends FObjMixed {
         super(parent);
     }
 
-    /**
-     * @see org.apache.fop.fo.FObj#addLayoutManager
-     */
-    public void addLayoutManager(List list) {
-        if (false) {
-            super.addLayoutManager(list);
-        } else {
-            ArrayList childList = new ArrayList();
-            super.addLayoutManager(childList);
-            for (int count = childList.size() - 1; count >= 0; count--) {
-                LayoutProcessor lm = (LayoutProcessor) childList.get(count);
-                if (lm.generatesInlineAreas()) {
-                    LayoutProcessor blm = new BidiLayoutManager((LeafNodeLayoutManager) lm);
-                    blm.setFObj(this);
-                    list.add(blm);
-                } else {
-                    list.add(lm);
-                }
-            }
-        }
-    }
-
     private void setup() {
 
         // Common Aural Properties
@@ -129,35 +108,8 @@ public class BidiOverride extends FObjMixed {
         return true;
     }
 
-    /**
-     * If this bidi has a different writing mode direction
-     * ltr or rtl than its parent writing mode then this
-     * reverses the inline areas (at the character level).
-     */
-    class BidiLayoutManager extends LeafNodeLayoutManager {
-
-        private List children;
-
-        BidiLayoutManager(LeafNodeLayoutManager cLM) {
-            children = new ArrayList();
-/*            for (int count = cLM.size() - 1; count >= 0; count--) {
-                InlineArea ia = cLM.get(count);
-                if (ia instanceof Word) {
-                    // reverse word
-                    Word word = (Word) ia;
-                    StringBuffer sb = new StringBuffer(word.getWord());
-                    word.setWord(sb.reverse().toString());
-                }
-                children.add(ia);
-            }
-*/        }
-
-        public int size() {
-            return children.size();
-        }
-
-        public InlineArea get(int index) {
-            return (InlineArea) children.get(index);
-        }
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
     }
+
 }
index ad7872dcb4a4ee27b96965c4186f3b1bbd718d44..7019889e6f1f605aec4331b8f1e66cd83dc767a5 100644 (file)
@@ -65,6 +65,7 @@ import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.FObjMixed;
 import org.apache.fop.fo.RecursiveCharIterator;
 import org.apache.fop.fo.TextInfo;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.Constants;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
@@ -243,18 +244,6 @@ public class Block extends FObjMixed {
         return this.span;
     }
 
-    /**
-     * @see org.apache.fop.fo.FObj#addLayoutManager
-     */
-    public void addLayoutManager(List list) {
-        BlockLayoutManager blm = new BlockLayoutManager();
-        blm.setUserAgent(getUserAgent());
-        blm.setFObj(this);
-        TextInfo ti = propMgr.getTextLayoutProps(fontInfo);
-        blm.setBlockTextInfo(ti);
-        list.add(blm);
-    }
-
     /**
      * @return false (Block cannot generate inline areas)
      */
@@ -408,5 +397,9 @@ public class Block extends FObjMixed {
             bNextIsLF = false;
         }
     }
-}
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
+}
index e67142f4632de3d2700cbf847021b42f02785187..4b2a83639ff1810a47fbbf4bb3efa1bacaec7d93 100644 (file)
@@ -55,6 +55,7 @@ import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.ColorType;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.CommonAbsolutePosition;
 import org.apache.fop.fo.properties.CommonBackground;
 import org.apache.fop.fo.properties.CommonBorderAndPadding;
@@ -99,17 +100,6 @@ public class BlockContainer extends FObj {
         setupID();
     }
 
-    /**
-     * @see org.apache.fop.fo.FObj#addLayoutManager
-     */
-    public void addLayoutManager(List list) {
-        BlockContainerLayoutManager blm = new BlockContainerLayoutManager();
-        blm.setUserAgent(getUserAgent());
-        blm.setFObj(this);
-        blm.setOverflow(properties.get("overflow").getEnum());
-        list.add(blm);
-    }
-
     private void setup() {
 
             // Common Accessibility Properties
@@ -175,5 +165,9 @@ public class BlockContainer extends FObj {
         return this.span;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 147c9823f03738474a92d058a514a75a51590fe8..02bf291e14437ae4ca6289400942eac2ef92220f 100644 (file)
@@ -58,6 +58,7 @@ import org.apache.fop.fo.CharIterator;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.OneCharIterator;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.CommonAural;
 import org.apache.fop.fo.properties.CommonBorderAndPadding;
 import org.apache.fop.fo.properties.CommonBackground;
@@ -97,21 +98,7 @@ public class Character extends FObj {
         super(parent);
     }
 
-    /**
-     * @see org.apache.fop.fo.FObj#addLayoutManager
-     */
-    public void addLayoutManager(List list) {
-        InlineArea inline = getInlineArea();
-        if (inline != null) {
-            LeafNodeLayoutManager lm = new LeafNodeLayoutManager();
-            lm.setUserAgent(getUserAgent());
-            lm.setFObj(this);
-            lm.setCurrentArea(inline);
-            list.add(lm);
-        }
-    }
-
-    protected InlineArea getInlineArea() {
+    public InlineArea getInlineArea() {
         String str = this.properties.get("character").getString();
         if (str.length() == 1) {
             org.apache.fop.area.inline.Character ch =
@@ -177,5 +164,8 @@ public class Character extends FObj {
         // But what it the character is ignored due to white space handling?
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
 
 }
index 699388e3623c418ab07a8de439acefa5428cbd8b..668fc794e84349c4708669e6fe29d815f46f4482 100644 (file)
@@ -53,6 +53,7 @@ package org.apache.fop.fo.flow;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.CommonBorderAndPadding;
 import org.apache.fop.fo.properties.CommonBackground;
 import org.apache.fop.fo.properties.TextAlign;
@@ -100,34 +101,13 @@ public class ExternalGraphic extends FObj {
         super(parent);
     }
 
-    /**
-     * Add the layout manager for this to the list.
-     * This adds a leafnode layout manager that deals with the
-     * created viewport/image area.
-     *
-     * @param list the list to add the layout manager to
-     */
-    public void addLayoutManager(List list) {
-        InlineArea area = getInlineArea();
-        if (area != null) {
-            setupID();
-            LeafNodeLayoutManager lm = new LeafNodeLayoutManager();
-            lm.setUserAgent(getUserAgent());
-            lm.setFObj(this);
-            lm.setCurrentArea(area);
-            lm.setAlignment(properties.get("vertical-align").getEnum());
-            lm.setLead(viewHeight);
-            list.add(lm);
-        }
-    }
-
     /**
      * Get the inline area for this external grpahic.
      * This creates the image area and puts it inside a viewport.
      *
      * @return the viewport containing the image area
      */
-    protected InlineArea getInlineArea() {
+    public InlineArea getInlineArea() {
         setup();
         if (url == null) {
             return null;
@@ -290,5 +270,13 @@ public class ExternalGraphic extends FObj {
         placement = new Rectangle2D.Float(xoffset, yoffset, cwidth, cheight);
     }
 
+    public int getViewHeight() {
+        return viewHeight;
+    }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 35d2d5bf4f184a630e4e06b6bb5be295995ece51..0087b78e7aeb92a23b4427b3ba75f5a2d4f19756 100644 (file)
@@ -53,6 +53,7 @@ package org.apache.fop.fo.flow;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.ToBeImplementedElement;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * fo:float element.
@@ -73,4 +74,9 @@ public class Float extends ToBeImplementedElement {
         // this.properties.get("clear");
 
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index cfe8bd7fb5ac31e2165b8c1a00b47beb2a983f31..494e927a8d516e5130429f0358eead766268f777 100644 (file)
@@ -56,6 +56,7 @@ import java.util.List;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * Class modelling the fo:footnote object. See Sec. 6.10.3 of the XSL-FO
@@ -73,18 +74,6 @@ public class Footnote extends FObj {
         super(parent);
     }
 
-    /**
-     * @see org.apache.fop.fo.FObj#addLayoutManager
-     */
-    public void addLayoutManager(List lms) {
-        // add inlines layout manager
-        if (inlineFO == null) {
-            getLogger().error("inline required in footnote");
-            return;
-        }
-        inlineFO.addLayoutManager(lms);
-    }
-
     /**
      * @param child child FONode to be added to this object
      */
@@ -98,5 +87,18 @@ public class Footnote extends FObj {
             getLogger().error("invalid child of footnote: " + name);
         }
     }
+
+    /**
+     * Public accessor for inline FO
+     * @return the Inline object stored as inline FO
+     */
+    public Inline getInlineFO() {
+        return inlineFO;
+    }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index a768cafbda4039078fc697d2e0cb1a2ee7c31ed3..6d7acd3598a9df3cfe03b2fc01f0fe74f457a788 100644 (file)
@@ -53,6 +53,7 @@ package org.apache.fop.fo.flow;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * Class modelling the fo:footnote-body object. See Sec. 6.10.4 of the XSL-FO
@@ -74,4 +75,8 @@ public class FootnoteBody extends FObj {
         super(parent);
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 2f44e2b5f6854b9f7194064b23fa68432a863f4f..46892e91b7ac9b4b50cd61a8f366eb434ca134ff 100644 (file)
@@ -52,6 +52,7 @@ package org.apache.fop.fo.flow;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.ToBeImplementedElement;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
@@ -102,4 +103,9 @@ public class InitialPropertySet extends ToBeImplementedElement {
         // this.properties.get("word-spacing");
 
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 00f521d14652c0ba94c036ee3c4b2aa7eb8eb730..c8e9517bc011e8f6d040f14e97db74b75d607993 100644 (file)
@@ -58,6 +58,7 @@ import org.apache.fop.fo.CharIterator;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObjMixed;
 import org.apache.fop.fo.InlineCharIterator;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.TextDecoration;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
@@ -161,4 +162,8 @@ public class Inline extends FObjMixed {
         return new InlineCharIterator(this, propMgr.getBorderAndPadding());
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index a6938932f1653ae64591818ad01f98fa8528f5d3..8ee72fd6137c17e7b8c8d9c652889f19bd269252 100644 (file)
@@ -60,6 +60,7 @@ import org.xml.sax.Attributes;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.properties.CommonBackground;
 import org.apache.fop.fo.properties.CommonBorderAndPadding;
@@ -82,18 +83,6 @@ public class InlineContainer extends FObj {
         super(parent);
     }
 
-    /**
-     * @see org.apache.fop.fo.FObj#addLayoutManager
-     */
-    public void addLayoutManager(List lms) {
-        ArrayList childList = new ArrayList();
-        super.addLayoutManager(childList);
-        LayoutManager lm = new ICLayoutManager(childList);
-        lm.setUserAgent(getUserAgent());
-        lm.setFObj(this);
-        lms.add(lm);
-    }
-
     /**
      * @see org.apache.fop.fo.FObj#handleAttrs
      */
@@ -138,21 +127,8 @@ public class InlineContainer extends FObj {
         return true;
     }
 
-    /**
-     * This creates a single inline container area after
-     * laying out the child block areas. All footnotes, floats
-     * and id areas are maintained for later retrieval.
-     */
-    class ICLayoutManager extends LeafNodeLayoutManager {
-
-        private List childrenLM;
-
-        ICLayoutManager(List childLM) {
-            childrenLM = childLM;
-        }
-
-        public InlineArea get(int index) {
-            return null;
-        }
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
     }
+
 }
index 62a9b5c4ad99b3c3b88f5bd53ab95610a20767b1..e04c1abdc915da7056141a92bef66d2defebff8b 100644 (file)
@@ -60,6 +60,7 @@ import org.apache.fop.area.inline.Viewport;
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.XMLObj;
 import org.apache.fop.fo.properties.DisplayAlign;
 import org.apache.fop.fo.properties.Overflow;
@@ -75,7 +76,7 @@ import org.w3c.dom.Document;
  */
 public class InstreamForeignObject extends FObj {
 
-    private Viewport areaCurrent;
+    public Viewport areaCurrent;
 
     /**
      * constructs an instream-foreign-object object (called by Maker).
@@ -86,29 +87,12 @@ public class InstreamForeignObject extends FObj {
         super(parent);
     }
 
-    /**
-     * Add the layout manager for this into the list.
-     * @see org.apache.fop.fo.FObj#addLayoutManager(List)
-     */
-    public void addLayoutManager(List list) {
-        areaCurrent = getInlineArea();
-        if (areaCurrent != null) {
-            LeafNodeLayoutManager lm = new LeafNodeLayoutManager();
-            lm.setUserAgent(getUserAgent());
-            lm.setFObj(this);
-            lm.setCurrentArea(areaCurrent);
-            lm.setAlignment(properties.get("vertical-align").getEnum());
-            lm.setLead(areaCurrent.getHeight());
-            list.add(lm);
-        }
-    }
-
     /**
      * Get the inline area created by this element.
      *
      * @return the viewport inline area
      */
-    protected Viewport getInlineArea() {
+    public Viewport getInlineArea() {
         if (children == null) {
             return areaCurrent;
         }
@@ -372,4 +356,9 @@ public class InstreamForeignObject extends FObj {
             this.scaling = this.properties.get("scaling").getEnum();
 
 */
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 9f59b44e8167aebdbd973a84cec6b7d5e1a6b5e0..a7e7de293a7cb83c7498c2f7d2f604c4e11ad8f5 100644 (file)
@@ -65,6 +65,7 @@ import org.apache.fop.datatypes.PercentLength;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObjMixed;
 import org.apache.fop.fo.FOInputHandler;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.LeaderPattern;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
@@ -97,7 +98,7 @@ public class Leader extends FObjMixed {
     protected Document fontInfo = null;
     /** FontState for this object */
     protected Font fontState;
-    protected InlineArea leaderArea = null;
+    public InlineArea leaderArea = null;
 
     /**
      * @param parent FONode that is the parent of this object
@@ -106,111 +107,6 @@ public class Leader extends FObjMixed {
         super(parent);
     }
 
-    /**
-     *
-     * @param list the list to which the layout manager(s) should be added
-     */
-    public void addLayoutManager(List list) {
-        LeafNodeLayoutManager lm = new LeafNodeLayoutManager() {
-                public InlineArea get(LayoutContext context) {
-                    return getInlineArea();
-                }
-
-                protected MinOptMax getAllocationIPD(int refIPD) {
-                   return getAllocIPD(refIPD);
-                }
-
-                /*protected void offsetArea(LayoutContext context) {
-                    if(leaderPattern == LeaderPattern.DOTS) {
-                        curArea.setOffset(context.getBaseline());
-                    }
-                }*/
-            };
-        lm.setUserAgent(getUserAgent());
-        lm.setFObj(this);
-        lm.setAlignment(properties.get("leader-alignment").getEnum());
-        list.add(lm);
-    }
-
-    protected InlineArea getInlineArea() {
-        if (leaderArea == null) {
-            createLeaderArea();
-        }
-        return leaderArea;
-    }
-
-    protected void createLeaderArea() {
-        setup();
-
-        if (leaderPattern == LeaderPattern.RULE) {
-            org.apache.fop.area.inline.Leader leader = new org.apache.fop.area.inline.Leader();
-
-            leader.setRuleStyle(ruleStyle);
-            leader.setRuleThickness(ruleThickness);
-
-            leaderArea = leader;
-        } else if (leaderPattern == LeaderPattern.SPACE) {
-            leaderArea = new Space();
-        } else if (leaderPattern == LeaderPattern.DOTS) {
-            Word w = new Word();
-            char dot = '.'; // userAgent.getLeaderDotCharacter();
-
-            w.setWord("" + dot);
-            w.addTrait(Trait.FONT_NAME, fontState.getFontName());
-            w.addTrait(Trait.FONT_SIZE,
-                             new Integer(fontState.getFontSize()));
-            // set offset of dot within inline parent
-            w.setOffset(fontState.getAscender());
-            int width = CharUtilities.getCharWidth(dot, fontState);
-            Space spacer = null;
-            if (patternWidth > width) {
-                spacer = new Space();
-                spacer.setWidth(patternWidth - width);
-                width = patternWidth;
-            }
-            FilledArea fa = new FilledArea();
-            fa.setUnitWidth(width);
-            fa.addChild(w);
-            if (spacer != null) {
-                fa.addChild(spacer);
-            }
-            fa.setHeight(fontState.getAscender());
-
-            leaderArea = fa;
-        } else if (leaderPattern == LeaderPattern.USECONTENT) {
-            if (children == null) {
-                getLogger().error("Leader use-content with no content");
-                return;
-            }
-            InlineStackingLayoutManager lm;
-            lm = new InlineStackingLayoutManager();
-            lm.setUserAgent(getUserAgent());
-            lm.setFObj(this);
-            lm.setLMiter(new LMiter(children.listIterator()));
-            lm.init();
-
-            // get breaks then add areas to FilledArea
-            FilledArea fa = new FilledArea();
-
-            ContentLayoutManager clm = new ContentLayoutManager(fa);
-            clm.setUserAgent(getUserAgent());
-            lm.setParent(clm);
-
-            clm.fillArea(lm);
-            int width = clm.getStackingSize();
-            Space spacer = null;
-            if (patternWidth > width) {
-                spacer = new Space();
-                spacer.setWidth(patternWidth - width);
-                width = patternWidth;
-            }
-            fa.setUnitWidth(width);
-            if (spacer != null) {
-                fa.addChild(spacer);
-            }
-            leaderArea = fa;
-        }
-    }
 
     /**
      * @param foih FOInputHandler to set
@@ -220,7 +116,7 @@ public class Leader extends FObjMixed {
         fontInfo = foih.getFontInfo();
     }
 
-    private void setup() {
+    public void setup() {
 
         // Common Accessibility Properties
         CommonAccessibility mAccProps = propMgr.getAccessibilityProps();
@@ -297,7 +193,7 @@ public class Leader extends FObjMixed {
 
     }
 
-    protected MinOptMax getAllocIPD(int ipd) {
+    public MinOptMax getAllocIPD(int ipd) {
         // length of the leader
         int opt = getLength("leader-length.optimum", ipd);
         int min = getLength("leader-length.minimum", ipd);
@@ -317,5 +213,28 @@ public class Leader extends FObjMixed {
         }
         return length;
     }
-}
 
+    public int getRuleStyle() {
+        return ruleStyle;
+    }
+
+    public int getRuleThickness() {
+        return ruleThickness;
+    }
+
+    public int getLeaderPattern() {
+        return leaderPattern;
+    }
+
+    public Font getFontState() {
+        return fontState;
+    }
+
+    public int getPatternWidth() {
+        return patternWidth;
+    }
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
+}
index 1f0bf77fb7ebc61a103b885343cd8bd3019e2f0c..c33b1ae88fcedf3915dc3fd315b8a9176fc2a108 100644 (file)
@@ -58,6 +58,7 @@ import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.ColorType;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
 import org.apache.fop.fo.properties.CommonBackground;
@@ -91,17 +92,6 @@ public class ListBlock extends FObj {
         super(parent);
     }
 
-    /**
-     *
-     * @param list the list to which the layout manager(s) should be added
-     */
-    public void addLayoutManager(List list) {
-        ListBlockLayoutManager blm = new ListBlockLayoutManager();
-        blm.setUserAgent(getUserAgent());
-        blm.setFObj(this);
-        list.add(blm);
-    }
-
     private void setup() throws FOPException {
 
             // Common Accessibility Properties
@@ -161,5 +151,9 @@ public class ListBlock extends FObj {
         return true;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 2779fb178a90e73bbcede5ff87c3067b91e9ba28..d059f86c76e122be071af3e121e84752272eca50 100644 (file)
@@ -56,6 +56,7 @@ import java.util.List;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
 import org.apache.fop.fo.properties.CommonBackground;
@@ -90,22 +91,6 @@ public class ListItem extends FObj {
         super(parent);
     }
 
-    /**
-     * @param list the list to which the layout manager(s) should be added
-     */
-    public void addLayoutManager(List list) {
-        if (label != null && body != null) {
-            ListItemLayoutManager blm = new ListItemLayoutManager();
-            blm.setUserAgent(getUserAgent());
-            blm.setFObj(this);
-            blm.setLabel(label.getItemLayoutManager());
-            blm.setBody(body.getItemLayoutManager());
-            list.add(blm);
-        } else {
-            getLogger().error("list-item requires list-item-label and list-item-body");
-        }
-    }
-
     private void setup() {
 
         // Common Accessibility Properties
@@ -173,5 +158,17 @@ public class ListItem extends FObj {
         return true;
     }
 
+    public ListItemLabel getLabel() {
+        return label;
+    }
+
+    public ListItemBody getBody() {
+        return body;
+    }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index bd62a7e9290a88172e3815717c5923824243ae21..29998730a3af08f5d20b7d4db67f2af94987516e 100644 (file)
@@ -53,6 +53,7 @@ package org.apache.fop.fo.flow;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.layoutmgr.list.Item;
 
@@ -103,5 +104,9 @@ public class ListItemBody extends FObj {
         return true;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 9596f5055de8fc437745c1c4bfaac53078a95784..e3bfb1cfa656111f80c2effff3d05cb84fdf38b5 100644 (file)
@@ -53,6 +53,7 @@ package org.apache.fop.fo.flow;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.layoutmgr.list.Item;
 
@@ -103,5 +104,9 @@ public class ListItemLabel extends FObj {
         return true;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 06405e792effb86f0a1c6610bfbf0c62c1bc6ae8..253491d696a4319c86f4b6690e11210d378db889 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.flow;
 
 // XML
@@ -57,6 +57,7 @@ import org.xml.sax.Attributes;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObjMixed;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * Marker formatting object.
@@ -107,5 +108,8 @@ public class Marker extends FObjMixed {
         return markerClassName;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
 
 }
index f3151b0cce79e3a2944e1b61beb1b6ca9394704e..ee415953ba46ea9b3388c830a30cef002a03972d 100644 (file)
@@ -52,6 +52,7 @@ package org.apache.fop.fo.flow;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.ToBeImplementedElement;
 import org.apache.fop.fo.properties.CommonAccessibility;
 
@@ -79,4 +80,9 @@ public class MultiCase extends ToBeImplementedElement {
         // this.properties.get("case-title");
 
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 76e3fd959b7f6d77899583905578ded527d048d4..dcb9666eed866e55bdb4fdccc70175a872df80ea 100644 (file)
@@ -52,6 +52,7 @@ package org.apache.fop.fo.flow;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.ToBeImplementedElement;
 import org.apache.fop.fo.properties.CommonAccessibility;
 
@@ -76,4 +77,9 @@ public class MultiProperties extends ToBeImplementedElement {
         setupID();
 
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 84797508cdb12d1942dd1e942d7963666a9c25c4..0c08a64f973697c8db845af14951a1fd74707583 100644 (file)
@@ -52,6 +52,7 @@ package org.apache.fop.fo.flow;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.ToBeImplementedElement;
 
 /**
@@ -73,4 +74,9 @@ public class MultiPropertySet extends ToBeImplementedElement {
         // this.properties.get("active-state");
 
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 5ae8cc335fdf033444ac8c4341005fe1dc0a11b2..18a8714dbdd86a80facb4d4da9fb3c0d05d0e906 100644 (file)
@@ -52,6 +52,7 @@ package org.apache.fop.fo.flow;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.ToBeImplementedElement;
 import org.apache.fop.fo.properties.CommonAccessibility;
 
@@ -77,4 +78,9 @@ public class MultiSwitch extends ToBeImplementedElement {
         setupID();
 
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index d088f6591a8675aa78a5cbca595df796efad8bb8..942c3642ed3480084621dbef2a1c088c6d39b4f2 100644 (file)
@@ -52,6 +52,7 @@ package org.apache.fop.fo.flow;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.ToBeImplementedElement;
 import org.apache.fop.fo.properties.CommonAccessibility;
 
@@ -77,4 +78,9 @@ public class MultiToggle extends ToBeImplementedElement {
         // this.properties.get("switch-to");
 
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 8f9fd7d8fe778d67a210a1876df1fb774bdb9da7..9fd6cee922ea076725c839b6463e422379bfab01 100644 (file)
@@ -54,6 +54,7 @@ package org.apache.fop.fo.flow;
 import java.util.List;
 
 // FOP
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
 import org.apache.fop.fo.properties.CommonBackground;
@@ -107,47 +108,7 @@ public class PageNumber extends FObj {
         fontInfo = foih.getFontInfo();
     }
 
-    /**
-     * Overridden from FObj
-     * @param lms the list to which the layout manager(s) should be added
-     */
-    public void addLayoutManager(List lms) {
-        setup();
-        LayoutManager lm;
-        lm = new LeafNodeLayoutManager() {
-                    public InlineArea get(LayoutContext context) {
-                        // get page string from parent, build area
-                        Word inline = new Word();
-                        String str = parentLM.getCurrentPageNumber();
-                        int width = 0;
-                    for (int count = 0; count < str.length(); count++) {
-                            width += CharUtilities.getCharWidth(
-                                       str.charAt(count), fontState);
-                        }
-                        inline.setWord(str);
-                        inline.setIPD(width);
-                        inline.setHeight(fontState.getAscender()
-                                         - fontState.getDescender());
-                        inline.setOffset(fontState.getAscender());
-
-                        inline.addTrait(Trait.FONT_NAME,
-                                        fontState.getFontName());
-                        inline.addTrait(Trait.FONT_SIZE,
-                                        new Integer(fontState.getFontSize()));
-
-                        return inline;
-                    }
-
-                    protected void offsetArea(LayoutContext context) {
-                        curArea.setOffset(context.getBaseline());
-                    }
-                };
-        lm.setUserAgent(getUserAgent());
-        lm.setFObj(this);
-        lms.add(lm);
-    }
-
-    private void setup() {
+    public void setup() {
 
         // Common Accessibility Properties
         CommonAccessibility mAccProps = propMgr.getAccessibilityProps();
@@ -195,4 +156,12 @@ public class PageNumber extends FObj {
 
     }
 
+    public Font getFontState() {
+        return fontState;
+    }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index a83665d9d06cc4713b5d237f4208088fdaa8fbcf..dfb4631cf764c68a72617c10239915470dda0e86 100644 (file)
@@ -61,6 +61,7 @@ import org.apache.fop.area.inline.InlineArea;
 import org.apache.fop.area.inline.UnresolvedPageNumber;
 import org.apache.fop.area.inline.Word;
 import org.apache.fop.datatypes.ColorType;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.FOInputHandler;
@@ -118,39 +119,9 @@ public class PageNumberCitation extends FObj {
         fontInfo = foih.getFontInfo();
     }
 
-    /**
-     * Overridden from FObj
-     * @param lms the list to which the layout manager(s) should be added
-     */
-    public void addLayoutManager(List lms) {
-        setup();
-        LayoutManager lm;
-        lm = new LeafNodeLayoutManager() {
-                    public InlineArea get(LayoutContext context) {
-                        return getInlineArea(parentLM);
-                    }
-
-                    public void addAreas(PositionIterator posIter,
-                                         LayoutContext context) {
-                        super.addAreas(posIter, context);
-                        if (unresolved) {
-                            parentLM.addUnresolvedArea(refId,
-                                                       (Resolveable) inline);
-                        }
-                    }
-
-                    protected void offsetArea(LayoutContext context) {
-                        curArea.setOffset(context.getBaseline());
-                    }
-                };
-        lm.setUserAgent(getUserAgent());
-        lm.setFObj(this);
-        lms.add(lm);
-    }
-
     // if id can be resolved then simply return a word, otherwise
     // return a resolveable area
-    private InlineArea getInlineArea(LayoutProcessor parentLM) {
+    public InlineArea getInlineArea(LayoutProcessor parentLM) {
         if (refId.equals("")) {
             getLogger().error("page-number-citation must contain \"ref-id\"");
             return null;
@@ -202,7 +173,7 @@ public class PageNumberCitation extends FObj {
         return width;
     }
 
-    private void setup() {
+    public void setup() {
 
         // Common Accessibility Properties
         CommonAccessibility mAccProps = propMgr.getAccessibilityProps();
@@ -255,5 +226,20 @@ public class PageNumberCitation extends FObj {
 
     }
 
-}
+    public String getRefId() {
+        return refId;
+    }
 
+    public InlineArea getInline() {
+        return inline;
+    }
+
+    public boolean getUnresolved() {
+        return unresolved;
+    }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
+}
index 3abc308d53fd215977ab21bec471b1dedc89c381..5a3c65d5f3a0e7f27e4b65764b906eee1eabba30 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.flow;
 
 // FOP
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObjMixed;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.layoutmgr.RetrieveMarkerLayoutManager;
 import org.xml.sax.Attributes;
 
@@ -94,16 +95,20 @@ public class RetrieveMarker extends FObjMixed {
             this.properties.get("retrieve-boundary").getEnum();
     }
 
-    /**
-     * @see org.apache.fop.fo.FObj#addLayoutManager(List)
-     */
-    public void addLayoutManager(List lms) {
-        RetrieveMarkerLayoutManager rmlm;
-        rmlm = new RetrieveMarkerLayoutManager(retrieveClassName,
-                                                retrievePosition,
-                                                retrieveBoundary);
-        rmlm.setUserAgent(getUserAgent());
-        rmlm.setFObj(this);
-        lms.add(rmlm);
+    public String getRetrieveClassName() {
+        return retrieveClassName;
+    }
+
+    public int getRetrievePosition() {
+        return retrievePosition;
     }
+
+    public int getRetrieveBoundary() {
+        return retrieveBoundary;
+    }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 5e2797bac51bcc568ac81a2f5a1972a2a85bd4fb..d1a658504a59c4e1706a8f7729b4b71ed8b30a92 100644 (file)
@@ -59,6 +59,7 @@ import org.apache.fop.datatypes.ColorType;
 import org.apache.fop.datatypes.LengthRange;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.TableLayout;
 import org.apache.fop.fo.properties.TableOmitFooterAtBreak;
 import org.apache.fop.fo.properties.TableOmitHeaderAtBreak;
@@ -127,25 +128,6 @@ public class Table extends FObj {
         }
     }
 
-    /**
-     * Return a LayoutManager responsible for laying out this FObj's content.
-     * Must override in subclasses if their content can be laid out.
-     * @param list the list to which the layout manager(s) should be added
-     */
-    public void addLayoutManager(List list) {
-        TableLayoutManager tlm = new TableLayoutManager();
-        tlm.setUserAgent(getUserAgent());
-        tlm.setFObj(this);
-        tlm.setColumns(columns);
-        if (tableHeader != null) {
-            tlm.setTableHeader(tableHeader.getLayoutManager());
-        }
-        if (tableFooter != null) {
-            tlm.setTableFooter(tableFooter.getLayoutManager());
-        }
-        list.add(tlm);
-    }
-
     private void setup() {
         // Common Accessibility Properties
         CommonAccessibility mAccProps = propMgr.getAccessibilityProps();
@@ -222,5 +204,21 @@ public class Table extends FObj {
         return true;
     }
 
+    public ArrayList getColumns() {
+        return columns;
+    }
+
+    public TableBody getTableHeader() {
+        return tableHeader;
+    }
+
+    public TableBody getTableFooter() {
+        return tableFooter;
+    }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index eda3afa316ec87a72f6d09440c1b01467884a896..b94ca9a1b1a6db02130005e98e52fabc6531c96a 100644 (file)
@@ -52,6 +52,7 @@ package org.apache.fop.fo.flow;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.ToBeImplementedElement;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
@@ -113,5 +114,9 @@ public class TableAndCaption extends ToBeImplementedElement {
         return true;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index fc364cb8aaf8adb9af6076b0d72adfc8a4afb3ed..af9d0a379e0d5be87f1a075f60d2e6ed3bbb8bea 100644 (file)
@@ -58,6 +58,7 @@ import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.ColorType;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
@@ -83,22 +84,6 @@ public class TableBody extends FObj {
         super(parent);
     }
 
-    /**
-     * Return a LayoutManager responsible for laying out this FObj's content.
-     * Must override in subclasses if their content can be laid out.
-     * @param list the list to which the layout manager(s) should be added
-     */
-    public void addLayoutManager(List list) {
-        list.add(getLayoutManager());
-    }
-
-    public Body getLayoutManager() {
-        Body blm = new Body();
-        blm.setUserAgent(getUserAgent());
-        blm.setFObj(this);
-        return blm;
-    }
-
     private void setup() throws FOPException {
         // Common Accessibility Properties
         CommonAccessibility mAccProps = propMgr.getAccessibilityProps();
@@ -132,5 +117,9 @@ public class TableBody extends FObj {
         return true;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 8d4d00bcce44e4f2397294f007b15e73dd0ee30a..105202c65d242051af308579cc616b5ddc920b53 100644 (file)
@@ -52,6 +52,7 @@ package org.apache.fop.fo.flow;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.ToBeImplementedElement;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
@@ -106,5 +107,9 @@ public class TableCaption extends ToBeImplementedElement {
         return true;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index aa15a98076b6b63434b50842a93f59e1fefdcf83..df32f212a0752751e26a8492e59e4c418a50c474 100644 (file)
@@ -61,6 +61,7 @@ import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.ColorType;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.BorderCollapse;
 import org.apache.fop.fo.properties.DisplayAlign;
 
@@ -164,16 +165,6 @@ public class TableCell extends FObj {
         doSetup();    // init some basic property values
     }
 
-    /**
-     * @param list the list to which the layout manager(s) should be added
-     */
-    public void addLayoutManager(List list) {
-        Cell clm = new Cell();
-        clm.setUserAgent(getUserAgent());
-        clm.setFObj(this);
-        list.add(clm);
-    }
-
     /**
      * Set position relative to table (set by body?)
      */
@@ -389,5 +380,8 @@ public class TableCell extends FObj {
         return true;
     }
 
-}
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
 
+}
index 3236912a5feedb27d248ff0386c8f0fe05a337e4..39d5734419270f3a60cfc279a22e477cec315a3c 100644 (file)
@@ -55,6 +55,7 @@ import org.apache.fop.datatypes.ColorType;
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.Property;
 
 import org.apache.fop.fo.properties.CommonBackground;
@@ -167,5 +168,9 @@ public class TableColumn extends FObj {
         setup = true;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 7761e33e8c3b787caffe806aed4cb1f2b0d3ea64..0d50766997a082d1d0c25d7fe81bc9e3dff97361 100644 (file)
@@ -52,6 +52,7 @@ package org.apache.fop.fo.flow;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * Class modelling the fo:table-footer object. See Sec. 6.7.7 of the XSL-FO
@@ -66,4 +67,8 @@ public class TableFooter extends TableBody {
         super(parent);
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 91d8c149abe417671ffa57cc583f57e61848dccc..28345e8d631e1acff160cf1de96394fcb6885216 100644 (file)
@@ -52,6 +52,7 @@ package org.apache.fop.fo.flow;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * Class modelling the fo:table-header object. See Sec. 6.7.6 of the XSL-FO
@@ -66,4 +67,8 @@ public class TableHeader extends TableBody {
         super(parent);
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 42ee9c2e97406abca281b61ba94c8374f6ed8b65..f8c9fc0d83f1af962de1609f9c19e727618231a8 100644 (file)
@@ -59,6 +59,7 @@ import org.apache.fop.datatypes.KeepValue;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.Property;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.Constants;
 
 import org.apache.fop.fo.properties.CommonAccessibility;
@@ -92,16 +93,6 @@ public class TableRow extends FObj {
         super(parent);
     }
 
-    /**
-     * @param list the list to which the layout manager(s) should be added
-     */
-    public void addLayoutManager(List list) {
-        Row rlm = new Row();
-        rlm.setUserAgent(getUserAgent());
-        rlm.setFObj(this);
-        list.add(rlm);
-    }
-
     /**
      * @return keepWithPrevious
      */
@@ -164,5 +155,10 @@ public class TableRow extends FObj {
             return new KeepValue(KeepValue.KEEP_WITH_AUTO, 0);
         }
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index a3bd5d75fe8805f3ce82411050ce52d90fc6604e..1d6d88902ecdb3b37133a00fd12b5040f93bf3d6 100644 (file)
@@ -53,6 +53,7 @@ package org.apache.fop.fo.flow;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObjMixed;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * Implementation for fo:wrapper formatting object.
@@ -78,5 +79,9 @@ public class Wrapper extends FObjMixed {
         return true;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 6bc2c6a774940bd1c667172171c935c44d57245e..c315f20b835b880c013a9a67451f9593fb591db3 100644 (file)
@@ -61,6 +61,7 @@ import java.io.InputStream;
 import org.apache.fop.datatypes.ColorType;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * The fo:color-profile formatting object.
@@ -129,4 +130,9 @@ public class ColorProfile extends FObj {
             getLogger().error("Color Profile src not an ICC Profile", iae);
         }
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index acc1f72fe3e253df3e301a0bc1c9f646cf3bd0ad..37db54438af8e0337f272ead07871a7dd1388c15 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // XML
@@ -56,6 +56,7 @@ import org.xml.sax.Attributes;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.BlankOrNotBlank;
 import org.apache.fop.fo.properties.OddOrEven;
 import org.apache.fop.fo.properties.PagePosition;
@@ -127,7 +128,7 @@ public class ConditionalPageMasterReference extends FObj {
      * @param isBlankPage True if page is blank
      * @return True if the conditions for this reference are met
      */
-    protected boolean isValid(boolean isOddPage, 
+    protected boolean isValid(boolean isOddPage,
                               boolean isFirstPage,
                               boolean isBlankPage) {
         // page-position
@@ -197,4 +198,8 @@ public class ConditionalPageMasterReference extends FObj {
         }
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 54ec1dea9697134c2a5c201a90e82583cac32e1b..397609f83f5cb4ea1e260002636662aea119c9eb 100644 (file)
@@ -58,6 +58,7 @@ import java.util.Iterator;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.XMLObj;
 
 
@@ -113,4 +114,9 @@ public class Declarations extends FObj {
         }
         children = null;
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 7ad6637a7f917045b7f36bd6900a86a0685ceb4d..3f5f5e798cc4cef39baaa9c7342bfa82c66162e1 100644 (file)
@@ -60,6 +60,7 @@ import org.xml.sax.Attributes;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.layoutmgr.FlowLayoutManager;
 
@@ -178,14 +179,7 @@ public class Flow extends FObj {
         return true;
     }
 
-    /**
-     * @see org.apache.fop.fo.FObj#addLayoutManager
-     */
-    public void addLayoutManager(List list) {
-        FlowLayoutManager lm = new FlowLayoutManager();
-        lm.setUserAgent(getUserAgent());
-        lm.setFObj(this);
-        list.add(lm);
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
     }
-
 }
index 980bf51eaf1d8c4161e6bc5f2fb449e78710c714..0c819b484057d73058ef34318f13492489d10119 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // Java
@@ -60,6 +60,7 @@ import org.xml.sax.Attributes;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.apps.FOPException;
 
 /**
@@ -72,7 +73,7 @@ import org.apache.fop.apps.FOPException;
  * information for a page sequence.
  */
 public class LayoutMasterSet extends FObj {
-    
+
     private Map simplePageMasters;
     private Map pageSequenceMasters;
 
@@ -138,7 +139,7 @@ public class LayoutMasterSet extends FObj {
      * @param pageSequenceMaster PageSequenceMaster instance
      * @throws FOPException if there's a problem with name uniqueness
      */
-    protected void addPageSequenceMaster(String masterName, 
+    protected void addPageSequenceMaster(String masterName,
                                         PageSequenceMaster pageSequenceMaster)
                 throws FOPException {
         // check against duplication of master-name
@@ -218,5 +219,10 @@ public class LayoutMasterSet extends FObj {
         }
         return false;
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index bb61e279d814ff74bb8de2c10c068124cb00c28b..30150b3fbe6639cb4f4e3f3cf9a3d0e05a9fb33d 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // SAX
@@ -57,6 +57,7 @@ import org.xml.sax.Attributes;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.apps.FOPException;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * Base PageMasterReference class. Provides implementation for handling the
@@ -117,4 +118,8 @@ public abstract class PageMasterReference extends FObj
         }
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 3014426c413b559746f04f9a1c13455650d8ca05..8ee2a86c51d71e34ed384893c300f8f4583c95b1 100644 (file)
@@ -53,6 +53,7 @@ package org.apache.fop.fo.pagination;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.layout.PageMaster;
 import org.apache.fop.area.AreaTree;
 import org.apache.fop.area.PageViewport;
@@ -821,5 +822,9 @@ public class PageSequence extends FObj {
         return titleFO;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 86624ef1fabc7d333a15c217f2d9246037f6065b..1d1cc004bf9d1cf4b6bd103707f484e27f00cac9 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // Java
@@ -59,6 +59,7 @@ import org.xml.sax.Attributes;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.apps.FOPException;
 
 /**
@@ -67,7 +68,7 @@ import org.apache.fop.apps.FOPException;
  * which are simple or complex references to page-masters.
  */
 public class PageSequenceMaster extends FObj {
-    
+
     private LayoutMasterSet layoutMasterSet;
     private List subSequenceSpecifiers;
     private SubSequenceSpecifier currentSubSequence;
@@ -80,7 +81,7 @@ public class PageSequenceMaster extends FObj {
     // references to page-masters. So the methods use the former
     // terminology ('sub-sequence-specifiers', or SSS),
     // but the actual FO's are MasterReferences.
-    
+
     /**
      * @see org.apache.fop.fo.FONode#FONode(FONode)
      */
@@ -196,5 +197,9 @@ public class PageSequenceMaster extends FObj {
         return pageMaster;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 76687718301eb528814f468d90fcb9d6f771c163..a75c793ae2e9c2ee982961f9ffa2ec089eb74575 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // Java
@@ -58,6 +58,7 @@ import java.awt.geom.Rectangle2D;
 import org.apache.fop.datatypes.FODimension;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.CommonBorderAndPadding;
 import org.apache.fop.fo.properties.CommonBackground;
 import org.apache.fop.apps.FOPException;
@@ -286,4 +287,9 @@ public abstract class Region extends FObj {
     public int getExtent() {
         return 0;
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 55003c139bdc44f0eea6489349c5b1ceedd27b3e..133e14e89d2636937add6df3e60fd5027ab95937 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // Java
@@ -55,6 +55,7 @@ import java.awt.Rectangle;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.WritingMode;
 import org.apache.fop.datatypes.FODimension;
 import org.apache.fop.area.RegionReference;
@@ -108,5 +109,10 @@ public class RegionAfter extends RegionBA {
     public String getRegionClass() {
         return Region.AFTER;
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 6023be995d69b9be0e6bfc277a32be16c2f5daea..891efa5948b52d4b4c702ab5e4c328c166ba9871 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // Java
@@ -57,6 +57,7 @@ import java.awt.Rectangle;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.properties.Precedence;
 import org.apache.fop.fo.properties.WritingMode;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * Abstract base class for fo:region-before and fo:region-after.
@@ -116,5 +117,10 @@ public abstract class RegionBA extends RegionBASE {
             }
         }
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 550f55e9e2586e9eaf7ddfcc2ae84bba78ea4c11..bd25148d6f9c9707c4d2c8cdff40d69b583cc81a 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * Base class for Before, After, Start and End regions (BASE).
@@ -82,5 +83,10 @@ public abstract class RegionBASE extends Region {
     public int getExtent() {
         return this.extent;
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 258cffb67f845ecc2e260a56bc6167bdc007686a..dae61c0f90db92fd599489d4f9ad69ffce69701e 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // FOP
 import org.apache.fop.datatypes.FODimension;
 import org.apache.fop.fo.properties.WritingMode;
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.area.RegionReference;
 
 // Java
@@ -113,5 +114,10 @@ public class RegionBefore extends RegionBA {
         }
         return vpRect;
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index f3c65ceb6a634bb5f1aec11d1d7984944b0deda8..6c56b964ecc162422f89b048ecae7e333f476157 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // Java
@@ -57,6 +57,7 @@ import java.awt.geom.Rectangle2D;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.PropertyList;
 import org.apache.fop.fo.Property;
 import org.apache.fop.fo.properties.Overflow;
@@ -103,7 +104,7 @@ public class RegionBody extends Region {
         } else {
             vpRect = new Rectangle(start, mProps.spaceBefore,
                     reldims.bpd - mProps.spaceBefore - mProps.spaceAfter,
-                    reldims.ipd - start 
+                    reldims.ipd - start
                         - getRelMargin(PropertyList.END, "end-indent"));
         }
         return vpRect;
@@ -115,7 +116,7 @@ public class RegionBody extends Region {
      */
     private int getRelMargin(int reldir, String sRelPropName) {
         FObj parent = (FObj) getParent();
-        String sPropName = "margin-" 
+        String sPropName = "margin-"
                 + parent.properties.wmRelToAbs(reldir);
         Property prop = properties.getExplicitBaseProp(sPropName);
         if (prop == null) {
@@ -170,4 +171,8 @@ public class RegionBody extends Region {
         return body;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index d7039e59c79c9b3363b4a1859e614596845bc01a..6034ec3c6227a6e51fda47575ec3a11f96fce85f 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // Java
@@ -55,6 +55,7 @@ import java.awt.Rectangle;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.WritingMode;
 import org.apache.fop.datatypes.FODimension;
 import org.apache.fop.area.RegionReference;
@@ -109,5 +110,10 @@ public class RegionEnd extends RegionSE {
     public int getRegionAreaClass() {
         return RegionReference.END;
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index b137a5d86f25b3829e14a64ea186b84f28882d61..98bdcc870a3f16fc0a5e05609327615bce3fa169 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // Java
@@ -55,6 +55,7 @@ import java.awt.Rectangle;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.WritingMode;
 
 /**
@@ -98,5 +99,10 @@ public abstract class RegionSE extends RegionBASE {
             }
         }
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 665e522c83b3ace84788a7aad2d167065d7706c6..a8cf4d89d217152c069aa0e3f762c9da7620e3be 100644 (file)
@@ -55,6 +55,7 @@ import java.awt.Rectangle;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.WritingMode;
 import org.apache.fop.datatypes.FODimension;
 import org.apache.fop.area.RegionReference;
@@ -108,5 +109,10 @@ public class RegionStart extends RegionSE {
     public int getRegionAreaClass() {
         return RegionReference.START;
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index e976590b5ed41abd5b1ff48f5885d0378cdd567a..51cee83f828adfc9347b3d42ecefa56cb65817e2 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // Java
@@ -59,6 +59,7 @@ import org.xml.sax.Attributes;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.apps.FOPException;
 
 /**
@@ -165,4 +166,8 @@ public class RepeatablePageMasterAlternatives extends FObj
         this.numberConsumed = 0;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 3dcc76728ce7189ab1469d5adaa011ed2541c4ca..ffe0ba7e6760ed31f0a58de211540b1cf6c164db 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // XML
@@ -55,6 +55,7 @@ import org.xml.sax.Attributes;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.apps.FOPException;
 
 /**
@@ -126,4 +127,8 @@ public class RepeatablePageMasterReference extends PageMasterReference
         this.numberConsumed = 0;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 2726372f16b5de520b2169d7ec43c79ecf6dfdef..75654ad764a6fe2962ccfa48c009074eba9d197a 100644 (file)
@@ -57,6 +57,7 @@ import java.util.List;
 import org.apache.fop.control.Document;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * The fo:root formatting object. Contains page masters, page-sequences.
@@ -161,4 +162,8 @@ public class Root extends FObj {
         return document;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index 6b3c520979cd300e646ecc3484e2ffd0a3d1a228..fcbb659c52fd9d7ca813b3cd0b8e258db7680b15 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 // Java
@@ -64,6 +64,7 @@ import org.apache.fop.area.CTM;
 import org.apache.fop.datatypes.FODimension;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.area.PageViewport;
 import org.apache.fop.area.Page;
 import org.apache.fop.area.RegionViewport;
@@ -216,7 +217,7 @@ public class SimplePageMaster extends FObj {
         if (child instanceof Region) {
             addRegion((Region)child);
         } else {
-            getLogger().error("SimplePageMaster cannot have child of type " 
+            getLogger().error("SimplePageMaster cannot have child of type "
                     + child.getName());
         }
     }
@@ -254,7 +255,7 @@ public class SimplePageMaster extends FObj {
     }
 
     /**
-     * Indicates if a region with a given name exists in this 
+     * Indicates if a region with a given name exists in this
      * simple-page-master.
      * @param regionName name of the region to lookup
      * @return True if a region with this name exists
@@ -269,5 +270,9 @@ public class SimplePageMaster extends FObj {
         }
         return false;
     }
-}
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
+}
index 2f10a102f985354ab22a7c6b32c3b788a24457aa..203a32ba80b83d94f53eb6253dfb93ed9c2d05e3 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fo.pagination;
 
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * A single-page-master-reference formatting object.
@@ -93,5 +94,10 @@ public class SinglePageMasterReference extends PageMasterReference
     public void reset() {
         this.state = FIRST;
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index d18d6d7983d2d8ed5a611d29dbab659b8f63765f..af5e59bf368ed3372c721da8c542a1c174bed49c 100644 (file)
@@ -52,6 +52,7 @@ package org.apache.fop.fo.pagination;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.layoutmgr.StaticContentLayoutManager;
 
@@ -100,4 +101,8 @@ public class StaticContent extends Flow {
         return lm;
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
index a4daf6138311bc50efc4ce73f5393de0e0ab23d9..917f30ac628d1e1702b5e3df8199215e4b10d4bf 100644 (file)
@@ -58,6 +58,7 @@ import org.apache.fop.fo.FObjMixed;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.LengthProperty;
 import org.apache.fop.fo.Property;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
 import org.apache.fop.fo.properties.CommonBackground;
@@ -140,5 +141,10 @@ public class Title extends FObjMixed {
         Length zIndex = this.properties.get("z-index").getLength();
 
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index f32c0d15116182ee4db40b48cc6c961e8717e77a..58a7cceb5ab2e1f7c664ebe70bcceb80dad978d0 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.fonts.type1;
 
 // Java
@@ -93,7 +93,7 @@ public class PFMFile extends AbstractLogEnabled {
     private int[] extentTable;
 
     private Map kerningTab = new java.util.HashMap();
-    
+
     /**
      * Parses a PFM file
      *
@@ -233,7 +233,7 @@ public class PFMFile extends AbstractLogEnabled {
             getLogger().warn("Size of extension block was expected to be "
                 + "52 bytes, but was " + size + " bytes.");
         }
-        inStream.skip(12); //Skip etmPointSize, etmOrientation, etmMasterHeight, 
+        inStream.skip(12); //Skip etmPointSize, etmOrientation, etmMasterHeight,
                            //etmMinScale, etmMaxScale, emtMasterUnits
         etmCapHeight = inStream.readShort();
         etmXHeight = inStream.readShort();
@@ -271,7 +271,7 @@ public class PFMFile extends AbstractLogEnabled {
      * Return the kerning table. The kerning table is a Map with
      * strings with glyphnames as keys, containing Maps as value.
      * The value map contains a glyph name string key and an Integer value
-     * 
+     *
      * @return A Map containing the kerning table
      */
     public Map getKerning() {
index 90a70926aba1929c52cf655fd867133532325edb..1d31cd300838d0bd8f96b0b98e35b594cc97ced9 100644 (file)
@@ -51,8 +51,6 @@
 
 package org.apache.fop.layout;
 
-import org.apache.fop.fo.FOTreeExternal;
-
 /**
  * Abstract class defining the highest-level information for a layout strategy.
  * Subclasses implement a layout strategy that converts an FO Tree into an
@@ -61,7 +59,6 @@ import org.apache.fop.fo.FOTreeExternal;
 public abstract class LayoutStrategy {
 
     private String name = "undefined";
-    private FOTreeExternal fote = null;
 
     /**
      * Returns the name of this LayoutStrategy.
@@ -71,14 +68,4 @@ public abstract class LayoutStrategy {
         return name;
     }
 
-    /**
-     *
-     * @return the FOTreeExternal object for this LayoutStrategy
-     */
-    public FOTreeExternal getFOTreeExternal() {
-        if (fote == null) {
-            fote = new FOTreeExternal();
-        }
-        return fote;
-    }
 }
diff --git a/src/java/org/apache/fop/layoutmgr/AddLMVisitor.java b/src/java/org/apache/fop/layoutmgr/AddLMVisitor.java
new file mode 100644 (file)
index 0000000..8afca74
--- /dev/null
@@ -0,0 +1,553 @@
+/*
+ * $Id$
+ * ============================================================================
+ *                    The Apache Software License, Version 1.1
+ * ============================================================================
+ *
+ * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if any, must
+ *    include the following acknowledgment: "This product includes software
+ *    developed by the Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself, if
+ *    and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ *    endorse or promote products derived from this software without prior
+ *    written permission. For written permission, please contact
+ *    apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache", nor may
+ *    "Apache" appear in their name, without prior written permission of the
+ *    Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ============================================================================
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <jtauber@jtauber.com>. For more information on the Apache
+ * Software Foundation, please see <http://www.apache.org/>.
+ */
+
+package org.apache.fop.layoutmgr;
+
+import org.apache.fop.area.LinkResolver;
+import org.apache.fop.area.PageViewport;
+import org.apache.fop.area.Resolveable;
+import org.apache.fop.area.Trait;
+import org.apache.fop.area.inline.InlineArea;
+import org.apache.fop.area.inline.InlineParent;
+import org.apache.fop.area.inline.FilledArea;
+import org.apache.fop.area.inline.Space;
+import org.apache.fop.area.inline.Word;
+
+import org.apache.fop.fo.FOTreeVisitor;
+import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FObjMixed;
+import org.apache.fop.fo.FOText;
+import org.apache.fop.fo.TextInfo;
+import org.apache.fop.fo.flow.BidiOverride;
+import org.apache.fop.fo.flow.Inline;
+import org.apache.fop.fo.flow.BasicLink;
+import org.apache.fop.fo.flow.Block;
+import org.apache.fop.fo.flow.Leader;
+import org.apache.fop.fo.flow.RetrieveMarker;
+import org.apache.fop.fo.flow.Character;
+import org.apache.fop.fo.flow.ExternalGraphic;
+import org.apache.fop.fo.flow.BlockContainer;
+import org.apache.fop.fo.flow.Footnote;
+import org.apache.fop.fo.flow.ListBlock;
+import org.apache.fop.fo.flow.InstreamForeignObject;
+import org.apache.fop.fo.flow.InlineContainer;
+import org.apache.fop.fo.flow.ListItem;
+import org.apache.fop.fo.flow.PageNumber;
+import org.apache.fop.fo.flow.PageNumberCitation;
+import org.apache.fop.fo.flow.Table;
+import org.apache.fop.fo.flow.TableBody;
+import org.apache.fop.fo.flow.TableCell;
+import org.apache.fop.fo.flow.TableRow;
+import org.apache.fop.fo.pagination.Flow;
+
+import org.apache.fop.fo.properties.LeaderPattern;
+
+import org.apache.fop.layoutmgr.BidiLayoutManager;
+import org.apache.fop.layoutmgr.LayoutProcessor;
+import org.apache.fop.layoutmgr.LMiter;
+import org.apache.fop.layoutmgr.table.Cell;
+import org.apache.fop.layoutmgr.table.Body;
+import org.apache.fop.layoutmgr.table.Row;
+import org.apache.fop.layoutmgr.table.TableLayoutManager;
+import org.apache.fop.layoutmgr.list.ListBlockLayoutManager;
+import org.apache.fop.layoutmgr.list.ListItemLayoutManager;
+import org.apache.fop.util.CharUtilities;
+
+import java.util.List;
+import java.util.ListIterator;
+import java.util.ArrayList;
+
+/**
+ * Concrete implementation of FOTreeVisitor for the purpose of adding
+ * Layout Managers for nodes in the FOTree.
+ * Each method is responsible to return a LayoutManager responsible for laying
+ * out this FObj's content.
+ * @see org.apache.fop.fo.FOTreeVisitor
+ */
+
+public class AddLMVisitor extends FOTreeVisitor {
+
+    /** The List object to which methods in this class should add Layout
+     *  Managers */
+    private List currentLMList;
+
+    /** A List object which can be used to save and restore the currentLMList if
+     * another List should temporarily be used */
+    private List saveLMList;
+
+    /**
+     *
+     * @param fobj the FObj object for which a layout manager should be created
+     * @param lmList the list to which the newly created layout manager(s)
+     * should be added
+     */
+    public void addLayoutManager(FObj fobj, List lmList) {
+        /* Store the List in a global variable so that it can be accessed by the
+           Visitor methods */
+        currentLMList = lmList;
+        fobj.acceptVisitor(this);
+    }
+
+    public void serveVisitor(FOText node) {
+        if (node.length == 0) {
+            return;
+        }
+        if (node.length < node.ca.length) {
+            char[] tmp = node.ca;
+            node.ca = new char[node.length];
+            System.arraycopy(tmp, 0, node.ca, 0, node.length);
+        }
+        LayoutManager lm = new TextLayoutManager(node.ca, node.textInfo);
+        lm.setFObj(node);
+        currentLMList.add(lm);
+    }
+
+    public void serveVisitor(FObjMixed node) {
+        if (node.getChildren() != null) {
+            InlineStackingLayoutManager lm;
+            lm = new InlineStackingLayoutManager();
+            lm.setUserAgent(node.getUserAgent());
+            lm.setFObj(node);
+            lm.setLMiter(new LMiter(node.getChildren()));
+            currentLMList.add(lm);
+        }
+    }
+
+    public void serveVisitor(BidiOverride node) {
+        if (false) {
+            serveVisitor((FObjMixed)node);
+        } else {
+            ArrayList childList = new ArrayList();
+            saveLMList = currentLMList;
+            currentLMList = childList;
+            serveVisitor((FObjMixed)node);
+            currentLMList = saveLMList;
+            for (int count = childList.size() - 1; count >= 0; count--) {
+                LayoutProcessor lm = (LayoutProcessor) childList.get(count);
+                if (lm.generatesInlineAreas()) {
+                    LayoutProcessor blm = new BidiLayoutManager((LeafNodeLayoutManager) lm);
+                    blm.setFObj(node);
+                    currentLMList.add(blm);
+                } else {
+                    currentLMList.add(lm);
+                }
+            }
+        }
+    }
+
+    /**
+     * @param node Inline object to process
+     */
+    public void serveVisitor(Inline node) {
+        serveVisitor((FObjMixed)node);
+    }
+
+    public void serveVisitor(Footnote node) {
+        if (node.getInlineFO() == null) {
+            node.getLogger().error("inline required in footnote");
+            return;
+        }
+        serveVisitor(node.getInlineFO());
+    }
+
+    public void serveVisitor(InlineContainer node) {
+        ArrayList childList = new ArrayList();
+        saveLMList = currentLMList;
+        currentLMList = childList;
+        serveVisitor((FObj)node);
+        currentLMList = saveLMList;
+        LayoutManager lm = new ICLayoutManager(childList);
+        lm.setUserAgent(node.getUserAgent());
+        lm.setFObj(node);
+        currentLMList.add(lm);
+    }
+
+    /**
+     * Add start and end properties for the link
+     */
+    public void serveVisitor(BasicLink node) {
+        node.setup();
+        InlineStackingLayoutManager lm;
+        lm = new InlineStackingLayoutManager() {
+            protected InlineParent createArea(BasicLink node) {
+                InlineParent area = super.createArea();
+                setupBasicLinkArea(node, parentLM, area);
+                return area;
+            }
+        };
+        lm.setUserAgent(node.getUserAgent());
+        lm.setFObj(node);
+        lm.setLMiter(new LMiter(node.getChildren()));
+        currentLMList.add(lm);
+    }
+
+    protected void setupBasicLinkArea(BasicLink node, LayoutProcessor parentLM,
+                                      InlineParent area) {
+         if (node.getLink() == null) {
+             return;
+         }
+         if (node.getExternal()) {
+             area.addTrait(Trait.EXTERNAL_LINK, node.getLink());
+         } else {
+             PageViewport page = parentLM.resolveRefID(node.getLink());
+             if (page != null) {
+                 area.addTrait(Trait.INTERNAL_LINK, page.getKey());
+             } else {
+                 LinkResolver res = new LinkResolver(node.getLink(), area);
+                 parentLM.addUnresolvedArea(node.getLink(), res);
+             }
+         }
+     }
+
+     public void serveVisitor(Block node) {
+         BlockLayoutManager blm = new BlockLayoutManager();
+         blm.setUserAgent(node.getUserAgent());
+         blm.setFObj(node);
+         TextInfo ti = node.getPropertyManager().getTextLayoutProps(node.getDocument());
+         blm.setBlockTextInfo(ti);
+         currentLMList.add(blm);
+     }
+
+     public void serveVisitor(final Leader node) {
+         LeafNodeLayoutManager lm = new LeafNodeLayoutManager() {
+             public InlineArea get(LayoutContext context) {
+                 return getLeaderInlineArea(node);
+             }
+
+             protected MinOptMax getAllocationIPD(int refIPD) {
+                return node.getAllocIPD(refIPD);
+             }
+
+             /*protected void offsetArea(LayoutContext context) {
+                 if(leaderPattern == LeaderPattern.DOTS) {
+                     curArea.setOffset(context.getBaseline());
+                 }
+             }*/
+         };
+         lm.setUserAgent(node.getUserAgent());
+         lm.setFObj(node);
+         lm.setAlignment(node.properties.get("leader-alignment").getEnum());
+         currentLMList.add(lm);
+     }
+
+     private InlineArea getLeaderInlineArea(Leader node) {
+         if (node.leaderArea == null) {
+             createLeaderArea(node);
+         }
+         return node.leaderArea;
+     }
+
+     protected void createLeaderArea(Leader node) {
+         node.setup();
+
+         if (node.getLeaderPattern() == LeaderPattern.RULE) {
+             org.apache.fop.area.inline.Leader leader = new org.apache.fop.area.inline.Leader();
+
+             leader.setRuleStyle(node.getRuleStyle());
+             leader.setRuleThickness(node.getRuleThickness());
+
+             node.leaderArea = leader;
+         } else if (node.getLeaderPattern() == LeaderPattern.SPACE) {
+             node.leaderArea = new Space();
+         } else if (node.getLeaderPattern() == LeaderPattern.DOTS) {
+             Word w = new Word();
+             char dot = '.'; // userAgent.getLeaderDotCharacter();
+
+             w.setWord("" + dot);
+             w.addTrait(Trait.FONT_NAME, node.getFontState().getFontName());
+             w.addTrait(Trait.FONT_SIZE,
+                              new Integer(node.getFontState().getFontSize()));
+             // set offset of dot within inline parent
+             w.setOffset(node.getFontState().getAscender());
+             int width = CharUtilities.getCharWidth(dot, node.getFontState());
+             Space spacer = null;
+             if (node.getPatternWidth() > width) {
+                 spacer = new Space();
+                 spacer.setWidth(node.getPatternWidth() - width);
+                 width = node.getPatternWidth();
+             }
+             FilledArea fa = new FilledArea();
+             fa.setUnitWidth(width);
+             fa.addChild(w);
+             if (spacer != null) {
+                 fa.addChild(spacer);
+             }
+             fa.setHeight(node.getFontState().getAscender());
+
+             node.leaderArea = fa;
+         } else if (node.getLeaderPattern() == LeaderPattern.USECONTENT) {
+             if (node.getChildren() == null) {
+                 node.getLogger().error("Leader use-content with no content");
+                 return;
+             }
+             InlineStackingLayoutManager lm;
+             lm = new InlineStackingLayoutManager();
+             lm.setUserAgent(node.getUserAgent());
+             lm.setFObj(node);
+             lm.setLMiter(new LMiter(node.getChildren()));
+             lm.init();
+
+             // get breaks then add areas to FilledArea
+             FilledArea fa = new FilledArea();
+
+             ContentLayoutManager clm = new ContentLayoutManager(fa);
+             clm.setUserAgent(node.getUserAgent());
+             lm.setParent(clm);
+
+             clm.fillArea(lm);
+             int width = clm.getStackingSize();
+             Space spacer = null;
+             if (node.getPatternWidth() > width) {
+                 spacer = new Space();
+                 spacer.setWidth(node.getPatternWidth() - width);
+                 width = node.getPatternWidth();
+             }
+             fa.setUnitWidth(width);
+             if (spacer != null) {
+                 fa.addChild(spacer);
+             }
+             node.leaderArea = fa;
+         }
+     }
+
+     public void serveVisitor(RetrieveMarker node) {
+         RetrieveMarkerLayoutManager rmlm;
+         rmlm = new RetrieveMarkerLayoutManager(node.getRetrieveClassName(),
+                 node.getRetrievePosition(),
+                 node.getRetrieveBoundary());
+         rmlm.setUserAgent(node.getUserAgent());
+         rmlm.setFObj(node);
+         currentLMList.add(rmlm);
+     }
+
+     public void serveVisitor(Character node) {
+         InlineArea inline = node.getInlineArea();
+         if (inline != null) {
+             LeafNodeLayoutManager lm = new LeafNodeLayoutManager();
+             lm.setUserAgent(node.getUserAgent());
+             lm.setFObj(node);
+             lm.setCurrentArea(inline);
+             currentLMList.add(lm);
+         }
+     }
+
+     /**
+      * This adds a leafnode layout manager that deals with the
+      * created viewport/image area.
+      */
+     public void serveVisitor(ExternalGraphic node) {
+         InlineArea area = node.getInlineArea();
+         if (area != null) {
+             node.setupID();
+             LeafNodeLayoutManager lm = new LeafNodeLayoutManager();
+             lm.setUserAgent(node.getUserAgent());
+             lm.setFObj(node);
+             lm.setCurrentArea(area);
+             lm.setAlignment(node.properties.get("vertical-align").getEnum());
+             lm.setLead(node.getViewHeight());
+             currentLMList.add(lm);
+         }
+     }
+
+     public void serveVisitor(BlockContainer node) {
+         BlockContainerLayoutManager blm = new BlockContainerLayoutManager();
+         blm.setUserAgent(node.getUserAgent());
+         blm.setFObj(node);
+         blm.setOverflow(node.properties.get("overflow").getEnum());
+         currentLMList.add(blm);
+     }
+
+     public void serveVisitor(ListBlock node) {
+         ListBlockLayoutManager blm = new ListBlockLayoutManager();
+         blm.setUserAgent(node.getUserAgent());
+         blm.setFObj(node);
+         currentLMList.add(blm);
+     }
+
+     public void serveVisitor(InstreamForeignObject node) {
+         node.areaCurrent = node.getInlineArea();
+         if (node.areaCurrent != null) {
+             LeafNodeLayoutManager lm = new LeafNodeLayoutManager();
+             lm.setUserAgent(node.getUserAgent());
+             lm.setFObj(node);
+             lm.setCurrentArea(node.areaCurrent);
+             lm.setAlignment(node.properties.get("vertical-align").getEnum());
+             lm.setLead(node.areaCurrent.getHeight());
+             currentLMList.add(lm);
+         }
+     }
+
+     public void serveVisitor(ListItem node) {
+         if (node.getLabel() != null && node.getBody() != null) {
+             ListItemLayoutManager blm = new ListItemLayoutManager();
+             blm.setUserAgent(node.getUserAgent());
+             blm.setFObj(node);
+             blm.setLabel(node.getLabel().getItemLayoutManager());
+             blm.setBody(node.getBody().getItemLayoutManager());
+             currentLMList.add(blm);
+         } else {
+             node.getLogger().error("list-item requires list-item-label and list-item-body");
+         }
+     }
+
+     /**
+      * Overridden from FObj
+      * @param lms the list to which the layout manager(s) should be added
+      */
+     public void serveVisitor(final PageNumber node) {
+         node.setup();
+         LayoutManager lm;
+         lm = new LeafNodeLayoutManager() {
+                     public InlineArea get(LayoutContext context) {
+                         // get page string from parent, build area
+                         Word inline = new Word();
+                         String str = parentLM.getCurrentPageNumber();
+                         int width = 0;
+                     for (int count = 0; count < str.length(); count++) {
+                             width += CharUtilities.getCharWidth(
+                                        str.charAt(count), node.getFontState());
+                         }
+                         inline.setWord(str);
+                         inline.setIPD(width);
+                         inline.setHeight(node.getFontState().getAscender()
+                                          - node.getFontState().getDescender());
+                         inline.setOffset(node.getFontState().getAscender());
+
+                         inline.addTrait(Trait.FONT_NAME,
+                                         node.getFontState().getFontName());
+                         inline.addTrait(Trait.FONT_SIZE,
+                                         new Integer(node.getFontState().getFontSize()));
+
+                         return inline;
+                     }
+
+                     protected void offsetArea(LayoutContext context) {
+                         curArea.setOffset(context.getBaseline());
+                     }
+                 };
+         lm.setUserAgent(node.getUserAgent());
+         lm.setFObj(node);
+         currentLMList.add(lm);
+     }
+
+     public void serveVisitor(final PageNumberCitation node) {
+         node.setup();
+         LayoutManager lm;
+         lm = new LeafNodeLayoutManager() {
+                     public InlineArea get(LayoutContext context) {
+                         return node.getInlineArea(parentLM);
+                     }
+
+                     public void addAreas(PositionIterator posIter,
+                                          LayoutContext context) {
+                         super.addAreas(posIter, context);
+                         if (node.getUnresolved()) {
+                             parentLM.addUnresolvedArea(node.getRefId(),
+                                                        (Resolveable) node.getInline());
+                         }
+                     }
+
+                     protected void offsetArea(LayoutContext context) {
+                         curArea.setOffset(context.getBaseline());
+                     }
+                 };
+         lm.setUserAgent(node.getUserAgent());
+         lm.setFObj(node);
+         currentLMList.add(lm);
+     }
+
+     public void serveVisitor(Table node) {
+         TableLayoutManager tlm = new TableLayoutManager();
+         tlm.setUserAgent(node.getUserAgent());
+         tlm.setFObj(node);
+         tlm.setColumns(node.getColumns());
+         if (node.getTableHeader() != null) {
+             tlm.setTableHeader(getTableBodyLayoutManager(node.getTableHeader()));
+         }
+         if (node.getTableFooter() != null) {
+             tlm.setTableFooter(getTableBodyLayoutManager(node.getTableFooter()));
+         }
+         currentLMList.add(tlm);
+     }
+
+     public void serveVisitor(TableBody node) {
+         currentLMList.add(getTableBodyLayoutManager(node));
+     }
+
+     public Body getTableBodyLayoutManager(TableBody node) {
+         Body blm = new Body();
+         blm.setUserAgent(node.getUserAgent());
+         blm.setFObj(node);
+         return blm;
+     }
+
+     public void serveVisitor(TableCell node) {
+         Cell clm = new Cell();
+         clm.setUserAgent(node.getUserAgent());
+         clm.setFObj(node);
+         currentLMList.add(clm);
+     }
+
+     public void serveVisitor(TableRow node) {
+         Row rlm = new Row();
+         rlm.setUserAgent(node.getUserAgent());
+         rlm.setFObj(node);
+         currentLMList.add(rlm);
+     }
+
+     public void serveVisitor(Flow node) {
+         FlowLayoutManager lm = new FlowLayoutManager();
+         lm.setUserAgent(node.getUserAgent());
+         lm.setFObj(node);
+         currentLMList.add(lm);
+     }
+
+}
diff --git a/src/java/org/apache/fop/layoutmgr/BidiLayoutManager.java b/src/java/org/apache/fop/layoutmgr/BidiLayoutManager.java
new file mode 100644 (file)
index 0000000..13b7613
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * $Id$
+ * ============================================================================
+ *                    The Apache Software License, Version 1.1
+ * ============================================================================
+ *
+ * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if any, must
+ *    include the following acknowledgment: "This product includes software
+ *    developed by the Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself, if
+ *    and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ *    endorse or promote products derived from this software without prior
+ *    written permission. For written permission, please contact
+ *    apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache", nor may
+ *    "Apache" appear in their name, without prior written permission of the
+ *    Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ============================================================================
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <jtauber@jtauber.com>. For more information on the Apache
+ * Software Foundation, please see <http://www.apache.org/>.
+ */
+package org.apache.fop.layoutmgr;
+
+// FOP
+import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FObjMixed;
+import org.apache.fop.fo.properties.CommonAural;
+import org.apache.fop.fo.properties.CommonRelativePosition;
+
+import org.apache.fop.layoutmgr.LeafNodeLayoutManager;
+import org.apache.fop.layoutmgr.LayoutProcessor;
+import org.apache.fop.area.inline.InlineArea;
+
+import java.util.List;
+import java.util.ArrayList;
+
+
+/**
+ * If this bidi has a different writing mode direction
+ * ltr or rtl than its parent writing mode then this
+ * reverses the inline areas (at the character level).
+ */
+class BidiLayoutManager extends LeafNodeLayoutManager {
+
+    private List children;
+
+    BidiLayoutManager(LeafNodeLayoutManager cLM) {
+        children = new ArrayList();
+/*
+        for (int count = cLM.size() - 1; count >= 0; count--) {
+            InlineArea ia = cLM.get(count);
+            if (ia instanceof Word) {
+                // reverse word
+                Word word = (Word) ia;
+                StringBuffer sb = new StringBuffer(word.getWord());
+                word.setWord(sb.reverse().toString());
+            }
+            children.add(ia);
+        }
+*/
+    }
+
+    public int size() {
+        return children.size();
+    }
+
+    public InlineArea get(int index) {
+        return (InlineArea) children.get(index);
+    }
+
+}
diff --git a/src/java/org/apache/fop/layoutmgr/ICLayoutManager.java b/src/java/org/apache/fop/layoutmgr/ICLayoutManager.java
new file mode 100644 (file)
index 0000000..a938d07
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * $Id$
+ * ============================================================================
+ *                    The Apache Software License, Version 1.1
+ * ============================================================================
+ *
+ * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if any, must
+ *    include the following acknowledgment: "This product includes software
+ *    developed by the Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself, if
+ *    and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ *    endorse or promote products derived from this software without prior
+ *    written permission. For written permission, please contact
+ *    apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache", nor may
+ *    "Apache" appear in their name, without prior written permission of the
+ *    Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ============================================================================
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <jtauber@jtauber.com>. For more information on the Apache
+ * Software Foundation, please see <http://www.apache.org/>.
+ */
+package org.apache.fop.layoutmgr;
+
+// Java
+import java.util.List;
+
+// FOP
+import org.apache.fop.area.inline.InlineArea;
+
+/**
+ * This creates a single inline container area after
+ * laying out the child block areas. All footnotes, floats
+ * and id areas are maintained for later retrieval.
+ */
+public class ICLayoutManager extends LeafNodeLayoutManager {
+
+    private List childrenLM;
+
+    ICLayoutManager(List childLM) {
+        childrenLM = childLM;
+    }
+
+    public InlineArea get(int index) {
+        return null;
+    }
+
+}
diff --git a/src/java/org/apache/fop/layoutmgr/LMFOTreeExternal.java b/src/java/org/apache/fop/layoutmgr/LMFOTreeExternal.java
deleted file mode 100644 (file)
index 51c68cb..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * $Id$
- * ============================================================================
- *                    The Apache Software License, Version 1.1
- * ============================================================================
- *
- * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modifica-
- * tion, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- *
- * 3. The end-user documentation included with the redistribution, if any, must
- *    include the following acknowledgment: "This product includes software
- *    developed by the Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself, if
- *    and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "FOP" and "Apache Software Foundation" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache", nor may
- *    "Apache" appear in their name, without prior written permission of the
- *    Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ============================================================================
- *
- * This software consists of voluntary contributions made by many individuals
- * on behalf of the Apache Software Foundation and was originally created by
- * James Tauber <jtauber@jtauber.com>. For more information on the Apache
- * Software Foundation, please see <http://www.apache.org/>.
- */
-
-package org.apache.fop.layoutmgr;
-
-import org.apache.fop.fo.FOTreeExternal;
-/**
- * Implementation of FOTreeExternal for LayoutStrategy-specific calls while the
- * FO Tree is being built.
- * @see org.apache.fop.fo.FOTreeExternal
- */
-
-public class LMFOTreeExternal extends FOTreeExternal {
-
-}
-
index abda1ecb869d8ee0e74df1dcb0841add4aebe3b3..0fee8cdf7546653259c97189e3c9151e76ad8e1d 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.layoutmgr;
 
 import org.apache.fop.fo.FObj;
@@ -64,6 +64,7 @@ public class LMiter implements ListIterator {
     private FObj curFO;
     protected List listLMs;
     protected int curPos = 0;
+    private AddLMVisitor addLMVisitor = new AddLMVisitor();
 
     public LMiter(ListIterator bIter) {
         baseIter = bIter;
@@ -81,7 +82,7 @@ public class LMiter implements ListIterator {
             if (theobj instanceof FObj) {
                 FObj fobj = (FObj) theobj;
                 //listLMs.add(fobj.getLayoutManager());
-                fobj.addLayoutManager(listLMs);
+                addLMVisitor.addLayoutManager(fobj, listLMs);
                 if (curPos < listLMs.size()) {
                     return true;
                 }
index 911d9586a442b70ca3b26852b70d9974ef9812c8..9f177a4c5d589230c798efb94ac1ff0d5899b6db 100644 (file)
@@ -50,7 +50,6 @@
  */
 package org.apache.fop.layoutmgr;
 
-import org.apache.fop.fo.FOTreeExternal;
 import org.apache.fop.layout.LayoutStrategy;
 
 /**
@@ -60,13 +59,5 @@ import org.apache.fop.layout.LayoutStrategy;
 public class LayoutManagerLS extends LayoutStrategy {
 
     private static String name = "layoutmgr";
-    private FOTreeExternal fote = null;
-
-    public FOTreeExternal getFOTreeExternal() {
-        if (fote  == null) {
-            fote = new LMFOTreeExternal();
-        }
-        return fote;
-    }
 
 }
index 4b1c18616726cbe50b3407a6ee1fecb0eaa97f03..a17cf047a0808f858fb39c8f65b887a8880b2cd5 100644 (file)
@@ -65,6 +65,7 @@ public class RetrieveMarkerLayoutManager extends AbstractLayoutManager {
     private String name;
     private int position;
     private int boundary;
+    private AddLMVisitor addLMVisitor = new AddLMVisitor();
 
     /**
      * Create a new block container layout manager.
@@ -123,7 +124,7 @@ public class RetrieveMarkerLayoutManager extends AbstractLayoutManager {
             List list = new ArrayList();
             Marker marker = retrieveMarker(name, position, boundary);
             if (marker != null) {
-                marker.addLayoutManager(list);
+                addLMVisitor.addLayoutManager(marker, list);
                 if (list.size() > 0) {
                     replaceLM =  (LayoutProcessor)list.get(0);
                     replaceLM.setParent(this);
index 24708d3dbd4117dad7b4b3a5ba8fc67e7800bcd0..6855635148bd0c519d72e08dfe90e5c49eaee88e 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.svg;
 
 // FOP
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.apps.FOPException;
 
 import org.apache.batik.dom.svg.SVGOMDocument;
@@ -140,15 +141,15 @@ public class SVGElement extends SVGObj {
             public AffineTransform getScreenTransform() {
                 throw new UnsupportedOperationException("NYI");
             }
-        
+
             /**
-             * Sets the transform to be used from the global transform space 
+             * Sets the transform to be used from the global transform space
              * to pixels.
              */
             public void setScreenTransform(AffineTransform at) {
                 throw new UnsupportedOperationException("NYI");
             }
-            
+
             public AffineTransform getCTM() {
                 return new AffineTransform();
             }
@@ -310,5 +311,10 @@ public class SVGElement extends SVGObj {
             return 100;
         }
     }
+
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }
 
index 07019acd4aa8a05623701ee11547dbc406e66eeb..8016821f018cf0a95b9dda8269740e2c8af07b44 100644 (file)
@@ -3,34 +3,34 @@
  * ============================================================================
  *                    The Apache Software License, Version 1.1
  * ============================================================================
- * 
+ *
  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without modifica-
  * tion, are permitted provided that the following conditions are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 
+ *
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution, if any, must
  *    include the following acknowledgment: "This product includes software
  *    developed by the Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself, if
  *    and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
  *    endorse or promote products derived from this software without prior
  *    written permission. For written permission, please contact
  *    apache@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache", nor may
  *    "Apache" appear in their name, without prior written permission of the
  *    Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * ============================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many individuals
  * on behalf of the Apache Software Foundation and was originally created by
  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
  * Software Foundation, please see <http://www.apache.org/>.
- */ 
+ */
 package org.apache.fop.svg;
 
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.XMLObj;
+import org.apache.fop.fo.FOTreeVisitor;
 
 /**
  * Class for SVG element objects.
@@ -75,5 +76,9 @@ public class SVGObj extends XMLObj {
         return "http://www.w3.org/2000/svg";
     }
 
+    public void acceptVisitor(FOTreeVisitor fotv) {
+        fotv.serveVisitor(this);
+    }
+
 }