]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
1. tie the LMIter objects to their LM "parent"
authorWilliam Victor Mote <vmote@apache.org>
Fri, 12 Sep 2003 18:57:34 +0000 (18:57 +0000)
committerWilliam Victor Mote <vmote@apache.org>
Fri, 12 Sep 2003 18:57:34 +0000 (18:57 +0000)
2. tie the PageLayoutManager object to its parent LayoutManagerLS
3. create methods for going up the LM tree to get to the LayoutManagerLS
4. store an AddLMVisitor object in LayoutManagerLS so that subclasses can be stored there and used instead of AddLMVisitor itself (so that third-party users can subclass instead of modifying AddLMVisitor)
5. use the stored AddLMVisitor instead of creating one for each LMIter
6. add some accessor methods to AddLMVisitor so that subclasses can use Lists stored therein

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

src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java
src/java/org/apache/fop/layoutmgr/AddLMVisitor.java
src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
src/java/org/apache/fop/layoutmgr/ContentLayoutManager.java
src/java/org/apache/fop/layoutmgr/LMiter.java
src/java/org/apache/fop/layoutmgr/LayoutManagerLS.java
src/java/org/apache/fop/layoutmgr/LayoutProcessor.java
src/java/org/apache/fop/layoutmgr/PageLayoutManager.java

index 7f113b8518bc05db221a02ec557f92bd914c1544..cc8f85d07120d0d259b8ffd47d7642282d6809c0 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;
@@ -94,7 +94,7 @@ public abstract class AbstractLayoutManager implements LayoutProcessor {
         this.fobj = fo;
         foID = fobj.getID();
         markers = fobj.getMarkers();
-        childLMiter = new LMiter(fobj.getChildren());
+        childLMiter = new LMiter(this, fobj.getChildren());
     }
 
     /**
@@ -123,6 +123,14 @@ public abstract class AbstractLayoutManager implements LayoutProcessor {
         this.parentLM = lm;
     }
 
+    public LayoutProcessor getParent() {
+        return this.parentLM;
+    }
+
+    public LayoutManagerLS getLayoutManagerLS() {
+        return getParent().getLayoutManagerLS();
+    }
+
     //     /**
     //      * Ask the parent LayoutManager to add the current (full) area to the
     //      * appropriate parent area.
index 36278a558aa88cfc1b79ca7666906a52cc5f2c73..600ca24496e93b1270bfdc728afbca0d6864b147 100644 (file)
@@ -159,6 +159,22 @@ public class AddLMVisitor extends FOTreeVisitor {
         fobj.acceptVisitor(this);
     }
 
+    /**
+     * Accessor for the currentLMList.
+     * @return the currentLMList.
+     */
+    public List getCurrentLMList() {
+        return currentLMList;
+    }
+
+    /**
+     * Accessor for the saveLMList.
+     * @return the saveLMList.
+     */
+    public List getSaveLMList() {
+        return saveLMList;
+    }
+
     public void serveVisitor(FOText node) {
         if (node.length == 0) {
             return;
@@ -180,7 +196,7 @@ public class AddLMVisitor extends FOTreeVisitor {
             Document doc = (Document)node.getFOTreeControl();
             lm.setUserAgent(node.getUserAgent());
             lm.setFObj(node);
-            lm.setLMiter(new LMiter(node.getChildren()));
+            lm.setLMiter(new LMiter(lm, node.getChildren()));
             currentLMList.add(lm);
         }
     }
@@ -249,7 +265,7 @@ public class AddLMVisitor extends FOTreeVisitor {
         };
         lm.setUserAgent(node.getUserAgent());
         lm.setFObj(node);
-        lm.setLMiter(new LMiter(node.getChildren()));
+        lm.setLMiter(new LMiter(lm, node.getChildren()));
         currentLMList.add(lm);
     }
 
