keiron 02/05/27 05:34:19 Modified: src/org/apache/fop/apps Driver.java Fop.java src/org/apache/fop/extensions Bookmarks.java src/org/apache/fop/fo FONode.java FOTreeBuilder.java FObj.java FObjMixed.java src/org/apache/fop/fo/flow Block.java src/org/apache/fop/fo/pagination PageSequence.java src/org/apache/fop/layout AreaTree.java Added: src/org/apache/fop/apps LayoutHandler.java StructureHandler.java Removed: src/org/apache/fop/apps StreamRenderer.java Log: start of structure handler concept and adjusted the layout handling appropriately Revision Changes Path 1.48 +4 -4 xml-fop/src/org/apache/fop/apps/Driver.java Index: Driver.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/apps/Driver.java,v retrieving revision 1.47 retrieving revision 1.48 diff -u -r1.47 -r1.48 --- Driver.java 22 Apr 2002 13:23:20 -0000 1.47 +++ Driver.java 27 May 2002 12:34:18 -0000 1.48 @@ -1,5 +1,5 @@ /* - * $Id: Driver.java,v 1.47 2002/04/22 13:23:20 keiron Exp $ + * $Id: Driver.java,v 1.48 2002/05/27 12:34:18 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -453,11 +453,11 @@ * events but isn't a SAX Parser itself. */ public ContentHandler getContentHandler() { - StreamRenderer streamRenderer = new StreamRenderer(_stream, _renderer); - streamRenderer.setLogger(getLogger()); + StructureHandler handler = new LayoutHandler(_stream, _renderer, true); + handler.setLogger(getLogger()); _treeBuilder.setLogger(getLogger()); _treeBuilder.setUserAgent(getUserAgent()); - _treeBuilder.setStreamRenderer(streamRenderer); + _treeBuilder.setStructHandler(handler); return _treeBuilder; } 1.11 +3 -3 xml-fop/src/org/apache/fop/apps/Fop.java Index: Fop.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/apps/Fop.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- Fop.java 8 Jan 2002 09:52:16 -0000 1.10 +++ Fop.java 27 May 2002 12:34:18 -0000 1.11 @@ -1,5 +1,5 @@ /* - * $Id: Fop.java,v 1.10 2002/01/08 09:52:16 keiron Exp $ + * $Id: Fop.java,v 1.11 2002/05/27 12:34:18 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -17,8 +17,8 @@ Starter starter = options.getStarter(); starter.run(); } catch (FOPException e) { - if("null".equals(e.getMessage())) { - System.err.println("NullPointerException"); + if("null".equals("" + e.getMessage())) { + System.err.println("Exception occured with a null error message"); } else { System.err.println("" + e.getMessage()); } 1.1 xml-fop/src/org/apache/fop/apps/LayoutHandler.java Index: LayoutHandler.java =================================================================== package org.apache.fop.apps; import java.io.OutputStream; import java.io.IOException; import java.util.HashSet; import org.xml.sax.SAXException; import org.apache.fop.layout.FontInfo; import org.apache.fop.area.PageViewport; import org.apache.fop.area.AreaTree; import org.apache.fop.area.Title; import org.apache.fop.render.Renderer; import org.apache.fop.fo.pagination.PageSequence; import org.apache.avalon.framework.logger.Logger; /** * Layout handler that receives the structure events. * This initiates layout processes and corresponding * rendering processes such as start/end. */ public class LayoutHandler extends StructureHandler { private static final boolean MEM_PROFILE_WITH_GC = false; /** Somewhere to get our stats from. */ private Runtime runtime = Runtime.getRuntime(); /** Keep track of the number of pages rendered. */ int pageCount = 0; /** Keep track of heap memory allocated, for statistical purposes. */ private long initialMemory; /** Keep track of time used by renderer. */ private long startTime; /** The stream to which this rendering is to be written to. <B>Note</B> that some renderers do not render to a stream, and that this member can therefore be null. */ private OutputStream outputStream; /** The renderer being used. */ private Renderer renderer; /** The FontInfo for this renderer. */ private FontInfo fontInfo = new FontInfo(); /** * The current AreaTree for the PageSequence being rendered. */ private AreaTree areaTree; private AreaTree.StorePagesModel atModel; /** * @param outputStream the stream that the result is rendered to * @param renderer the renderer to call * @param store if true then use the store pages model and keep the * area tree in memory */ public LayoutHandler(OutputStream outputStream, Renderer renderer, boolean store) { this.outputStream = outputStream; this.renderer = renderer; this.areaTree = new AreaTree(); this.atModel = AreaTree.createStorePagesModel(); areaTree.setTreeModel(atModel); } public AreaTree getAreaTree() { return areaTree; } public void startDocument() throws SAXException { pageCount = 0; if (MEM_PROFILE_WITH_GC) System.gc(); // This takes time but gives better results initialMemory = runtime.totalMemory() - runtime.freeMemory(); startTime = System.currentTimeMillis(); try { renderer.setupFontInfo(fontInfo); renderer.startRenderer(outputStream); } catch (IOException e) { throw new SAXException(e); } } public void endDocument() throws SAXException { /* Force the processing of any more queue elements, even if they are not resolved. */ try { //processQueue(true); processAreaTree(); renderer.stopRenderer(); } catch (FOPException e) { throw new SAXException(e); } catch (IOException e) { throw new SAXException(e); } if (MEM_PROFILE_WITH_GC) System.gc(); // This takes time but gives better results long memoryNow = runtime.totalMemory() - runtime.freeMemory(); long memoryUsed = (memoryNow - initialMemory) / 1024L; log.debug("Initial heap size: " + (initialMemory / 1024L) + "Kb"); log.debug("Current heap size: " + (memoryNow / 1024L) + "Kb"); log.debug("Total memory used: " + memoryUsed + "Kb"); if (!MEM_PROFILE_WITH_GC) { log.debug(" Memory use is indicative; no GC was performed"); log.debug(" These figures should not be used comparatively"); } long timeUsed = System.currentTimeMillis() - startTime; log.debug("Total time used: " + timeUsed + "ms"); log.debug("Pages rendered: " + pageCount); //log.debug("Avg render time: " + (timeUsed / pageCount) + "ms/page"); } /** Format the PageSequence. The PageSequence formats Pages and adds them to the AreaTree, which subsequently calls the StreamRenderer instance (this) again to render the page. At this time the page might be printed or it might be queued. A page might not be renderable immediately if the IDReferences are not all valid. In this case we defer the rendering until they are all valid. */ public void endPageSequence(PageSequence pageSequence) throws FOPException { //areaTree.setFontInfo(fontInfo); pageSequence.format(areaTree); } private void processAreaTree() throws FOPException { int count = 0; int seqc = atModel.getPageSequenceCount(); while (count < seqc) { Title title = atModel.getTitle(count); renderer.startPageSequence(title); int pagec = atModel.getPageCount(count); for (int c = 0; c < pagec; c++) { try { renderer.renderPage(atModel.getPage(count, c)); } catch (java.io.IOException ioex) { throw new FOPException("I/O Error rendering page", ioex); } } count++; } } public FontInfo getFontInfo() { return this.fontInfo; } } 1.1 xml-fop/src/org/apache/fop/apps/StructureHandler.java Index: StructureHandler.java =================================================================== /* * $Id: StructureHandler.java,v 1.1 2002/05/27 12:34:19 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. */ package org.apache.fop.apps; // Java import java.util.HashSet; import org.apache.avalon.framework.logger.Logger; import org.apache.fop.fo.pagination.PageSequence; import org.apache.fop.layout.FontInfo; import org.xml.sax.SAXException; /** * This class receives structure events from the FO Tree. * Sub-classes can then implement various methods to handle * the FO Tree when the SAX events occur. */ public class StructureHandler { /** The current set of id's in the FO tree This is used so we know if the FO tree contains duplicates */ private HashSet idReferences = new HashSet(); protected Logger log; public StructureHandler() { } public void setLogger(Logger logger) { log = logger; } public HashSet getIDReferences() { return idReferences; } public FontInfo getFontInfo() { return null; } public void startDocument() throws SAXException { } public void endDocument() throws SAXException { } public void startPageSequence() { } public void endPageSequence(PageSequence pageSeq) throws FOPException { } public void setPageInfo() { } public void startBlock() { } public void endBlock() { } // Tables public void startTable() { } public void endTable() { } public void startHeader() { } public void endHeader() { } public void startFooter() { } public void endFooter() { } public void startBody() { } public void endBody() { } public void startRow() { } public void endRow() { } public void startCell() { } public void endCell() { } // Lists public void startList() { } public void endList() { } public void startListItem() { } public void endListItem() { } public void startListLabel() { } public void endListLabel() { } public void startListBody() { } public void endListBody() { } // Static Regions public void startStatic() { } public void endStatic() { } public void startMarkup() { } public void endMarkup() { } public void startLink() { } public void endLink() { } public void image() { } public void pageRef() { } public void foreignObject() { } public void footnote() { } public void leader() { } public void characters() { } public void pageBreak() { } } 1.3 +6 -3 xml-fop/src/org/apache/fop/extensions/Bookmarks.java Index: Bookmarks.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/extensions/Bookmarks.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Bookmarks.java 23 May 2002 06:27:12 -0000 1.2 +++ Bookmarks.java 27 May 2002 12:34:19 -0000 1.3 @@ -1,5 +1,5 @@ /* - * $Id: Bookmarks.java,v 1.2 2002/05/23 06:27:12 keiron Exp $ + * $Id: Bookmarks.java,v 1.3 2002/05/27 12:34:19 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -7,6 +7,7 @@ package org.apache.fop.extensions; +import org.apache.fop.apps.LayoutHandler; import org.apache.fop.fo.FONode; import org.apache.fop.area.AreaTree; @@ -40,8 +41,10 @@ data.addSubData(out.getData()); } // add data to area tree for resolving and handling - AreaTree at = streamRenderer.getAreaTree(); - at.addTreeExtension(data); + if(structHandler instanceof LayoutHandler) { + AreaTree at = ((LayoutHandler)structHandler).getAreaTree(); + at.addTreeExtension(data); + } } } 1.28 +3 -3 xml-fop/src/org/apache/fop/fo/FONode.java Index: FONode.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FONode.java,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- FONode.java 11 Apr 2002 09:33:29 -0000 1.27 +++ FONode.java 27 May 2002 12:34:19 -0000 1.28 @@ -1,5 +1,5 @@ /* - * $Id: FONode.java,v 1.27 2002/04/11 09:33:29 keiron Exp $ + * $Id: FONode.java,v 1.28 2002/05/27 12:34:19 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -9,7 +9,7 @@ // FOP import org.apache.fop.apps.FOPException; -import org.apache.fop.apps.StreamRenderer; +import org.apache.fop.apps.StructureHandler; import org.apache.fop.layout.Area; import org.apache.fop.util.CharUtilities; @@ -48,7 +48,7 @@ userAgent = ua; } - public void setStreamRenderer(StreamRenderer st) { + public void setStructHandler(StructureHandler st) { } public void handleAttrs(Attributes attlist) throws FOPException { 1.37 +9 -9 xml-fop/src/org/apache/fop/fo/FOTreeBuilder.java Index: FOTreeBuilder.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FOTreeBuilder.java,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- FOTreeBuilder.java 11 Apr 2002 09:33:30 -0000 1.36 +++ FOTreeBuilder.java 27 May 2002 12:34:19 -0000 1.37 @@ -1,5 +1,5 @@ /* - * $Id: FOTreeBuilder.java,v 1.36 2002/04/11 09:33:30 keiron Exp $ + * $Id: FOTreeBuilder.java,v 1.37 2002/05/27 12:34:19 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -10,7 +10,7 @@ // FOP import org.apache.fop.layout.AreaTree; import org.apache.fop.apps.FOPException; -import org.apache.fop.apps.StreamRenderer; +import org.apache.fop.apps.StructureHandler; import org.apache.fop.fo.pagination.Root; import org.apache.fop.fo.pagination.PageSequence; import org.apache.fop.extensions.ExtensionObj; @@ -70,7 +70,7 @@ * The class that handles formatting and rendering to a stream * ([EMAIL PROTECTED]) */ - private StreamRenderer streamRenderer; + private StructureHandler structHandler; private Logger log; private FOUserAgent userAgent; @@ -89,8 +89,8 @@ } - public void setStreamRenderer(StreamRenderer streamRenderer) { - this.streamRenderer = streamRenderer; + public void setStructHandler(StructureHandler sh) { + this.structHandler = sh; } /** @@ -131,13 +131,13 @@ throws SAXException { rootFObj = null; // allows FOTreeBuilder to be reused log.info("building formatting object tree"); - streamRenderer.startRenderer(); + structHandler.startDocument(); } public void endDocument() throws SAXException { log.info("Parsing of document complete, stopping renderer"); - streamRenderer.stopRenderer(); + structHandler.endDocument(); } /** @@ -185,7 +185,7 @@ fobj.setUserAgent(userAgent); // set the stream renderer so that appropriate // elements can add pages and handle resolving references - fobj.setStreamRenderer(streamRenderer); + fobj.setStructHandler(structHandler); fobj.handleAttrs(attlist); } catch (FOPException e) { @@ -209,7 +209,7 @@ public void reset() { currentFObj = null; rootFObj = null; - streamRenderer = null; + structHandler = null; } public boolean hasData() { 1.32 +6 -6 xml-fop/src/org/apache/fop/fo/FObj.java Index: FObj.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FObj.java,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- FObj.java 23 May 2002 06:27:12 -0000 1.31 +++ FObj.java 27 May 2002 12:34:19 -0000 1.32 @@ -1,5 +1,5 @@ /* - * $Id: FObj.java,v 1.31 2002/05/23 06:27:12 keiron Exp $ + * $Id: FObj.java,v 1.32 2002/05/27 12:34:19 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -11,7 +11,7 @@ import org.apache.fop.layout.Area; import org.apache.fop.layout.AreaClass; import org.apache.fop.apps.FOPException; -import org.apache.fop.apps.StreamRenderer; +import org.apache.fop.apps.StructureHandler; import org.apache.fop.layoutmgr.LayoutManager; import org.apache.fop.fo.properties.FOPropertyMapping; import org.apache.fop.layout.Area; @@ -34,7 +34,7 @@ * base class for representation of formatting objects and their processing */ public class FObj extends FONode { - protected StreamRenderer streamRenderer; + protected StructureHandler structHandler; public PropertyList properties; protected PropertyManager propMgr; protected String areaClass = AreaClass.UNASSIGNED; @@ -135,8 +135,8 @@ children.add(child); } - public void setStreamRenderer(StreamRenderer st) { - streamRenderer = st; + public void setStructHandler(StructureHandler st) { + structHandler = st; } /** @@ -154,7 +154,7 @@ if(prop != null) { String str = prop.getString(); if(str != null && !str.equals("")) { - HashSet idrefs = streamRenderer.getIDReferences(); + HashSet idrefs = structHandler.getIDReferences(); if(!idrefs.contains(str)) { id = str; idrefs.add(id); 1.25 +4 -3 xml-fop/src/org/apache/fop/fo/FObjMixed.java Index: FObjMixed.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FObjMixed.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- FObjMixed.java 23 May 2002 06:27:12 -0000 1.24 +++ FObjMixed.java 27 May 2002 12:34:19 -0000 1.25 @@ -1,5 +1,5 @@ /* - * $Id: FObjMixed.java,v 1.24 2002/05/23 06:27:12 keiron Exp $ + * $Id: FObjMixed.java,v 1.25 2002/05/27 12:34:19 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -11,7 +11,7 @@ import org.apache.fop.layout.FontState; import org.apache.fop.layout.FontInfo; import org.apache.fop.apps.FOPException; -import org.apache.fop.apps.StreamRenderer; +import org.apache.fop.apps.StructureHandler; import org.apache.fop.datatypes.ColorType; import org.apache.fop.layoutmgr.InlineStackingBPLayoutManager; import org.apache.fop.layoutmgr.LMiter; @@ -30,7 +30,8 @@ super(parent); } - public void setStreamRenderer(StreamRenderer st) { + public void setStructHandler(StructureHandler st) { + super.setStructHandler(st); fontInfo = st.getFontInfo(); } 1.55 +1 -2 xml-fop/src/org/apache/fop/fo/flow/Block.java Index: Block.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Block.java,v retrieving revision 1.54 retrieving revision 1.55 diff -u -r1.54 -r1.55 --- Block.java 23 May 2002 06:27:13 -0000 1.54 +++ Block.java 27 May 2002 12:34:19 -0000 1.55 @@ -1,5 +1,5 @@ /* - * $Id: Block.java,v 1.54 2002/05/23 06:27:13 keiron Exp $ + * $Id: Block.java,v 1.55 2002/05/27 12:34:19 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -16,7 +16,6 @@ import org.apache.fop.layoutmgr.LayoutManager; import org.apache.fop.layoutmgr.BlockLayoutManager; import org.apache.fop.util.CharUtilities; -import org.apache.fop.apps.StreamRenderer; import org.xml.sax.Attributes; 1.49 +2 -13 xml-fop/src/org/apache/fop/fo/pagination/PageSequence.java Index: PageSequence.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/pagination/PageSequence.java,v retrieving revision 1.48 retrieving revision 1.49 diff -u -r1.48 -r1.49 --- PageSequence.java 23 May 2002 06:27:14 -0000 1.48 +++ PageSequence.java 27 May 2002 12:34:19 -0000 1.49 @@ -1,5 +1,5 @@ /* - * $Id: PageSequence.java,v 1.48 2002/05/23 06:27:14 keiron Exp $ + * $Id: PageSequence.java,v 1.49 2002/05/27 12:34:19 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -21,7 +21,6 @@ import org.apache.fop.area.AreaTree; import org.apache.fop.area.PageViewport; import org.apache.fop.apps.FOPException; -import org.apache.fop.apps.StreamRenderer; import org.apache.fop.layoutmgr.PageLayoutManager; @@ -48,11 +47,6 @@ // associations // /** - * Use to layout and render the page sequence. - */ - private StreamRenderer streamRenderer; - - /** * The parent root object */ private Root root; @@ -271,14 +265,9 @@ } } - - public void setStreamRenderer(StreamRenderer st) { - this.streamRenderer = st; - } - public void end() { try { - this.streamRenderer.render(this); + this.structHandler.endPageSequence(this); } catch (FOPException fopex) { log.error("Error in PageSequence.end(): " + fopex.getMessage()); 1.16 +2 -6 xml-fop/src/org/apache/fop/layout/AreaTree.java Index: AreaTree.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layout/AreaTree.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- AreaTree.java 23 May 2002 06:27:14 -0000 1.15 +++ AreaTree.java 27 May 2002 12:34:19 -0000 1.16 @@ -1,5 +1,5 @@ /* - * $Id: AreaTree.java,v 1.15 2002/05/23 06:27:14 keiron Exp $ + * $Id: AreaTree.java,v 1.16 2002/05/27 12:34:19 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -9,7 +9,6 @@ // FOP import org.apache.fop.apps.FOPException; -import org.apache.fop.apps.StreamRenderer; import org.apache.fop.fo.flow.StaticContent; import org.apache.fop.svg.*; import org.apache.fop.render.Renderer; @@ -49,10 +48,7 @@ */ Vector rootExtensions = null; - private StreamRenderer streamRenderer; - - public AreaTree(StreamRenderer streamRenderer) { - this.streamRenderer = streamRenderer; + public AreaTree() { } public void setFontInfo(FontInfo fontInfo) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]