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