@@ -357,7 +373,7 @@ public class AddLMVisitor extends FOTreeVisitor {
              lm = new InlineStackingLayoutManager();
              lm.setUserAgent(node.getUserAgent());
              lm.setFObj(node);
-             lm.setLMiter(new LMiter(node.getChildren()));
+             lm.setLMiter(new LMiter(lm, node.getChildren()));
              lm.init();
 
              // get breaks then add areas to FilledArea
index 7b0cf26a06b5dc90ad7268206286523e46d255e5..0681fdb27290fa8779f30b680cc7855ff3fa3625 100644 (file)
@@ -94,8 +94,8 @@ public class BlockLayoutManager extends BlockStackingLayoutManager {
 
         private ListIterator proxy;
 
-        public BlockLMiter(ListIterator pr) {
-            super(null);
+        public BlockLMiter(LayoutProcessor lp, ListIterator pr) {
+            super(lp, null);
             proxy = pr;
         }
 
@@ -152,7 +152,7 @@ public class BlockLayoutManager extends BlockStackingLayoutManager {
      */
     public void setFObj(FObj fo) {
         super.setFObj(fo);
-        childLMiter = new BlockLMiter(childLMiter);
+        childLMiter = new BlockLMiter(this, childLMiter);
     }
 
     public void setBlockTextInfo(TextInfo ti) {
index c6d07d335bd7d27eba85f4c90f8a751e4cf440b1..ad92d7ca8ffcc14fb0a7df81e9a5f196c9e74a61 100644 (file)
@@ -208,6 +208,14 @@ public class ContentLayoutManager implements LayoutProcessor {
         parentLM = lm;
     }
 
+    public LayoutProcessor getParent() {
+        return this.parentLM;
+    }
+
+    public LayoutManagerLS getLayoutManagerLS() {
+        return getParent().getLayoutManagerLS();
+    }
+
     /** @see org.apache.fop.layoutmgr.LayoutManager */
     public boolean canBreakBefore(LayoutContext lc) {
         return false;
index 0fee8cdf7546653259c97189e3c9151e76ad8e1d..8ace2a2ad54523b35d6e9e8acf97f3d3b524b217 100644 (file)
@@ -64,9 +64,11 @@ public class LMiter implements ListIterator {
     private FObj curFO;
     protected List listLMs;
     protected int curPos = 0;
-    private AddLMVisitor addLMVisitor = new AddLMVisitor();
+    /** The LayoutProcessor to which this LMiter is attached **/
+    private LayoutProcessor lp;
 
-    public LMiter(ListIterator bIter) {
+    public LMiter(LayoutProcessor lp, ListIterator bIter) {
+        this.lp = lp;
         baseIter = bIter;
         listLMs = new ArrayList(10);
     }
@@ -76,6 +78,7 @@ public class LMiter implements ListIterator {
     }
 
     protected boolean preLoadNext() {
+        AddLMVisitor addLMVisitor = lp.getLayoutManagerLS().getAddLMVisitor();
         // skip over child FObj's that don't add lms
         while (baseIter != null && baseIter.hasNext()) {
             Object theobj = baseIter.next();
index 1f8dd7dc744ec385caa31037829f49f755ea745d..fc78984a1ef8b4df124ab02ff80432ed9579fa2e 100644 (file)
@@ -67,6 +67,9 @@ import org.apache.fop.fo.FOTreeHandler;
 public class LayoutManagerLS extends LayoutStrategy {
 
     private static String name = "layoutmgr";
+    /** Useful only for allowing subclasses of AddLMVisitor to be set by those
+     extending FOP **/
+    private AddLMVisitor addLMVisitor = null;
 
     public LayoutManagerLS(Document document) {
         super(document);
@@ -106,7 +109,7 @@ public class LayoutManagerLS extends LayoutStrategy {
         pageSeq.initPageNumber();
 
         // This will layout pages and add them to the area tree
-        PageLayoutManager pageLM = new PageLayoutManager(areaTree, pageSeq);
+        PageLayoutManager pageLM = new PageLayoutManager(areaTree, pageSeq, this);
         pageLM.setUserAgent(pageSeq.getUserAgent());
         pageLM.setFObj(pageSeq);
         pageLM.setPageCounting(pageSeq.getCurrentPageNumber(),
@@ -181,7 +184,7 @@ public class LayoutManagerLS extends LayoutStrategy {
         lm = new InlineStackingLayoutManager();
         lm.setUserAgent(foTitle.getUserAgent());
         lm.setFObj(foTitle);
-        lm.setLMiter(new LMiter(foTitle.children.listIterator()));
+        lm.setLMiter(new LMiter(lm, foTitle.children.listIterator()));
         lm.init();
 
         // get breaks then add areas to title
@@ -195,4 +198,25 @@ public class LayoutManagerLS extends LayoutStrategy {
         return title;
     }
 
+    /**
+     * Public accessor to set the AddLMVisitor object that should be used.
+     * This allows subclasses of AddLMVisitor to be used, which can be useful
+     * for extensions to the FO Tree.
+     * @param addLMVisitor the AddLMVisitor object that should be used.
+     */
+    public void setAddLMVisitor(AddLMVisitor addLMVisitor) {
+        this.addLMVisitor = addLMVisitor;
+    }
+
+    /**
+     * Public accessor to get the AddLMVisitor object that should be used.
+     * @return the AddLMVisitor object that should be used.
+     */
+    public AddLMVisitor getAddLMVisitor() {
+        if (this.addLMVisitor == null) {
+            this.addLMVisitor = new AddLMVisitor();
+        }
+        return this.addLMVisitor;
+    }
+
 }
index 1f3902df265164d670e608e3fa15cc026ccac9b4..e4c85ffb67df18b34a7993770a6d981ad2c17751 100644 (file)
@@ -73,6 +73,18 @@ public interface LayoutProcessor extends LayoutManager {
      */
     void setParent(LayoutProcessor lm);
 
+    /**
+     * Get the parent layout manager.
+     * @return the parent layout manager.
+     */
+    LayoutProcessor getParent();
+
+    /**
+     * Get the LayoutManagerLS object that is at the top of the LM Tree
+     * @return the LayoutManagerLS object that is at the top of the LM Tree
+     */
+    LayoutManagerLS getLayoutManagerLS();
+
     /**
      * Initialise this layout manager.
      */
index 76cb1cecad998eda0f2f0292a42c9989d362353d..9861423c553a855275c8c2836f28ca2c9e6d55a3 100644 (file)
@@ -155,6 +155,8 @@ public class PageLayoutManager extends AbstractLayoutManager implements Runnable
      */
     private HashMap staticContentLMs = new HashMap(4);
 
+    private LayoutManagerLS lmls;
+
     /**
      * This is the top level layout manager.
      * It is created by the PageSequence FO.
@@ -162,9 +164,11 @@ public class PageLayoutManager extends AbstractLayoutManager implements Runnable
      * @param areaTree the area tree to add pages to
      * @param pageseq the page sequence fo
      */
-    public PageLayoutManager(AreaTree areaTree, PageSequence pageseq) {
+    public PageLayoutManager(AreaTree areaTree, PageSequence pageseq,
+                             LayoutManagerLS lmls) {
         this.areaTree = areaTree;
         pageSequence = pageseq;
+        this.lmls = lmls;
     }
 
     /**
@@ -911,4 +915,8 @@ public class PageLayoutManager extends AbstractLayoutManager implements Runnable
         return lm;
     }
 
+    public LayoutManagerLS getLayoutManagerLS() {
+        return lmls;
+    }
+
 }