vmote       2003/09/12 11:57:35

  Modified:    src/java/org/apache/fop/layoutmgr AbstractLayoutManager.java
                        AddLMVisitor.java BlockLayoutManager.java
                        ContentLayoutManager.java LMiter.java
                        LayoutManagerLS.java LayoutProcessor.java
                        PageLayoutManager.java
  Log:
  1. tie the LMIter objects to their LM "parent"
  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
  
  Revision  Changes    Path
  1.3       +19 -11    
xml-fop/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java
  
  Index: AbstractLayoutManager.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AbstractLayoutManager.java        22 Aug 2003 17:42:41 -0000      1.2
  +++ AbstractLayoutManager.java        12 Sep 2003 18:57:34 -0000      1.3
  @@ -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
    *    [EMAIL PROTECTED]
  - * 
  + *
    * 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
  @@ -42,12 +42,12 @@
    * (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 <[EMAIL PROTECTED]>. 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 @@
           this.fobj = fo;
           foID = fobj.getID();
           markers = fobj.getMarkers();
  -        childLMiter = new LMiter(fobj.getChildren());
  +        childLMiter = new LMiter(this, fobj.getChildren());
       }
   
       /**
  @@ -121,6 +121,14 @@
   
       public void setParent(LayoutProcessor lm) {
           this.parentLM = lm;
  +    }
  +
  +    public LayoutProcessor getParent() {
  +        return this.parentLM;
  +    }
  +
  +    public LayoutManagerLS getLayoutManagerLS() {
  +        return getParent().getLayoutManagerLS();
       }
   
       //     /**
  
  
  
  1.17      +20 -4     xml-fop/src/java/org/apache/fop/layoutmgr/AddLMVisitor.java
  
  Index: AddLMVisitor.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/AddLMVisitor.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- AddLMVisitor.java 8 Sep 2003 17:00:54 -0000       1.16
  +++ AddLMVisitor.java 12 Sep 2003 18:57:34 -0000      1.17
  @@ -159,6 +159,22 @@
           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 @@
               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 @@
           };
           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 @@
                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
  
  
  
  1.7       +3 -3      
xml-fop/src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
  
  Index: BlockLayoutManager.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- BlockLayoutManager.java   8 Sep 2003 17:00:54 -0000       1.6
  +++ BlockLayoutManager.java   12 Sep 2003 18:57:34 -0000      1.7
  @@ -94,8 +94,8 @@
   
           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 void setFObj(FObj fo) {
           super.setFObj(fo);
  -        childLMiter = new BlockLMiter(childLMiter);
  +        childLMiter = new BlockLMiter(this, childLMiter);
       }
   
       public void setBlockTextInfo(TextInfo ti) {
  
  
  
  1.5       +8 -0      
xml-fop/src/java/org/apache/fop/layoutmgr/ContentLayoutManager.java
  
  Index: ContentLayoutManager.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/ContentLayoutManager.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ContentLayoutManager.java 8 Sep 2003 17:00:54 -0000       1.4
  +++ ContentLayoutManager.java 12 Sep 2003 18:57:34 -0000      1.5
  @@ -208,6 +208,14 @@
           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;
  
  
  
  1.3       +5 -2      xml-fop/src/java/org/apache/fop/layoutmgr/LMiter.java
  
  Index: LMiter.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/LMiter.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LMiter.java       19 Aug 2003 00:53:54 -0000      1.2
  +++ LMiter.java       12 Sep 2003 18:57:34 -0000      1.3
  @@ -64,9 +64,11 @@
       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 @@
       }
   
       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();
  
  
  
  1.14      +27 -3     xml-fop/src/java/org/apache/fop/layoutmgr/LayoutManagerLS.java
  
  Index: LayoutManagerLS.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/LayoutManagerLS.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- LayoutManagerLS.java      8 Sep 2003 17:00:54 -0000       1.13
  +++ LayoutManagerLS.java      12 Sep 2003 18:57:34 -0000      1.14
  @@ -67,6 +67,9 @@
   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 @@
           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 @@
           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
  @@ -193,6 +196,27 @@
           clm.fillArea(lm);
   
           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;
       }
   
   }
  
  
  
  1.3       +12 -0     xml-fop/src/java/org/apache/fop/layoutmgr/LayoutProcessor.java
  
  Index: LayoutProcessor.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/LayoutProcessor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LayoutProcessor.java      25 Apr 2003 07:06:43 -0000      1.2
  +++ LayoutProcessor.java      12 Sep 2003 18:57:34 -0000      1.3
  @@ -74,6 +74,18 @@
       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.
        */
       void init();
  
  
  
  1.20      +9 -1      xml-fop/src/java/org/apache/fop/layoutmgr/PageLayoutManager.java
  
  Index: PageLayoutManager.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/PageLayoutManager.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- PageLayoutManager.java    1 Sep 2003 14:11:51 -0000       1.19
  +++ PageLayoutManager.java    12 Sep 2003 18:57:34 -0000      1.20
  @@ -155,6 +155,8 @@
        */
       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 @@
        * @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;
       }
   
       /**
  @@ -909,6 +913,10 @@
           lm.setFObj(sc);
           staticContentLMs.put(sc.getFlowName(), lm);
           return lm;
  +    }
  +
  +    public LayoutManagerLS getLayoutManagerLS() {
  +        return lmls;
       }
   
   }
  
  
  

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

Reply via email to