]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
made it easier to add xml handlers
authorKeiron Liddle <keiron@apache.org>
Mon, 18 Mar 2002 12:30:46 +0000 (12:30 +0000)
committerKeiron Liddle <keiron@apache.org>
Mon, 18 Mar 2002 12:30:46 +0000 (12:30 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194708 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/apps/Driver.java
src/org/apache/fop/fo/FOTreeBuilder.java
src/org/apache/fop/render/pdf/PDFXMLHandler.java

index 02d27a6ae44d4f18bef52ab117ff6a991002956a..3fd180185b2fe7812e4a18b357b350714f77d218 100644 (file)
@@ -173,6 +173,7 @@ public class Driver {
      * the system resources that FOP will use
      */
     private Logger log;
+    private FOUserAgent userAgent = null;
 
     public static final String getParserClassName() {
         String parserClassName = null;
@@ -192,6 +193,7 @@ public class Driver {
     public Driver() {
         _stream = null;
         _treeBuilder = new FOTreeBuilder();
+        _treeBuilder.setUserAgent(getUserAgent());
         setupDefaultMappings();
     }
 
@@ -202,12 +204,15 @@ public class Driver {
     }
 
     public void setUserAgent(FOUserAgent agent) {
+        userAgent = agent;
     }
 
     private FOUserAgent getUserAgent() {
-        FOUserAgent ua = new FOUserAgent();
-        ua.setLogger(log);
-        return ua;
+        if(userAgent == null) {
+            userAgent = new FOUserAgent();
+            userAgent.setLogger(log);
+        }
+        return userAgent;
     }
 
     public void setLogger(Logger logger) {
index 3d548073a335a758e86cf79dfbcca680ecee3488..a446693ee53d2df6e7742907e04a47b86521a9ad 100644 (file)
@@ -83,6 +83,11 @@ public class FOTreeBuilder extends DefaultHandler {
         userAgent = ua;
     }
 
+    public FOUserAgent getUserAgent() {
+        return userAgent;
+    }
+
+
     public void setStreamRenderer(StreamRenderer streamRenderer) {
         this.streamRenderer = streamRenderer;
     }
index 6d983203c3d3ebc077ef3b0a3e7355db9111c737..da936ec4c3c78bd3e32d09ec339d8b6ebbea2f49 100644 (file)
@@ -59,7 +59,17 @@ public static final String PDF_YPOS = "ypos";
 
     public void handleXML(RendererContext context, Document doc,
                           String ns) throws Exception {
-        PDFDocument pdfDoc = (PDFDocument) context.getProperty(PDF_DOCUMENT);
+        PDFInfo pdfi = getPDFInfo(context);
+
+        String svg = "http://www.w3.org/2000/svg";
+        if (svg.equals(ns)) {
+            SVGHandler svghandler = new SVGHandler();
+            svghandler.renderSVGDocument(context, doc, pdfi);
+        } else {
+        }
+    }
+
+    public static PDFInfo getPDFInfo(RendererContext context) {
         PDFInfo pdfi = new PDFInfo();
         pdfi.pdfDoc = (PDFDocument)context.getProperty(PDF_DOCUMENT);
         pdfi.currentStream = (PDFStream)context.getProperty(PDF_STREAM);
@@ -70,18 +80,12 @@ public static final String PDF_YPOS = "ypos";
         pdfi.currentFontSize = ((Integer)context.getProperty(PDF_FONT_SIZE)).intValue();
         pdfi.currentXPosition = ((Integer)context.getProperty(PDF_XPOS)).intValue();
         pdfi.currentYPosition = ((Integer)context.getProperty(PDF_YPOS)).intValue();
-
-        String svg = "http://www.w3.org/2000/svg";
-        if (svg.equals(ns)) {
-            SVGHandler svghandler = new SVGHandler();
-            svghandler.renderSVGDocument(context, doc, pdfi);
-        } else {
-        }
+        return pdfi;
     }
 
-    class PDFInfo {
+    public static class PDFInfo {
         PDFDocument pdfDoc;
-        PDFStream currentStream;
+        public PDFStream currentStream;
         int x;
         int y;
         FontState fs;
@@ -91,6 +95,10 @@ public static final String PDF_YPOS = "ypos";
         int currentYPosition;
     }
 
+    /**
+     * This method is placed in an inner class so that we don't get class
+     * loading errors if batik is not present.
+     */
     protected class SVGHandler {
         protected void renderSVGDocument(RendererContext context, Document doc, PDFInfo pdfInfo) {
             float sx = 1, sy = 1;