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]