aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/org/apache')
-rw-r--r--src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java30
-rw-r--r--src/java/org/apache/fop/layoutmgr/AddLMVisitor.java22
-rw-r--r--src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java6
-rw-r--r--src/java/org/apache/fop/layoutmgr/ContentLayoutManager.java8
-rw-r--r--src/java/org/apache/fop/layoutmgr/LMiter.java7
-rw-r--r--src/java/org/apache/fop/layoutmgr/LayoutManagerLS.java28
-rw-r--r--src/java/org/apache/fop/layoutmgr/LayoutProcessor.java12
-rw-r--r--src/java/org/apache/fop/layoutmgr/PageLayoutManager.java10
8 files changed, 101 insertions, 22 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java b/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java
index 7f113b851..cc8f85d07 100644
--- a/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java
@@ -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
@@ -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 <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.
diff --git a/src/java/org/apache/fop/layoutmgr/AddLMVisitor.java b/src/java/org/apache/fop/layoutmgr/AddLMVisitor.java
index 36278a558..600ca2449 100644
--- a/src/java/org/apache/fop/layoutmgr/AddLMVisitor.java
+++ b/src/java/org/apache/fop/layoutmgr/AddLMVisitor.java
@@ -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
diff --git a/src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java b/src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
index 7b0cf26a0..0681fdb27 100644
--- a/src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
@@ -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) {
diff --git a/src/java/org/apache/fop/layoutmgr/ContentLayoutManager.java b/src/java/org/apache/fop/layoutmgr/ContentLayoutManager.java
index c6d07d335..ad92d7ca8 100644
--- a/src/java/org/apache/fop/layoutmgr/ContentLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/ContentLayoutManager.java
@@ -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;
diff --git a/src/java/org/apache/fop/layoutmgr/LMiter.java b/src/java/org/apache/fop/layoutmgr/LMiter.java
index 0fee8cdf7..8ace2a2ad 100644
--- a/src/java/org/apache/fop/layoutmgr/LMiter.java
+++ b/src/java/org/apache/fop/layoutmgr/LMiter.java
@@ -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();
diff --git a/src/java/org/apache/fop/layoutmgr/LayoutManagerLS.java b/src/java/org/apache/fop/layoutmgr/LayoutManagerLS.java
index 1f8dd7dc7..fc78984a1 100644
--- a/src/java/org/apache/fop/layoutmgr/LayoutManagerLS.java
+++ b/src/java/org/apache/fop/layoutmgr/LayoutManagerLS.java
@@ -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;
+ }
+
}
diff --git a/src/java/org/apache/fop/layoutmgr/LayoutProcessor.java b/src/java/org/apache/fop/layoutmgr/LayoutProcessor.java
index 1f3902df2..e4c85ffb6 100644
--- a/src/java/org/apache/fop/layoutmgr/LayoutProcessor.java
+++ b/src/java/org/apache/fop/layoutmgr/LayoutProcessor.java
@@ -74,6 +74,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.
*/
void init();
diff --git a/src/java/org/apache/fop/layoutmgr/PageLayoutManager.java b/src/java/org/apache/fop/layoutmgr/PageLayoutManager.java
index 76cb1ceca..9861423c5 100644
--- a/src/java/org/apache/fop/layoutmgr/PageLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/PageLayoutManager.java
@@ -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;
+ }
+
}