gmazza 2004/07/06 18:51:50 Modified: src/java/org/apache/fop/area AreaTree.java AreaTreeModel.java CachedRenderPagesModel.java RenderPagesModel.java StorePagesModel.java src/java/org/apache/fop/fo FObj.java src/java/org/apache/fop/fo/pagination Title.java Removed: src/java/org/apache/fop/tools AreaTreeBuilder.java Log: 1.) Moved the Renderer creation further down from AreaTree to RenderPagesModel (subclass of AreaTreeModel). Still have the issue of the four-param constructor a bit messy, also some of the exceptions I have to declare to be thrown may not be necessary. 2.) Removed encapsulation-breaking methods from AreaTree; dropped the AreaTreeBuilder class as it wasn't conformant with our API and required too many objects to expose internal functionality. 3.) Validity checking added for fo:title, however still won't work as #PCDATA needs <fo:blocks> around it within FOP, but the Recommendation bans those for fo:title. 4.) isInlineItem() added to FObj, as a quick check for the %inline; parameter entity as defined in spec. Revision Changes Path 1.15 +16 -97 xml-fop/src/java/org/apache/fop/area/AreaTree.java Index: AreaTree.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/AreaTree.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- AreaTree.java 6 Jul 2004 05:25:09 -0000 1.14 +++ AreaTree.java 7 Jul 2004 01:51:50 -0000 1.15 @@ -18,7 +18,6 @@ package org.apache.fop.area; // Java -import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; @@ -35,11 +34,9 @@ import org.apache.fop.apps.FOPException; import org.apache.fop.apps.FOUserAgent; import org.apache.fop.area.extensions.BookmarkData; -import org.apache.fop.fo.Constants; import org.apache.fop.fo.extensions.Outline; import org.apache.fop.fo.extensions.Bookmarks; import org.apache.fop.fonts.FontInfo; -import org.apache.fop.render.Renderer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -52,12 +49,12 @@ * The area tree needs to be simple to render and follow the spec * closely. * This area tree has the concept of page sequences. - * Where ever possible information is discarded or optimised to - * keep memory use low. The data is also organised to make it - * possible for renderers to minimise their output. + * Where ever possible information is discarded or optimized to + * keep memory use low. The data is also organized to make it + * possible for renderers to minimize their output. * A page can be saved if not fully resolved and once rendered * a page contains only size and id reference information. - * The area tree pages are organised in a model that depends on the + * The area tree pages are organized in a model that depends on the * type of renderer. */ public class AreaTree { @@ -67,8 +64,10 @@ // hashmap of arraylists containing pages with id area private Map idLocations = new HashMap(); + // list of id's yet to be resolved and arraylists of pages private Map resolve = new HashMap(); + private List treeExtensions = new ArrayList(); private static Log log = LogFactory.getLog(AreaTree.class); @@ -76,97 +75,22 @@ private FOUserAgent foUserAgent; /** - * the renderer to use to output the area tree - */ - private Renderer renderer; - - /** * Constructor. + * @param userAgent FOUserAgent object for process + * @param renderType Desired fo.Constants output type (RENDER_PDF, + * RENDER_PS, etc.) + * @param fontInfo FontInfo object + * @param stream OutputStream */ public AreaTree (FOUserAgent userAgent, int renderType, FontInfo fontInfo, OutputStream stream) throws FOPException { foUserAgent = userAgent; - - if (foUserAgent.getRendererOverride() != null) { - renderer = foUserAgent.getRendererOverride(); - } else { - renderer = createRenderer(renderType); - renderer.setUserAgent(foUserAgent); - } - - try { - renderer.setupFontInfo(fontInfo); - // check that the "any,normal,400" font exists - if (!fontInfo.isSetupValid()) { - throw new FOPException( - "No default font defined by OutputConverter"); - } - renderer.startRenderer(stream); - } catch (IOException e) { - throw new FOPException(e); - } - - // this.atModel = new CachedRenderPagesModel(renderer); - setTreeModel(new RenderPagesModel(renderer)); - } - - - /** - * Creates a Renderer object based on render-type desired - * @param renderType the type of renderer to use - * @return Renderer the new Renderer instance - * @throws IllegalArgumentException if an unsupported renderer type was requested - */ - private Renderer createRenderer(int renderType) throws IllegalArgumentException { - - switch (renderType) { - case Constants.RENDER_PDF: - return new org.apache.fop.render.pdf.PDFRenderer(); - case Constants.RENDER_AWT: - return new org.apache.fop.render.awt.AWTRenderer(); - case Constants.RENDER_PRINT: - return new org.apache.fop.render.awt.AWTPrintRenderer(); - case Constants.RENDER_PCL: - return new org.apache.fop.render.pcl.PCLRenderer(); - case Constants.RENDER_PS: - return new org.apache.fop.render.ps.PSRenderer(); - case Constants.RENDER_TXT: - return new org.apache.fop.render.txt.TXTRenderer(); - case Constants.RENDER_XML: - return new org.apache.fop.render.xml.XMLRenderer(); - case Constants.RENDER_SVG: - return new org.apache.fop.render.svg.SVGRenderer(); - default: - throw new IllegalArgumentException("Invalid renderer type " - + renderType); - } - } - - /** - * Temporary accessor for renderer for tools.AreaTreeBuilder - * @return renderer The renderer being used by this area tree - */ - public Renderer getRenderer() { - return renderer; - } - - /** - * Create a new store pages model. - * @return StorePagesModel the new model - */ - public static StorePagesModel createStorePagesModel() { - return new StorePagesModel(); - } - - /** - * Set the tree model to use for this area tree. - * The different models can have different behaviour - * when pages area added and other changes. - * @param m the area tree model - */ - public void setTreeModel(AreaTreeModel m) { - model = m; + + // model = new CachedRenderPagesModel(userAgent, renderType, + // fontInfo, stream); + model = new RenderPagesModel(userAgent, renderType, fontInfo, + stream); } /** @@ -297,11 +221,6 @@ } } model.endDocument(); - try { - renderer.stopRenderer(); - } catch (IOException ex) { - throw new SAXException(ex); - } } /** 1.3 +5 -2 xml-fop/src/java/org/apache/fop/area/AreaTreeModel.java Index: AreaTreeModel.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/AreaTreeModel.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- AreaTreeModel.java 27 Feb 2004 17:41:26 -0000 1.2 +++ AreaTreeModel.java 7 Jul 2004 01:51:50 -0000 1.3 @@ -18,11 +18,14 @@ package org.apache.fop.area; +// XML +import org.xml.sax.SAXException; + /** * This is the model for the area tree object. * The model implementation can handle the page sequence, * page and extensions. - * The mathods to acces the page viewports can only + * The methods to access the page viewports can only * assume the PageViewport is valid as it remains for * the life of the area tree model. */ @@ -49,7 +52,7 @@ /** * Signal the end of the document for any processing. */ - public abstract void endDocument(); + public abstract void endDocument() throws SAXException; /** * Get the page sequence count. 1.4 +9 -4 xml-fop/src/java/org/apache/fop/area/CachedRenderPagesModel.java Index: CachedRenderPagesModel.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/CachedRenderPagesModel.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- CachedRenderPagesModel.java 27 Feb 2004 17:41:26 -0000 1.3 +++ CachedRenderPagesModel.java 7 Jul 2004 01:51:50 -0000 1.4 @@ -18,6 +18,9 @@ package org.apache.fop.area; +import org.apache.fop.apps.FOPException; +import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.fonts.FontInfo; import org.apache.fop.render.Renderer; import java.util.Map; @@ -29,6 +32,7 @@ import java.io.FileInputStream; import java.io.ObjectOutputStream; import java.io.ObjectInputStream; +import java.io.OutputStream; import java.io.BufferedOutputStream; import java.io.BufferedInputStream; @@ -42,11 +46,12 @@ private Map pageMap = new HashMap(); /** - * Create a new render pages model with the given renderer. - * @param rend the renderer to render pages to + * Constructor + * @see org.apache.fop.area.RenderPagesModel(FOUserAgent, int, FontInfo, OutputStream) */ - public CachedRenderPagesModel(Renderer rend) { - super(rend); + public CachedRenderPagesModel (FOUserAgent userAgent, int renderType, + FontInfo fontInfo, OutputStream stream) throws FOPException { + super(userAgent, renderType, fontInfo, stream); } /** 1.3 +77 -7 xml-fop/src/java/org/apache/fop/area/RenderPagesModel.java Index: RenderPagesModel.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/RenderPagesModel.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- RenderPagesModel.java 27 Feb 2004 17:41:26 -0000 1.2 +++ RenderPagesModel.java 7 Jul 2004 01:51:50 -0000 1.3 @@ -18,13 +18,22 @@ package org.apache.fop.area; -// FOP -import org.apache.fop.render.Renderer; - // Java +import java.io.IOException; +import java.io.OutputStream; import java.util.List; import java.util.Iterator; +// XML +import org.xml.sax.SAXException; + +// FOP +import org.apache.fop.apps.FOPException; +import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.fo.Constants; +import org.apache.fop.fonts.FontInfo; +import org.apache.fop.render.Renderer; + /** * This uses the store pages model to store the pages * each page is either rendered if ready or prepared @@ -38,6 +47,7 @@ * The renderer that will render the pages. */ protected Renderer renderer; + /** * Pages that have been prepared but not rendered yet. */ @@ -47,10 +57,64 @@ /** * Create a new render pages model with the given renderer. - * @param rend the renderer to render pages to + * @param userAgent FOUserAgent object for process + * @param renderType Desired fo.Constants output type (RENDER_PDF, + * RENDER_PS, etc.) + * @param fontInfo FontInfo object + * @param stream OutputStream */ - public RenderPagesModel(Renderer rend) { - renderer = rend; + public RenderPagesModel (FOUserAgent userAgent, int renderType, + FontInfo fontInfo, OutputStream stream) throws FOPException { + + if (userAgent.getRendererOverride() != null) { + renderer = userAgent.getRendererOverride(); + } else { + renderer = createRenderer(renderType); + renderer.setUserAgent(userAgent); + } + + try { + renderer.setupFontInfo(fontInfo); + // check that the "any,normal,400" font exists + if (!fontInfo.isSetupValid()) { + throw new FOPException( + "No default font defined by OutputConverter"); + } + renderer.startRenderer(stream); + } catch (IOException e) { + throw new FOPException(e); + } + } + + /** + * Creates a Renderer object based on render-type desired + * @param renderType the type of renderer to use + * @return Renderer the new Renderer instance + * @throws IllegalArgumentException if an unsupported renderer type was requested + */ + private Renderer createRenderer(int renderType) throws IllegalArgumentException { + + switch (renderType) { + case Constants.RENDER_PDF: + return new org.apache.fop.render.pdf.PDFRenderer(); + case Constants.RENDER_AWT: + return new org.apache.fop.render.awt.AWTRenderer(); + case Constants.RENDER_PRINT: + return new org.apache.fop.render.awt.AWTPrintRenderer(); + case Constants.RENDER_PCL: + return new org.apache.fop.render.pcl.PCLRenderer(); + case Constants.RENDER_PS: + return new org.apache.fop.render.ps.PSRenderer(); + case Constants.RENDER_TXT: + return new org.apache.fop.render.txt.TXTRenderer(); + case Constants.RENDER_XML: + return new org.apache.fop.render.xml.XMLRenderer(); + case Constants.RENDER_SVG: + return new org.apache.fop.render.svg.SVGRenderer(); + default: + throw new IllegalArgumentException("Invalid renderer type " + + renderType); + } } /** @@ -178,7 +242,7 @@ /** * End the document. Render any end document extensions. */ - public void endDocument() { + public void endDocument() throws SAXException { // render any pages that had unresolved ids checkPreparedPages(null); @@ -186,6 +250,12 @@ pendingExt.clear(); renderExtensions(endDocExt); + + try { + renderer.stopRenderer(); + } catch (IOException ex) { + throw new SAXException(ex); + } } } 1.4 +5 -1 xml-fop/src/java/org/apache/fop/area/StorePagesModel.java Index: StorePagesModel.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/StorePagesModel.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- StorePagesModel.java 27 Feb 2004 17:41:26 -0000 1.3 +++ StorePagesModel.java 7 Jul 2004 01:51:50 -0000 1.4 @@ -21,6 +21,10 @@ // Java import java.util.List; +// XML +import org.xml.sax.SAXException; + + /** * This class stores all the pages in the document * for interactive agents. @@ -142,6 +146,6 @@ /** * End document, do nothing. */ - public void endDocument() { + public void endDocument() throws SAXException { } } 1.49 +30 -4 xml-fop/src/java/org/apache/fop/fo/FObj.java Index: FObj.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FObj.java,v retrieving revision 1.48 retrieving revision 1.49 diff -u -r1.48 -r1.49 --- FObj.java 4 Jul 2004 04:50:54 -0000 1.48 +++ FObj.java 7 Jul 2004 01:51:50 -0000 1.49 @@ -445,7 +445,7 @@ * Convenience method for validity checking. Checks if the * incoming node is a member of the "%block;" parameter entity * as defined in Sect. 6.2 of the XSL 1.0 & 1.1 Recommendations - * @param nsURI namespace URI of incoming invalid node + * @param nsURI namespace URI of incoming node * @param lName local name (i.e., no prefix) of incoming node * @return true if a member, false if not */ @@ -456,15 +456,40 @@ || lName.equals("table-and-caption") || lName.equals("block-container") || lName.equals("list-block") - || lName.equals("float"))) - || isNeutralItem(nsURI, lName); + || lName.equals("float") + || isNeutralItem(nsURI, lName))); + } + + /** + * Convenience method for validity checking. Checks if the + * incoming node is a member of the "%inline;" parameter entity + * as defined in Sect. 6.2 of the XSL 1.0 & 1.1 Recommendations + * @param nsURI namespace URI of incoming node + * @param lName local name (i.e., no prefix) of incoming node + * @return true if a member, false if not + */ + protected static boolean isInlineItem(String nsURI, String lName) { + return (nsURI == FOElementMapping.URI && + (lName.equals("bidi-override") + || lName.equals("character") + || lName.equals("external-graphic") + || lName.equals("instream-foreign-object") + || lName.equals("inline") + || lName.equals("inline-container") + || lName.equals("leader") + || lName.equals("page-number") + || lName.equals("page-number-citation") + || lName.equals("basic-link") + || lName.equals("multi-toggle") + || lName.equals("footnote") // temp only -- not always correct (see spec) + || isNeutralItem(nsURI, lName))); } /** * Convenience method for validity checking. Checks if the * incoming node is a member of the neutral item list * as defined in Sect. 6.2 of the XSL 1.0 & 1.1 Recommendations - * @param nsURI namespace URI of incoming invalid node + * @param nsURI namespace URI of incoming node * @param lName local name (i.e., no prefix) of incoming node * @return true if a member, false if not */ @@ -473,6 +498,7 @@ (lName.equals("multi-switch") || lName.equals("multi-properties") || lName.equals("wrapper") + || lName.equals("float") // temp only -- not always correct (see spec) || lName.equals("retrieve-marker"))); } } 1.20 +15 -1 xml-fop/src/java/org/apache/fop/fo/pagination/Title.java Index: Title.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/pagination/Title.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- Title.java 18 Jun 2004 04:13:53 -0000 1.19 +++ Title.java 7 Jul 2004 01:51:50 -0000 1.20 @@ -18,6 +18,10 @@ package org.apache.fop.fo.pagination; +// XML +import org.xml.sax.Attributes; +import org.xml.sax.Locator; + // FOP import org.apache.fop.datatypes.ColorType; import org.apache.fop.datatypes.Length; @@ -44,6 +48,16 @@ */ public Title(FONode parent) { super(parent); + } + + /** + * @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String) + XSL/FOP: (#PCDATA|%inline;)* + */ + protected void validateChildNode(Locator loc, String nsURI, String localName) { + if (!isInlineItem(nsURI, localName)) { + invalidChildError(loc, nsURI, localName); + } } private void setup() {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]