You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by gm...@apache.org on 2004/05/18 13:42:08 UTC

cvs commit: xml-fop/src/java/org/apache/fop/layoutmgr AbstractLayoutManager.java ContentLayoutManager.java LMiter.java LayoutManager.java PageLayoutManager.java LayoutManagerLS.java

gmazza      2004/05/18 04:42:08

  Modified:    src/java/org/apache/fop/apps Document.java Driver.java
               src/java/org/apache/fop/layoutmgr AbstractLayoutManager.java
                        ContentLayoutManager.java LMiter.java
                        LayoutManager.java PageLayoutManager.java
  Removed:     src/java/org/apache/fop/layout LayoutStrategy.java
               src/java/org/apache/fop/layoutmgr LayoutManagerLS.java
  Log:
  Folded the layout strategy into apps.Document.
  
  Revision  Changes    Path
  1.14      +114 -29   xml-fop/src/java/org/apache/fop/apps/Document.java
  
  Index: Document.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/Document.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- Document.java	22 Apr 2004 21:38:39 -0000	1.13
  +++ Document.java	18 May 2004 11:42:07 -0000	1.14
  @@ -24,22 +24,25 @@
   import java.util.Set;
   import java.util.HashSet;
   
  -
   // FOP
  -import org.apache.fop.apps.FOUserAgent;
  -
   import org.apache.fop.area.AreaTree;
   import org.apache.fop.area.AreaTreeControl;
   import org.apache.fop.area.AreaTreeModel;
  +import org.apache.fop.area.Title;
   
  -import org.apache.fop.fo.extensions.Bookmarks;
   import org.apache.fop.fo.FOInputHandler;
   import org.apache.fop.fo.FOTreeControl;
   import org.apache.fop.fo.FOTreeEvent;
   import org.apache.fop.fo.FOTreeListener;
  +import org.apache.fop.fo.extensions.Bookmarks;
   import org.apache.fop.fo.pagination.PageSequence;
   import org.apache.fop.fonts.FontInfo;
  -import org.apache.fop.layout.LayoutStrategy;
  +import org.apache.fop.layoutmgr.AddLMVisitor;
  +import org.apache.fop.layoutmgr.ContentLayoutManager;
  +import org.apache.fop.layoutmgr.InlineStackingLayoutManager;
  +import org.apache.fop.layoutmgr.LMiter;
  +import org.apache.fop.layoutmgr.PageLayoutManager;
  +
   
   import org.apache.commons.logging.Log;
   
  @@ -59,13 +62,6 @@
       /** The Font information relevant for this document */
       private FontInfo fontInfo;
       
  -    /**
  -     * the LayoutStrategy to be used to process this document
  -     * TODO: this actually belongs in the RenderContext class, when it is
  -     * created
  -     */
  -    private LayoutStrategy layoutStrategy = null;
  -
       /** The current AreaTree for the PageSequence being rendered. */
       public AreaTree areaTree;
   
  @@ -74,6 +70,10 @@
   
       private Bookmarks bookmarks = null;
   
  +    /** Useful only for allowing subclasses of AddLMVisitor to be set by those
  +     extending FOP **/
  +     private AddLMVisitor addLMVisitor = null;
  +
       /**
        * The current set of id's in the FO tree.
        * This is used so we know if the FO tree contains duplicates.
  @@ -104,21 +104,6 @@
       }
   
       /**
  -     * Set the LayoutStrategy to be used to process this Document
  -     * @param ls the LayoutStrategy object to be used to process this Document
  -     */
  -    public void setLayoutStrategy(LayoutStrategy ls) {
  -        this.layoutStrategy = ls;
  -    }
  -
  -    /**
  -     * @return this Document's LayoutStrategy object
  -     */
  -    public LayoutStrategy getLayoutStrategy () {
  -        return layoutStrategy;
  -    }
  -
  -    /**
        * Public accessor for the parent Driver of this Document
        * @return the parent Driver for this Document
        */
  @@ -135,7 +120,7 @@
       public void foPageSequenceComplete (FOTreeEvent event) throws FOPException {
           PageSequence pageSeq = event.getPageSequence();
           areaTree.addBookmarksToAreaTree();
  -        layoutStrategy.format(pageSeq, areaTree);
  +        format(pageSeq, areaTree);
       }
   
       /**
  @@ -195,4 +180,104 @@
           return foInputHandler;
       }
   
  +    /**
  +     * Runs the formatting of this page sequence into the given area tree
  +     *
  +     * @param pageSeq the PageSequence to be formatted
  +     * @param areaTree the area tree to format this page sequence into
  +     * @throws FOPException if there is an error formatting the contents
  +     */
  +    public void format(PageSequence pageSeq, AreaTree areaTree) throws FOPException {
  +        Title title = null;
  +        if (pageSeq.getTitleFO() != null) {
  +            title = getTitleArea(pageSeq.getTitleFO());
  +        }
  +        areaTree.startPageSequence(title);
  +        // Make a new PageLayoutManager and a FlowLayoutManager
  +        // Run the PLM in a thread
  +        // Wait for them to finish.
  +
  +        // If no main flow, nothing to layout!
  +        if (pageSeq.getMainFlow() == null) {
  +            return;
  +        }
  +
  +        // Initialize if already used?
  +        //    this.layoutMasterSet.resetPageMasters();
  +        if (pageSeq.getPageSequenceMaster() != null) {
  +            pageSeq.getPageSequenceMaster().reset();
  +        }
  +
  +        pageSeq.initPageNumber();
  +
  +        // This will layout pages and add them to the area tree
  +        PageLayoutManager pageLM = new PageLayoutManager(areaTree, pageSeq, this);
  +        pageLM.setPageCounting(pageSeq.getCurrentPageNumber(),
  +                               pageSeq.getPageNumberGenerator());
  +
  +        // For now, skip the threading and just call run directly.
  +        pageLM.run();
  +
  +        // Thread layoutThread = new Thread(pageLM);
  +        //  layoutThread.start();
  +        // log.debug("Layout thread started");
  +        
  +        // // wait on both managers
  +        // try {
  +        //     layoutThread.join();
  +        //     log.debug("Layout thread done");
  +        // } catch (InterruptedException ie) {
  +        //     log.error("PageSequence.format() interrupted waiting on layout");
  +        // }
  +        
  +        pageSeq.setCurrentPageNumber(pageLM.getPageCount());
  +        // Tell the root the last page number we created.
  +        pageSeq.getRoot().setRunningPageNumberCounter(pageSeq.getCurrentPageNumber());
  +    }
  +
  +    /**
  +     * @return the Title area
  +     */
  +    public org.apache.fop.area.Title getTitleArea(org.apache.fop.fo.pagination.Title foTitle) {
  +        // use special layout manager to add the inline areas
  +        // to the Title.
  +        InlineStackingLayoutManager lm;
  +        lm = new InlineStackingLayoutManager(foTitle);
  +        lm.setLMiter(new LMiter(lm, foTitle.children.listIterator()));
  +        lm.initialize();
  +
  +        // get breaks then add areas to title
  +        org.apache.fop.area.Title title =
  +                 new org.apache.fop.area.Title();
  +
  +        ContentLayoutManager clm = new ContentLayoutManager(title);
  +        clm.setUserAgent(foTitle.getUserAgent());
  +        lm.setParent(clm);
  +
  +        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.59      +3 -25     xml-fop/src/java/org/apache/fop/apps/Driver.java
  
  Index: Driver.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/Driver.java,v
  retrieving revision 1.58
  retrieving revision 1.59
  diff -u -r1.58 -r1.59
  --- Driver.java	12 May 2004 23:19:52 -0000	1.58
  +++ Driver.java	18 May 2004 11:42:07 -0000	1.59
  @@ -34,7 +34,6 @@
   import org.apache.fop.tools.DocumentInputSource;
   import org.apache.fop.tools.DocumentReader;
   import org.apache.fop.tools.ProxyContentHandler;
  -import org.apache.fop.layoutmgr.LayoutManagerLS;
   
   import org.apache.commons.logging.impl.SimpleLog;
   import org.apache.commons.logging.Log;
  @@ -509,13 +508,6 @@
               }
           }
           currentDocument.foInputHandler = foInputHandler;
  -        /** LayoutStrategy is hard-wired for now, but needs to be made
  -        accessible through the API and/or configuration */
  -        if (foInputHandler instanceof FOTreeHandler) {
  -            if (currentDocument.getLayoutStrategy() == null) {
  -                currentDocument.setLayoutStrategy(new LayoutManagerLS());
  -            }
  -        }
   
           foInputHandler.setLogger(getLogger());
   
  @@ -561,6 +553,8 @@
        * This is the main render() method. The other render() methods are for
        * convenience, and normalize to this form, then run this.
        * Renders the FO document read by a SAX Parser from an InputSource.
  +     * For versions not needing an FO Tree (e.g., Alt-Design), override this.
  +     *
        * @param parser the SAX parser.
        * @param source the input source the parser reads from.
        * @throws FOPException if anything goes wrong.
  @@ -569,22 +563,6 @@
                   throws FOPException {
           parser.setContentHandler(getContentHandler());
   
  -        /**
  -         * The following statement handles the case of a LayoutStrategy that
  -         * does not wish to build an FO Tree, but wishes to parse the incoming
  -         * document some other way. This applies primarily to the alt-design
  -         * system.
  -         */
  -        if (currentDocument.getLayoutStrategy() != null) {
  -            if (!currentDocument.getLayoutStrategy().foTreeNeeded()) {
  -                currentDocument.getLayoutStrategy().format(null, null);
  -                return;
  -            }
  -        }
  -
  -        /**
  -         * For all other cases, we wish to parse normally.
  -         */
           try {
               /**
                The following statement triggers virtually all of the processing
  
  
  
  1.13      +3 -2      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.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- AbstractLayoutManager.java	15 May 2004 21:51:59 -0000	1.12
  +++ AbstractLayoutManager.java	18 May 2004 11:42:08 -0000	1.13
  @@ -20,6 +20,7 @@
   
   import org.apache.fop.fo.FObj;
   import org.apache.fop.apps.FOUserAgent;
  +import org.apache.fop.apps.Document;
   import org.apache.fop.fo.flow.Marker;
   import org.apache.fop.area.Area;
   import org.apache.fop.area.Resolveable;
  @@ -108,8 +109,8 @@
           return this.parentLM;
       }
   
  -    public LayoutManagerLS getLayoutManagerLS() {
  -        return getParent().getLayoutManagerLS();
  +    public Document getDocument() {
  +        return getParent().getDocument();
       }
   
       //     /**
  
  
  
  1.9       +3 -2      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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ContentLayoutManager.java	21 Mar 2004 12:03:08 -0000	1.8
  +++ ContentLayoutManager.java	18 May 2004 11:42:08 -0000	1.9
  @@ -19,6 +19,7 @@
   package org.apache.fop.layoutmgr;
   
   import org.apache.fop.fo.FObj;
  +import org.apache.fop.apps.Document;
   import org.apache.fop.apps.FOUserAgent;
   import org.apache.fop.fo.flow.Marker;
   import org.apache.fop.area.Area;
  @@ -170,8 +171,8 @@
           return this.parentLM;
       }
   
  -    public LayoutManagerLS getLayoutManagerLS() {
  -        return getParent().getLayoutManagerLS();
  +    public Document getDocument() {
  +        return getParent().getDocument();
       }
   
       /** @see org.apache.fop.layoutmgr.LayoutManager */
  
  
  
  1.6       +1 -1      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.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- LMiter.java	21 Mar 2004 12:03:08 -0000	1.5
  +++ LMiter.java	18 May 2004 11:42:08 -0000	1.6
  @@ -46,7 +46,7 @@
       }
   
       protected boolean preLoadNext() {
  -        AddLMVisitor addLMVisitor = lp.getLayoutManagerLS().getAddLMVisitor();
  +        AddLMVisitor addLMVisitor = lp.getDocument().getAddLMVisitor();
           // skip over child FObj's that don't add lms
           while (baseIter != null && baseIter.hasNext()) {
               Object theobj = baseIter.next();
  
  
  
  1.6       +3 -3      xml-fop/src/java/org/apache/fop/layoutmgr/LayoutManager.java
  
  Index: LayoutManager.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/LayoutManager.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- LayoutManager.java	15 May 2004 21:52:00 -0000	1.5
  +++ LayoutManager.java	18 May 2004 11:42:08 -0000	1.6
  @@ -71,10 +71,10 @@
       LayoutManager 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
  +     * Get the Document object that is at the top of the LM Tree
  +     * @return the Document object that is at the top of the LM Tree
        */
  -    LayoutManagerLS getLayoutManagerLS();
  +    org.apache.fop.apps.Document getDocument();
   
       /**
        * Initialize this layout manager.
  
  
  
  1.37      +10 -8     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.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- PageLayoutManager.java	15 May 2004 21:52:00 -0000	1.36
  +++ PageLayoutManager.java	18 May 2004 11:42:08 -0000	1.37
  @@ -18,6 +18,7 @@
   
   package org.apache.fop.layoutmgr;
   
  +import org.apache.fop.apps.Document;
   import org.apache.fop.apps.FOPException;
   
   import org.apache.fop.area.CTM;
  @@ -106,6 +107,7 @@
        */
       private AreaTree areaTree;
       private PageSequence pageSequence;
  +    private Document doc;
   
       /**
        * This is the SimplePageMaster that should be used to create the page. It
  @@ -121,8 +123,6 @@
        */
       private HashMap staticContentLMs = new HashMap(4);
   
  -    private LayoutManagerLS lmls;
  -
       /**
        * This is the top level layout manager.
        * It is created by the PageSequence FO.
  @@ -131,11 +131,11 @@
        * @param pageseq the page sequence fo
        */
       public PageLayoutManager(AreaTree areaTree, PageSequence pageseq,
  -                             LayoutManagerLS lmls) {
  +        Document doc) {
           super(pageseq);
           this.areaTree = areaTree;
           pageSequence = pageseq;
  -        this.lmls = lmls;
  +        this.doc = doc;
       }
   
       /**
  @@ -895,9 +895,11 @@
           staticContentLMs.put(sc.getFlowName(), lm);
           return lm;
       }
  -
  -    public LayoutManagerLS getLayoutManagerLS() {
  -        return lmls;
  +    
  +    /**
  +     * @return the apps.Document object controlling this generation
  +     */
  +    public Document getDocument() {
  +        return doc;
       }
  -
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org