aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/fop/fo/FOTreeBuilder.java
diff options
context:
space:
mode:
authorJeremias Maerki <jeremias@apache.org>2005-11-11 13:44:40 +0000
committerJeremias Maerki <jeremias@apache.org>2005-11-11 13:44:40 +0000
commit82b916bf0d5dff2475e7b591e6ada7d45fa1b2b9 (patch)
tree299bd11ae1cb5d1f812fdf912ffc775bfafdb600 /src/java/org/apache/fop/fo/FOTreeBuilder.java
parent97581a9081ec184b9755bdc07ce049df9419ca06 (diff)
downloadxmlgraphics-fop-82b916bf0d5dff2475e7b591e6ada7d45fa1b2b9.tar.gz
xmlgraphics-fop-82b916bf0d5dff2475e7b591e6ada7d45fa1b2b9.zip
Fop.java gets two new constructors: Fop(String) and Fop(String, FOUserAgent) where the String is the MIME type for the desired output format.
MimeConstants provides a comprehensive list of MIME types used in Fop.java. Non-standard, FOP-specific MIME types changed to a uniform pattern: application/X-fop-awt-preview, application/X-fop-print and application/X-fop-areatree. RendererFactory now supports manual registration and dynamic discovery of Renderers and FOEventHandlers by their MIME types. Instantitation is done using MIME types everywhere. The RENDER_* constants are mapped to MIME types in Fop.java. RendererFactory is now an instantiable class whose reference is held by FOUserAgent just like it is done for the XLMHandlers. Renderers and FOEventHandlers now each have a *Maker class which is a kind of factory class which is used to register a Renderer/FOEventHandler and additionally serves to provide additional information about the thing, such as the MIME types it supports and if the implementation requires an OutputStream. The command-line gets a new option: -out application/pdf myfile.pdf is the generic way to create an output file. If someone created a WordML output handler and provided the right service resource file he could specify "-out text/xml+msword out.xml". ".out list" lists all MIME types that are available for output. Renderers can now potionally expose a Graphics2DAdapter which in concert with Graphics2DImagePainter can be used by FOP extensions to paint their content directly using a Graphics2D instance. That makes it possible to avoid a detour via SVG/Batik in certain cases. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@332549 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/fop/fo/FOTreeBuilder.java')
-rw-r--r--src/java/org/apache/fop/fo/FOTreeBuilder.java20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/java/org/apache/fop/fo/FOTreeBuilder.java b/src/java/org/apache/fop/fo/FOTreeBuilder.java
index 595dc0566..3cb5d9cb2 100644
--- a/src/java/org/apache/fop/fo/FOTreeBuilder.java
+++ b/src/java/org/apache/fop/fo/FOTreeBuilder.java
@@ -30,7 +30,6 @@ import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.FormattingResults;
import org.apache.fop.area.AreaTreeHandler;
-import org.apache.fop.render.RendererFactory;
import org.apache.fop.util.Service;
import org.apache.fop.fo.ElementMapping.Maker;
import org.apache.fop.fo.pagination.Root;
@@ -94,19 +93,20 @@ public class FOTreeBuilder extends DefaultHandler {
/**
* FOTreeBuilder constructor
- * @param renderType output type as defined in Constants class
+ * @param outputFormat the MIME type of the output format to use (ex. "application/pdf").
* @param foUserAgent in effect for this process
* @param stream OutputStream to direct results
* @throws FOPException if the FOTreeBuilder cannot be properly created
*/
- public FOTreeBuilder(int renderType, FOUserAgent foUserAgent,
+ public FOTreeBuilder(String outputFormat, FOUserAgent foUserAgent,
OutputStream stream) throws FOPException {
this.userAgent = foUserAgent;
//This creates either an AreaTreeHandler and ultimately a Renderer, or
//one of the RTF-, MIF- etc. Handlers.
- foEventHandler = RendererFactory.createFOEventHandler(foUserAgent, renderType, stream);
+ foEventHandler = foUserAgent.getRendererFactory().createFOEventHandler(
+ foUserAgent, outputFormat, stream);
foEventHandler.setPropertyListMaker(new PropertyListMaker() {
public PropertyList make(FObj fobj, PropertyList parentPropertyList) {
return new StaticPropertyList(fobj, parentPropertyList);
@@ -296,14 +296,22 @@ public class FOTreeBuilder extends DefaultHandler {
public void endElement(String uri, String localName, String rawName)
throws FOPException {
if (currentFObj == null) {
- throw new FOPException("No current FO is available. The input document may not be "
- + "a valid XSL-FO document.");
+ throw new IllegalStateException(
+ "endElement() called for " + rawName + " where there is no current element.");
+ } else if (!currentFObj.getLocalName().equals(localName)
+ || !currentFObj.getNamespaceURI().equals(uri)) {
+ log.warn("Mismatch: " + currentFObj.getLocalName()
+ + " (" + currentFObj.getNamespaceURI()
+ + ") vs. " + localName + " (" + uri + ")");
}
currentFObj.endOfNode();
if (currentPropertyList.getFObj() == currentFObj) {
currentPropertyList = currentPropertyList.getParentPropertyList();
}
+ if (currentFObj.getParent() == null) {
+ log.debug("endElement for top-level " + currentFObj.getName());
+ }
currentFObj = currentFObj.getParent();
}