* ============================================================================
* 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;
this.fobj = fo;
foID = fobj.getID();
markers = fobj.getMarkers();
- childLMiter = new LMiter(fobj.getChildren());
+ childLMiter = new LMiter(this, fobj.getChildren());
}
/**
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.
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;
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);
}
}
};
lm.setUserAgent(node.getUserAgent());
lm.setFObj(node);
- lm.setLMiter(new LMiter(node.getChildren()));
+ lm.setLMiter(new LMiter(lm, node.getChildren()));
currentLMList.add(lm);
}
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
private ListIterator proxy;
- public BlockLMiter(ListIterator pr) {
- super(null);
+ public BlockLMiter(LayoutProcessor lp, ListIterator pr) {
+ super(lp, null);
proxy = pr;
}
*/
public void setFObj(FObj fo) {
super.setFObj(fo);
- childLMiter = new BlockLMiter(childLMiter);
+ childLMiter = new BlockLMiter(this, childLMiter);
}
public void setBlockTextInfo(TextInfo ti) {
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;
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);
}
}
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();
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);
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(),
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
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;
+ }
+
}
*/
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.
*/
*/
private HashMap staticContentLMs = new HashMap(4);
+ private LayoutManagerLS lmls;
+
/**
* This is the top level layout manager.
* It is created by the PageSequence FO.
* @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;
}
/**
return lm;
}
+ public LayoutManagerLS getLayoutManagerLS() {
+ return lmls;
+ }
+
}