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/06/27 15:29:32 UTC
cvs commit: xml-fop/src/java/org/apache/fop/render/awt AWTRenderer.java
gmazza 2004/06/27 06:29:32
Modified: src/java/org/apache/fop/apps Driver.java FOUserAgent.java
src/java/org/apache/fop/fo Constants.java
FOInputHandler.java FOTreeHandler.java
src/java/org/apache/fop/fo/pagination Flow.java
src/java/org/apache/fop/render/awt AWTRenderer.java
Log:
1.) Moved Renderer instantiation from Driver to FOTreeHandler, as it is the only
FOInputHandler subclass concerned with Renderer creation. (MIFHandler and RTFHandler
are hardcoded to a particular renderer-type).
2.) Added a RendererOverride member variable in FOUserAgent, for use by
AWTRenderer as well as external (i.e. user-defined) renderers. FOTreeHandler coded
to reference it.
3.) Flow validity checking which was added yesterday temporarily commented-out;
I misread the content model from the spec (I will have to account for fo:markers
as initial children.)
Revision Changes Path
1.77 +58 -101 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.76
retrieving revision 1.77
diff -u -r1.76 -r1.77
--- Driver.java 26 Jun 2004 19:37:13 -0000 1.76
+++ Driver.java 27 Jun 2004 13:29:32 -0000 1.77
@@ -35,7 +35,6 @@
import org.apache.fop.fo.FOTreeBuilder;
import org.apache.fop.fo.FOInputHandler;
import org.apache.fop.fo.FOTreeHandler;
-import org.apache.fop.render.Renderer;
import org.apache.fop.render.awt.AWTRenderer;
import org.apache.fop.render.mif.MIFHandler;
import org.apache.fop.render.rtf.RTFHandler;
@@ -57,16 +56,16 @@
* driver.setRenderer(RENDER_PDF);
* driver.run();
* </PRE>
- * If neccessary, calling classes can call into the lower level
+ * If necessary, calling classes can call into the lower level
* methods to setup and
- * render. Methods can be called to set the
+ * render. Methods within FOUserAgent can be called to set the
* Renderer to use, the (possibly multiple) ElementMapping(s) to
* use and the OutputStream to use to output the results of the
- * rendering (where applicable). In the case of the Renderer and
+ * rendering (where applicable). In the case of
* ElementMapping(s), the Driver may be supplied either with the
* object itself, or the name of the class, in which case Driver will
* instantiate the class itself. The advantage of the latter is it
- * enables runtime determination of Renderer and ElementMapping(s).
+ * enables runtime determination of ElementMapping(s).
* <P>
* Once the Driver is set up, the render method
* is called. Depending on whether DOM or SAX is being used, the
@@ -83,7 +82,7 @@
*
* <PRE>
* Driver driver = new Driver();
- * driver.setRenderer(new org.apache.fop.render.awt.AWTRenderer(translator));
+ * driver.setRenderer(RENDER_AWT);
* driver.render(parser, fileInputSource(args[0]));
* </PRE>
*/
@@ -100,11 +99,6 @@
private int rendererType = NOT_SET;
/**
- * the renderer to use to output the area tree
- */
- private Renderer renderer;
-
- /**
* the SAX ContentHandler
*/
private FOInputHandler foInputHandler;
@@ -127,7 +121,7 @@
/**
* The system resources that FOP will use
*/
- private FOUserAgent userAgent = null;
+ private FOUserAgent foUserAgent = null;
/**
* Main constructor for the Driver class.
@@ -142,7 +136,8 @@
*/
public Driver(AWTRenderer renderer) {
this();
- setRenderer(renderer);
+ rendererType = RENDER_AWT;
+ foUserAgent = renderer.getUserAgent();
}
/**
@@ -171,15 +166,30 @@
}
/**
+ * Resets the Driver so it can be reused. Property and element
+ * mappings are reset to defaults.
+ * The output stream is cleared. The renderer is cleared.
+ */
+ public synchronized void reset() {
+ source = null;
+ stream = null;
+ reader = null;
+ if (treeBuilder != null) {
+ treeBuilder.reset();
+ }
+ }
+
+ /**
* Optionally sets the FOUserAgent instance for FOP to use. The Driver
* class sets up its own FOUserAgent if none is set through this method.
* @param agent FOUserAgent to use
*/
- public void setUserAgent(FOUserAgent agent) {
- userAgent = agent;
- if (renderer != null) {
- renderer.setUserAgent(userAgent);
+ public void setUserAgent(FOUserAgent agent) throws FOPException {
+ if (foUserAgent != null) {
+ throw new IllegalStateException("FOUserAgent " +
+ "instance already set.");
}
+ foUserAgent = agent;
}
/**
@@ -187,24 +197,10 @@
* @return the user agent
*/
public FOUserAgent getUserAgent() {
- if (userAgent == null) {
- userAgent = new FOUserAgent();
- }
- return userAgent;
- }
-
- /**
- * Resets the Driver so it can be reused. Property and element
- * mappings are reset to defaults.
- * The output stream is cleared. The renderer is cleared.
- */
- public synchronized void reset() {
- source = null;
- stream = null;
- reader = null;
- if (treeBuilder != null) {
- treeBuilder.reset();
+ if (foUserAgent == null) {
+ foUserAgent = new FOUserAgent();
}
+ return foUserAgent;
}
/**
@@ -241,68 +237,30 @@
}
/**
- * Method to set the rendering type to use. Must be one of
+ * Method to set the rendering type desired. Must be one of
* <ul>
- * <li>RENDER_PDF</li>
- * <li>RENDER_AWT</li>
- * <li>RENDER_PRINT</li>
- * <li>RENDER_MIF</li>
- * <li>RENDER_XML</li>
- * <li>RENDER_PCL</li>
- * <li>RENDER_PS</li>
- * <li>RENDER_TXT</li>
- * <li>RENDER_SVG</li>
- * <li>RENDER_RTF</li>
+ * <li>Driver.RENDER_PDF</li>
+ * <li>Driver.RENDER_AWT</li>
+ * <li>Driver.RENDER_PRINT</li>
+ * <li>Driver.RENDER_MIF</li>
+ * <li>Driver.RENDER_XML</li>
+ * <li>Driver.RENDER_PCL</li>
+ * <li>Driver.RENDER_PS</li>
+ * <li>Driver.RENDER_TXT</li>
+ * <li>Driver.RENDER_SVG</li>
+ * <li>Driver.RENDER_RTF</li>
* </ul>
- * @param renderer the type of renderer to use
- * @throws IllegalArgumentException if an unsupported renderer type was required.
+ * @param renderType the type of renderer to use
+ * @throws IllegalArgumentException if an unsupported renderer type was requested.
*/
- public void setRenderer(int renderer) throws IllegalArgumentException {
- rendererType = renderer;
- switch (renderer) {
- case RENDER_PDF:
- setRenderer(new org.apache.fop.render.pdf.PDFRenderer());
- break;
- case RENDER_AWT:
- setRenderer(new org.apache.fop.render.awt.AWTRenderer());
- break;
- case RENDER_PRINT:
- setRenderer(new org.apache.fop.render.awt.AWTPrintRenderer());
- break;
- case RENDER_PCL:
- setRenderer(new org.apache.fop.render.pcl.PCLRenderer());
- break;
- case RENDER_PS:
- setRenderer(new org.apache.fop.render.ps.PSRenderer());
- break;
- case RENDER_TXT:
- setRenderer(new org.apache.fop.render.txt.TXTRenderer());
- break;
- case RENDER_MIF:
- //foInputHandler will be set later
- break;
- case RENDER_XML:
- setRenderer(new org.apache.fop.render.xml.XMLRenderer());
- break;
- case RENDER_SVG:
- setRenderer(new org.apache.fop.render.svg.SVGRenderer());
- break;
- case RENDER_RTF:
- //foInputHandler will be set later
- break;
- default:
+ public void setRenderer(int renderType) throws IllegalArgumentException {
+ if (renderType < RENDER_MIN_CONST || renderType > RENDER_MAX_CONST) {
rendererType = NOT_SET;
- throw new IllegalArgumentException("Unknown renderer type " + renderer);
+ throw new IllegalArgumentException(
+ "Invalid renderer ID#" + renderType);
}
- }
- /**
- * Set the Renderer to use.
- * @param renderer the renderer instance to use
- */
- private void setRenderer(Renderer renderer) {
- renderer.setUserAgent(getUserAgent());
- this.renderer = renderer;
+ this.rendererType = renderType;
}
/**
@@ -344,16 +302,17 @@
// TODO: - do this stuff in a better way
// PIJ: I guess the structure handler should be created by the renderer.
if (rendererType == RENDER_MIF) {
- foInputHandler = new MIFHandler(userAgent, stream);
+ foInputHandler = new MIFHandler(foUserAgent, stream);
} else if (rendererType == RENDER_RTF) {
- foInputHandler = new RTFHandler(userAgent, stream);
+ foInputHandler = new RTFHandler(foUserAgent, stream);
} else {
- if (renderer == null) {
+ if (rendererType == NOT_SET) {
throw new IllegalStateException(
- "Renderer not set when using standard foInputHandler");
+ "Renderer must be set using setRenderer(int renderType)");
}
- foInputHandler = new FOTreeHandler(userAgent, renderer, stream, true);
+ foInputHandler = new FOTreeHandler(foUserAgent, rendererType,
+ stream, true);
}
treeBuilder.setFOInputHandler(foInputHandler);
@@ -369,7 +328,7 @@
public synchronized void render(InputHandler inputHandler)
throws FOPException {
XMLReader parser = inputHandler.getParser();
- userAgent.setBaseURL(inputHandler.getBaseURL());
+ foUserAgent.setBaseURL(inputHandler.getBaseURL());
render(parser, inputHandler.getInputSource());
}
@@ -431,7 +390,6 @@
/**
* Runs the formatting and renderering process using the previously set
* parser, input source, renderer and output stream.
- * If the renderer was not set, default to PDF.
* If no parser was set, and the input source is not a dom document,
* get a default SAX parser.
* @throws IOException in case of IO errors.
@@ -442,9 +400,8 @@
initialize();
}
- if (renderer == null && rendererType != RENDER_RTF
- && rendererType != RENDER_MIF) {
- setRenderer(RENDER_PDF);
+ if (rendererType == NOT_SET) {
+ rendererType = RENDER_PDF;
}
if (source == null) {
1.12 +19 -2 xml-fop/src/java/org/apache/fop/apps/FOUserAgent.java
Index: FOUserAgent.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/FOUserAgent.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- FOUserAgent.java 26 Jun 2004 19:37:13 -0000 1.11
+++ FOUserAgent.java 27 Jun 2004 13:29:32 -0000 1.12
@@ -27,6 +27,7 @@
// FOP
import org.apache.fop.pdf.PDFEncryptionParams;
+import org.apache.fop.render.Renderer;
/**
* The User Agent for fo.
@@ -59,7 +60,7 @@
private float px2mm = 0.35277777777777777778f; //72dpi (=25.4/dpi)
private HashMap rendererOptions = new java.util.HashMap();
private InputHandler inputHandler = null;
-
+ private Renderer rendererOverride = null;
/** Producer: Metadata element for the system/software that produces
* the document. (Some renderers can store this in the document.)
@@ -91,6 +92,22 @@
*/
public InputHandler getInputHandler() {
return inputHandler;
+ }
+
+ /**
+ * Sets the producer of the document.
+ * @param producer source of document
+ */
+ public void setRendererOverride(Renderer renderer) {
+ this.rendererOverride = renderer;
+ }
+
+ /**
+ * Returns the producer of the document
+ * @return producer name
+ */
+ public Renderer getRendererOverride() {
+ return rendererOverride;
}
/**
1.8 +4 -1 xml-fop/src/java/org/apache/fop/fo/Constants.java
Index: Constants.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/Constants.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Constants.java 26 Jun 2004 19:37:13 -0000 1.7
+++ Constants.java 27 Jun 2004 13:29:32 -0000 1.8
@@ -25,6 +25,9 @@
apps.Driver to describe the input (either .FO or .XML/.XSL)
and desired output (PDF, PS, AWT, etc.) of the document */
+ /** render constants for bounds checking */
+ int RENDER_MIN_CONST = 1;
+ int RENDER_MAX_CONST = 10;
/** input / output not set */
int NOT_SET = 0;
/** input: fo file */
1.22 +2 -2 xml-fop/src/java/org/apache/fop/fo/FOInputHandler.java
Index: FOInputHandler.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FOInputHandler.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- FOInputHandler.java 19 Jun 2004 13:35:33 -0000 1.21
+++ FOInputHandler.java 27 Jun 2004 13:29:32 -0000 1.22
@@ -66,7 +66,7 @@
/**
* The FOUserAgent for this process
*/
- private FOUserAgent foUserAgent;
+ protected FOUserAgent foUserAgent;
/**
* The Font information relevant for this document
1.24 +41 -3 xml-fop/src/java/org/apache/fop/fo/FOTreeHandler.java
Index: FOTreeHandler.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FOTreeHandler.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- FOTreeHandler.java 19 Jun 2004 13:35:33 -0000 1.23
+++ FOTreeHandler.java 27 Jun 2004 13:29:32 -0000 1.24
@@ -115,10 +115,17 @@
* @param store if true then use the store pages model and keep the
* area tree in memory
*/
- public FOTreeHandler(FOUserAgent userAgent, Renderer renderer,
+ public FOTreeHandler(FOUserAgent userAgent, int renderType,
OutputStream stream, boolean store) throws FOPException {
super(userAgent);
- this.renderer = renderer;
+
+ if (foUserAgent.getRendererOverride() != null) {
+ renderer = foUserAgent.getRendererOverride();
+ } else {
+ renderer = createRenderer(renderType);
+ renderer.setUserAgent(foUserAgent);
+ }
+
areaTree = new AreaTree(renderer);
try {
@@ -135,6 +142,37 @@
if (collectStatistics) {
runtime = Runtime.getRuntime();
+ }
+ }
+
+ /**
+ * 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);
}
}
1.15 +5 -3 xml-fop/src/java/org/apache/fop/fo/pagination/Flow.java
Index: Flow.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/pagination/Flow.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- Flow.java 26 Jun 2004 19:37:13 -0000 1.14
+++ Flow.java 27 Jun 2004 13:29:32 -0000 1.15
@@ -65,13 +65,15 @@
/**
* @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String)
- * XSL/FOP Content Model: (%block;)+
+ * XSL/FOP Content Model: markers* (%block;)+
*/
- protected void validateChildNode(Locator loc, String nsURI, String localName) {
+/* temporarily disabled: need to account for fo-markers which may be initial children
+ protected void validateChildNode(Locator loc, String nsURI, String localName) {
if (!isBlockItem(nsURI, localName)) {
invalidChildError(loc, nsURI, localName);
}
}
+*/
/**
* Make sure content model satisfied, if so then tell the
1.27 +4 -0 xml-fop/src/java/org/apache/fop/render/awt/AWTRenderer.java
Index: AWTRenderer.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/awt/AWTRenderer.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- AWTRenderer.java 25 Jun 2004 23:35:00 -0000 1.26
+++ AWTRenderer.java 27 Jun 2004 13:29:32 -0000 1.27
@@ -106,6 +106,10 @@
createPreviewDialog(foUserAgent.getInputHandler());
}
+ public FOUserAgent getUserAgent() {
+ return userAgent;
+ }
+
/**
* @see org.apache.fop.render.Renderer
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org