compiles with current batik


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/fop-0_17_0_batikSVG@194247 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/org/apache/fop/render/awt/AWTRenderer.java b/src/org/apache/fop/render/awt/AWTRenderer.java
index 0905eae..1081ae9 100644
--- a/src/org/apache/fop/render/awt/AWTRenderer.java
+++ b/src/org/apache/fop/render/awt/AWTRenderer.java
@@ -944,5 +944,9 @@
         {
                 return false;
         }
+
+        public void registerExtension(BridgeExtension be)
+        {
+        }
     }
 }
diff --git a/src/org/apache/fop/render/pdf/PDFRenderer.java b/src/org/apache/fop/render/pdf/PDFRenderer.java
index 62f04f5..82af0ee 100644
--- a/src/org/apache/fop/render/pdf/PDFRenderer.java
+++ b/src/org/apache/fop/render/pdf/PDFRenderer.java
@@ -1296,5 +1296,9 @@
 	{
             return false;
 	}
+
+        public void registerExtension(BridgeExtension be)
+        {
+        }
     }
 }
diff --git a/src/org/apache/fop/svg/PDFGraphics2D.java b/src/org/apache/fop/svg/PDFGraphics2D.java
index e13a3f8..a625d90 100644
--- a/src/org/apache/fop/svg/PDFGraphics2D.java
+++ b/src/org/apache/fop/svg/PDFGraphics2D.java
@@ -30,11 +30,11 @@
 import java.util.Map;
 
 /**
- * This concrete implementation of <tt>AbstractGraphics2D</tt> is a 
- * simple help to programmers to get started with their own 
- * implementation of <tt>Graphics2D</tt>. 
+ * This concrete implementation of <tt>AbstractGraphics2D</tt> is a
+ * simple help to programmers to get started with their own
+ * implementation of <tt>Graphics2D</tt>.
  * <tt>DefaultGraphics2D</tt> implements all the abstract methods
- * is <tt>AbstractGraphics2D</tt> and makes it easy to start 
+ * is <tt>AbstractGraphics2D</tt> and makes it easy to start
  * implementing a <tt>Graphic2D</tt> piece-meal.
  *
  * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
@@ -42,71 +42,69 @@
  * @see org.apache.batik.ext.awt.g2d.AbstractGraphics2D
  */
 public class PDFGraphics2D extends AbstractGraphics2D {
-		protected PDFDocument pdfDoc;
+    protected PDFDocument pdfDoc;
 
-		protected FontState fontState;
+    protected FontState fontState;
 
-        boolean standalone = false;
+    boolean standalone = false;
 
-		/** the PDF Document being created */
-		//protected PDFDocument pdfDoc;
+    /** the PDF Document being created */
+    //protected PDFDocument pdfDoc;
 
-		//protected FontState fontState;
+    //protected FontState fontState;
 
-		/** the current stream to add PDF commands to */
-		StringWriter currentStream = new StringWriter();
+    /** the current stream to add PDF commands to */
+    StringWriter currentStream = new StringWriter();
 
-		/** the current (internal) font name */
-		protected String currentFontName;
+    /** the current (internal) font name */
+    protected String currentFontName;
 
-		/** the current font size in millipoints */
-		protected int currentFontSize;
+    /** the current font size in millipoints */
+    protected int currentFontSize;
 
-		/** the current vertical position in millipoints from bottom */
-		protected int currentYPosition = 0;
+    /** the current vertical position in millipoints from bottom */
+    protected int currentYPosition = 0;
 
-		/** the current horizontal position in millipoints from left */
-		protected int currentXPosition = 0;
+    /** the current horizontal position in millipoints from left */
+    protected int currentXPosition = 0;
 
-		/** the current colour for use in svg */
-		PDFColor currentColour = new PDFColor(0, 0, 0);
+    /** the current colour for use in svg */
+    PDFColor currentColour = new PDFColor(0, 0, 0);
 
-	    FontInfo fontInfo;
+    FontInfo fontInfo;
 
     /**
      * Create a new PDFGraphics2D with the given pdf document info.
      * This is used to create a Graphics object for use inside an already
      * existing document.
      */
-    public PDFGraphics2D(boolean textAsShapes, FontState fs, PDFDocument doc, String font,
-											 int size, int xpos, int ypos){
+    public PDFGraphics2D(boolean textAsShapes, FontState fs,
+                         PDFDocument doc, String font, int size, int xpos, int ypos) {
         super(textAsShapes);
-				pdfDoc = doc;
-				currentFontName = font;
-				currentFontSize = size;
-				currentYPosition = ypos;
-				currentXPosition = xpos;
-				fontState = fs;
+        pdfDoc = doc;
+        currentFontName = font;
+        currentFontSize = size;
+        currentYPosition = ypos;
+        currentXPosition = xpos;
+        fontState = fs;
     }
 
-    public PDFGraphics2D(boolean textAsShapes)
-	{
+    public PDFGraphics2D(boolean textAsShapes) {
         super(textAsShapes);
-	}
+    }
 
-		public String getString() {
-				return currentStream.toString();
-		}
+    public String getString() {
+        return currentStream.toString();
+    }
 
-    public void setGraphicContext(GraphicContext c)
-    {
+    public void setGraphicContext(GraphicContext c) {
         gc = c;
     }
 
     /**
      * This constructor supports the create method
      */
-    public PDFGraphics2D(PDFGraphics2D g){
+    public PDFGraphics2D(PDFGraphics2D g) {
         super(g);
     }
 
@@ -116,7 +114,7 @@
      * @return     a new graphics context that is a copy of
      *             this graphics context.
      */
-    public Graphics create(){
+    public Graphics create() {
         return new PDFGraphics2D(this);
     }
 
@@ -144,83 +142,88 @@
      * @see      java.awt.image.ImageObserver
      * @see      java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
      */
-    public boolean drawImage(Image img, int x, int y, ImageObserver observer){
+    public boolean drawImage(Image img, int x, int y,
+                             ImageObserver observer) {
         System.err.println("drawImage:x, y");
 
         final int width = img.getWidth(observer);
         final int height = img.getHeight(observer);
-		if(width == -1 || height == -1) {
-			return false;
-		}
+        if (width == -1 || height == -1) {
+            return false;
+        }
 
         Dimension size = new Dimension(width, height);
         BufferedImage buf = buildBufferedImage(size);
 
         java.awt.Graphics2D g = buf.createGraphics();
         g.setComposite(AlphaComposite.SrcOver);
-		g.setBackground(new Color(1, 1, 1, 0));
+        g.setBackground(new Color(1, 1, 1, 0));
         g.setPaint(new Color(1, 1, 1, 0));
-		g.fillRect(0, 0, width, height);
+        g.fillRect(0, 0, width, height);
         g.clip(new Rectangle(0, 0, buf.getWidth(), buf.getHeight()));
 
-        if(!g.drawImage(img, 0, 0, observer)) {
-			return false;
-		}
+        if (!g.drawImage(img, 0, 0, observer)) {
+            return false;
+        }
         g.dispose();
 
-		final byte[] result = new byte[buf.getWidth() * buf.getHeight() * 3];
+        final byte[] result =
+          new byte[buf.getWidth() * buf.getHeight() * 3];
 
-		Raster raster = buf.getData();
-		DataBuffer bd = raster.getDataBuffer();
+        Raster raster = buf.getData();
+        DataBuffer bd = raster.getDataBuffer();
 
-		int count = 0;
-		switch(bd.getDataType()) {
-		    case DataBuffer.TYPE_INT:
-				int[][] idata = ((DataBufferInt)bd).getBankData();
-				for(int i = 0; i < idata.length; i++) {
-					for(int j = 0; j < idata[i].length; j++) {
-						//System.out.println("data:" + ((idata[i][j] >> 24) & 0xFF));
-						if(((idata[i][j] >> 24) & 0xFF) != 255) {
-System.out.println("data:" + ((idata[i][j] >> 24) & 0xFF));
-							result[count++] = (byte)0xFF;
-							result[count++] = (byte)0xFF;
-							result[count++] = (byte)0xFF;
-						} else {
-							result[count++] = (byte)((idata[i][j] >> 16) & 0xFF);
-							result[count++] = (byte)((idata[i][j] >> 8) & 0xFF);
-							result[count++] = (byte)((idata[i][j]) & 0xFF);
-						}
-					}
-				}
-			break;
-		    default:
-				// error
-			break;
-			}
+        int count = 0;
+        switch (bd.getDataType()) {
+            case DataBuffer.TYPE_INT:
+                int[][] idata = ((DataBufferInt) bd).getBankData();
+                for (int i = 0; i < idata.length; i++) {
+                    for (int j = 0; j < idata[i].length; j++) {
+                        //System.out.println("data:" + ((idata[i][j] >> 24) & 0xFF));
+                        if (((idata[i][j] >> 24) & 0xFF) != 255) {
+                            System.out.println("data:" +
+                                               ((idata[i][j] >> 24) & 0xFF));
+                            result[count++] = (byte) 0xFF;
+                            result[count++] = (byte) 0xFF;
+                            result[count++] = (byte) 0xFF;
+                        } else {
+                            result[count++] =
+                              (byte)((idata[i][j] >> 16) & 0xFF);
+                            result[count++] =
+                              (byte)((idata[i][j] >> 8) & 0xFF);
+                            result[count++] = (byte)((idata[i][j]) & 0xFF);
+                        }
+                    }
+                }
+                break;
+            default:
+                // error
+                break;
+        }
 
-		try {
-        FopImage fopimg = new TempImage(width, height, result);
-        int xObjectNum = this.pdfDoc.addImage(fopimg);
-		/*currentStream.write("q\n" + (((float) width)) +
-                          " 0 0 " + (((float) height)) + " " +
-                          x + " " +
-                          ((float)(y - height)) + " cm\n" + "/Im" +
-                          xObjectNum + " Do\nQ\n");*/
-		AffineTransform at = getTransform();
-		double[] matrix = new double[6];
-		at.getMatrix(matrix);
-		currentStream.write("q\n" + matrix[0] +
-                          " " + matrix[1] + " " + matrix[2]  + " " + matrix[3] + " " +
-                          matrix[4] + " " +
-                          matrix[5] + " cm\n");
-		currentStream.write("" + width +
-                          " 0 0 " + (-height) + " " +
-                          x + " " +
-                          (y + height) + " cm\n" + "/Im" +
-                          xObjectNum + " Do\nQ\n");
-		} catch(Exception e) {
-			e.printStackTrace();
-		}
+        try {
+            FopImage fopimg = new TempImage(width, height, result);
+            int xObjectNum = this.pdfDoc.addImage(fopimg);
+            /*currentStream.write("q\n" + (((float) width)) +
+                                     " 0 0 " + (((float) height)) + " " +
+                                     x + " " +
+                                     ((float)(y - height)) + " cm\n" + "/Im" +
+                                     xObjectNum + " Do\nQ\n");*/
+            AffineTransform at = getTransform();
+            double[] matrix = new double[6];
+            at.getMatrix(matrix);
+            currentStream.write("q\n");
+			Shape imclip = getClip();
+			writeClip(imclip);
+            currentStream.write("" + matrix[0] + " " + matrix[1] +
+                                " " + matrix[2] + " " + matrix[3] + " " +
+                                matrix[4] + " " + matrix[5] + " cm\n");
+            currentStream.write("" + width + " 0 0 " + (-height) +
+                                " " + x + " " + (y + height) + " cm\n" + "/Im" +
+                                xObjectNum + " Do\nQ\n");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
         return true;
     }
 
@@ -229,76 +232,87 @@
                                  BufferedImage.TYPE_INT_ARGB);
     }
 
-        class TempImage implements FopImage {
-			int m_height;
-			int m_width;
-			int m_bitsPerPixel;
-			ColorSpace m_colorSpace;
-			int m_bitmapSiye;
-			byte[] m_bitmaps;
-			PDFColor transparent = new PDFColor(255, 255, 255);
+    class TempImage implements FopImage {
+        int m_height;
+        int m_width;
+        int m_bitsPerPixel;
+        ColorSpace m_colorSpace;
+        int m_bitmapSiye;
+        byte[] m_bitmaps;
+        PDFColor transparent = new PDFColor(255, 255, 255);
 
-			TempImage(int width, int height, byte[] result) throws FopImageException
-			{
-				this.m_height = height;
-				this.m_width = width;
-				this.m_bitsPerPixel = 8;
-				this.m_colorSpace = new ColorSpace(ColorSpace.DEVICE_RGB);
-				//this.m_isTransparent = false;
-				//this.m_bitmapsSize = this.m_width * this.m_height * 3;
-				this.m_bitmaps = result;
-			}
-
-			public String getURL() {return "" + m_bitmaps;}
-
-			// image size
-			public int getWidth() throws FopImageException
-			{
-				return m_width;
-			}
-
-	public int getHeight() throws FopImageException
-			{return m_height;}
-
-	// DeviceGray, DeviceRGB, or DeviceCMYK
-	public ColorSpace getColorSpace() throws FopImageException
-			{return m_colorSpace;}
-
-	// bits per pixel
-	public int getBitsPerPixel() throws FopImageException
-			{return m_bitsPerPixel;}
-
-	// For transparent images
-	public boolean isTransparent() throws FopImageException
-			{return transparent != null;}
-	public PDFColor getTransparentColor() throws FopImageException
-			{return transparent;}
-
-	// get the image bytes, and bytes properties
-
-	// get uncompressed image bytes
-	public byte[] getBitmaps() throws FopImageException
-			{return m_bitmaps;}
-// width * (bitsPerPixel / 8) * height, no ?
-	public int getBitmapsSize() throws FopImageException
-			{return m_width * m_height * 3;}
-
-	// get compressed image bytes
-	// I don't know if we really need it, nor if it
-	// should be changed...
-	public byte[] getRessourceBytes() throws FopImageException
-			{return null;}
-	public int getRessourceBytesSize() throws FopImageException
-			{return 0;}
-	// return null if no corresponding PDFFilter
-	public PDFFilter getPDFFilter() throws FopImageException
-			{return null;}
-
-	// release memory
-			public void close() {}
-
+        TempImage(int width, int height,
+                  byte[] result) throws FopImageException {
+            this.m_height = height;
+            this.m_width = width;
+            this.m_bitsPerPixel = 8;
+            this.m_colorSpace = new ColorSpace(ColorSpace.DEVICE_RGB);
+            //this.m_isTransparent = false;
+            //this.m_bitmapsSize = this.m_width * this.m_height * 3;
+            this.m_bitmaps = result;
         }
 
+        public String getURL() {
+            return "" + m_bitmaps;
+        }
+
+        // image size
+        public int getWidth() throws FopImageException {
+            return m_width;
+        }
+
+        public int getHeight() throws FopImageException {
+            return m_height;
+        }
+
+        // DeviceGray, DeviceRGB, or DeviceCMYK
+        public ColorSpace getColorSpace() throws FopImageException {
+            return m_colorSpace;
+        }
+
+        // bits per pixel
+        public int getBitsPerPixel() throws FopImageException {
+            return m_bitsPerPixel;
+        }
+
+        // For transparent images
+        public boolean isTransparent() throws FopImageException {
+            return transparent != null;
+        }
+        public PDFColor getTransparentColor() throws FopImageException {
+            return transparent;
+        }
+
+        // get the image bytes, and bytes properties
+
+        // get uncompressed image bytes
+        public byte[] getBitmaps() throws FopImageException {
+            return m_bitmaps;
+        }
+        // width * (bitsPerPixel / 8) * height, no ?
+        public int getBitmapsSize() throws FopImageException {
+            return m_width * m_height * 3;
+        }
+
+        // get compressed image bytes
+        // I don't know if we really need it, nor if it
+        // should be changed...
+        public byte[] getRessourceBytes() throws FopImageException {
+            return null;
+        }
+        public int getRessourceBytesSize() throws FopImageException {
+            return 0;
+        }
+        // return null if no corresponding PDFFilter
+        public PDFFilter getPDFFilter() throws FopImageException {
+            return null;
+        }
+
+        // release memory
+        public void close() {}
+
+    }
+
 
     /**
      * Draws as much of the specified image as has already been scaled
@@ -333,9 +347,8 @@
      * @see      java.awt.image.ImageObserver
      * @see      java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
      */
-    public boolean drawImage(Image img, int x, int y,
-                             int width, int height,
-                             ImageObserver observer) {
+    public boolean drawImage(Image img, int x, int y, int width,
+                             int height, ImageObserver observer) {
         System.out.println("drawImage");
         return true;
     }
@@ -367,7 +380,7 @@
      * @see         java.awt.Component#getGraphics
      * @see         java.awt.Graphics#create
      */
-    public void dispose(){
+    public void dispose() {
         System.out.println("dispose");
     }
 
@@ -387,8 +400,11 @@
      * @see #setClip
      * @see #setComposite
      */
-    public void draw(Shape s){
+    public void draw(Shape s) {
         //System.out.println("draw(Shape)");
+            currentStream.write("q\n");
+			Shape imclip = getClip();
+			writeClip(imclip);
         Color c = getColor();
         currentColour = new PDFColor(c.getRed(), c.getGreen(), c.getBlue());
         currentStream.write(currentColour.getColorSpaceOut(true));
@@ -396,37 +412,88 @@
         PDFColor col = new PDFColor(c.getRed(), c.getGreen(), c.getBlue());
         currentStream.write(col.getColorSpaceOut(false));
 
-		PDFNumber pdfNumber = new PDFNumber();
+        PDFNumber pdfNumber = new PDFNumber();
 
         PathIterator iter = s.getPathIterator(getTransform());
-        while(!iter.isDone()) {
+        while (!iter.isDone()) {
             double vals[] = new double[6];
             int type = iter.currentSegment(vals);
-            switch(type) {
+            switch (type) {
                 case PathIterator.SEG_CUBICTO:
-					currentStream.write(pdfNumber.doubleOut(vals[0]) + " " + pdfNumber.doubleOut(vals[1]) +
-															" " + pdfNumber.doubleOut(vals[2]) + " " + pdfNumber.doubleOut(vals[3]) + " " +
-															pdfNumber.doubleOut(vals[4]) + " " + pdfNumber.doubleOut(vals[5]) + " c\n");
-                break;
+                    currentStream.write(pdfNumber.doubleOut(vals[0]) +
+                                        " " + pdfNumber.doubleOut(vals[1]) + " " +
+                                        pdfNumber.doubleOut(vals[2]) + " " +
+                                        pdfNumber.doubleOut(vals[3]) + " " +
+                                        pdfNumber.doubleOut(vals[4]) + " " +
+                                        pdfNumber.doubleOut(vals[5]) + " c\n");
+                    break;
                 case PathIterator.SEG_LINETO:
-					currentStream.write(pdfNumber.doubleOut(vals[0]) + " " + pdfNumber.doubleOut(vals[1]) + " l\n");
-                break;
+                    currentStream.write(pdfNumber.doubleOut(vals[0]) +
+                                        " " + pdfNumber.doubleOut(vals[1]) + " l\n");
+                    break;
                 case PathIterator.SEG_MOVETO:
-					currentStream.write(pdfNumber.doubleOut(vals[0]) + " " + pdfNumber.doubleOut(vals[1]) + " m\n");
-                break;
+                    currentStream.write(pdfNumber.doubleOut(vals[0]) +
+                                        " " + pdfNumber.doubleOut(vals[1]) + " m\n");
+                    break;
                 case PathIterator.SEG_QUADTO:
-					currentStream.write(pdfNumber.doubleOut(vals[0]) + " " + pdfNumber.doubleOut(vals[1]) + " " +
-															pdfNumber.doubleOut(vals[2]) + " " + pdfNumber.doubleOut(vals[3]) + " y\n");
-                break;
+                    currentStream.write(pdfNumber.doubleOut(vals[0]) +
+                                        " " + pdfNumber.doubleOut(vals[1]) + " " +
+                                        pdfNumber.doubleOut(vals[2]) + " " +
+                                        pdfNumber.doubleOut(vals[3]) + " y\n");
+                    break;
                 case PathIterator.SEG_CLOSE:
-					currentStream.write("h\n");
-                break;
+                    currentStream.write("h\n");
+                    break;
                 default:
-                break;
+                    break;
             }
             iter.next();
         }
         doDrawing(false, true, false);
+            currentStream.write("Q\n");
+    }
+
+    protected void writeClip(Shape s) {
+        PDFNumber pdfNumber = new PDFNumber();
+
+        PathIterator iter = s.getPathIterator(getTransform());
+        while (!iter.isDone()) {
+            double vals[] = new double[6];
+            int type = iter.currentSegment(vals);
+            switch (type) {
+                case PathIterator.SEG_CUBICTO:
+                    currentStream.write(pdfNumber.doubleOut(vals[0]) +
+                                        " " + pdfNumber.doubleOut(vals[1]) + " " +
+                                        pdfNumber.doubleOut(vals[2]) + " " +
+                                        pdfNumber.doubleOut(vals[3]) + " " +
+                                        pdfNumber.doubleOut(vals[4]) + " " +
+                                        pdfNumber.doubleOut(vals[5]) + " c\n");
+                    break;
+                case PathIterator.SEG_LINETO:
+                    currentStream.write(pdfNumber.doubleOut(vals[0]) +
+                                        " " + pdfNumber.doubleOut(vals[1]) + " l\n");
+                    break;
+                case PathIterator.SEG_MOVETO:
+                    currentStream.write(pdfNumber.doubleOut(vals[0]) +
+                                        " " + pdfNumber.doubleOut(vals[1]) + " m\n");
+                    break;
+                case PathIterator.SEG_QUADTO:
+                    currentStream.write(pdfNumber.doubleOut(vals[0]) +
+                                        " " + pdfNumber.doubleOut(vals[1]) + " " +
+                                        pdfNumber.doubleOut(vals[2]) + " " +
+                                        pdfNumber.doubleOut(vals[3]) + " y\n");
+                    break;
+                case PathIterator.SEG_CLOSE:
+                    currentStream.write("h\n");
+                    break;
+                default:
+                    break;
+            }
+            iter.next();
+        }
+        // clip area
+		currentStream.write("W\n");
+		currentStream.write("n\n");
     }
 
     /**
@@ -485,10 +552,10 @@
      * @see #setClip
      * @see #drawRenderedImage
      */
-     public void drawRenderableImage(RenderableImage img,
-                                     AffineTransform xform){
-         System.out.println("drawRenderableImage");
-     }
+    public void drawRenderableImage(RenderableImage img,
+                                    AffineTransform xform) {
+        System.out.println("drawRenderableImage");
+    }
 
     /**
      * Renders the text specified by the specified <code>String</code>,
@@ -512,7 +579,7 @@
      * @see #setComposite
      * @see #setClip
      */
-    public void drawString(String s, float x, float y){
+    public void drawString(String s, float x, float y) {
         System.out.println("drawString(String)");
     }
 
@@ -539,10 +606,10 @@
      * @see #setComposite
      * @see #setClip
      */
-     public void drawString(AttributedCharacterIterator iterator,
-                            float x, float y) {
-         System.err.println("drawString(AttributedCharacterIterator)");
-     }
+    public void drawString(AttributedCharacterIterator iterator,
+                           float x, float y) {
+        System.err.println("drawString(AttributedCharacterIterator)");
+    }
 
     /**
      * Fills the interior of a <code>Shape</code> using the settings of the
@@ -558,8 +625,11 @@
      * @see #clip
      * @see #setClip
      */
-    public void fill(Shape s){
+    public void fill(Shape s) {
         //System.err.println("fill");
+            currentStream.write("q\n");
+			Shape imclip = getClip();
+			writeClip(imclip);
         Color c = getColor();
         currentColour = new PDFColor(c.getRed(), c.getGreen(), c.getBlue());
         currentStream.write(currentColour.getColorSpaceOut(true));
@@ -567,65 +637,76 @@
         PDFColor col = new PDFColor(c.getRed(), c.getGreen(), c.getBlue());
         currentStream.write(col.getColorSpaceOut(false));
 
-		PDFNumber pdfNumber = new PDFNumber();
+        PDFNumber pdfNumber = new PDFNumber();
 
         PathIterator iter = s.getPathIterator(getTransform());
-        while(!iter.isDone()) {
+        while (!iter.isDone()) {
             double vals[] = new double[6];
             int type = iter.currentSegment(vals);
-            switch(type) {
+            switch (type) {
                 case PathIterator.SEG_CUBICTO:
-					currentStream.write(pdfNumber.doubleOut(vals[0]) + " " + pdfNumber.doubleOut(vals[1]) +
-															" " + pdfNumber.doubleOut(vals[2]) + " " + pdfNumber.doubleOut(vals[3]) + " " +
-															pdfNumber.doubleOut(vals[4]) + " " + pdfNumber.doubleOut(vals[5]) + " c\n");
-                break;
+                    currentStream.write(pdfNumber.doubleOut(vals[0]) +
+                                        " " + pdfNumber.doubleOut(vals[1]) + " " +
+                                        pdfNumber.doubleOut(vals[2]) + " " +
+                                        pdfNumber.doubleOut(vals[3]) + " " +
+                                        pdfNumber.doubleOut(vals[4]) + " " +
+                                        pdfNumber.doubleOut(vals[5]) + " c\n");
+                    break;
                 case PathIterator.SEG_LINETO:
-					currentStream.write(pdfNumber.doubleOut(vals[0]) + " " + pdfNumber.doubleOut(vals[1]) + " l\n");
-                break;
+                    currentStream.write(pdfNumber.doubleOut(vals[0]) +
+                                        " " + pdfNumber.doubleOut(vals[1]) + " l\n");
+                    break;
                 case PathIterator.SEG_MOVETO:
-					currentStream.write(pdfNumber.doubleOut(vals[0]) + " " + pdfNumber.doubleOut(vals[1]) + " m\n");
-                break;
+                    currentStream.write(pdfNumber.doubleOut(vals[0]) +
+                                        " " + pdfNumber.doubleOut(vals[1]) + " m\n");
+                    break;
                 case PathIterator.SEG_QUADTO:
-					currentStream.write(pdfNumber.doubleOut(vals[0]) + " " + pdfNumber.doubleOut(vals[1]) + " " +
-															pdfNumber.doubleOut(vals[2]) + " " + pdfNumber.doubleOut(vals[3]) + " y\n");
-                break;
+                    currentStream.write(pdfNumber.doubleOut(vals[0]) +
+                                        " " + pdfNumber.doubleOut(vals[1]) + " " +
+                                        pdfNumber.doubleOut(vals[2]) + " " +
+                                        pdfNumber.doubleOut(vals[3]) + " y\n");
+                    break;
                 case PathIterator.SEG_CLOSE:
-					currentStream.write("h\n");
-                break;
+                    currentStream.write("h\n");
+                    break;
                 default:
-                break;
+                    break;
             }
             iter.next();
         }
-        doDrawing(true, false, iter.getWindingRule() == PathIterator.WIND_EVEN_ODD);
+        doDrawing(true, false,
+                  iter.getWindingRule() == PathIterator.WIND_EVEN_ODD);
+            currentStream.write("Q\n");
     }
-    
-		protected void doDrawing(boolean fill, boolean stroke, boolean nonzero) {
-						if (fill) {
-								if (stroke) {
-										if (!nonzero)
-												currentStream.write("B*\n");
-										else
-												currentStream.write("B\n");
-								} else {
-										if (!nonzero)
-												currentStream.write("f*\n");
-										else
-												currentStream.write("f\n");
-								}
-						} else {
-								//if(stroke)
-								currentStream.write("S\n");
-						}
-		}
+
+    protected void doDrawing(boolean fill, boolean stroke,
+                             boolean nonzero) {
+        if (fill) {
+            if (stroke) {
+                if (!nonzero)
+                    currentStream.write("B*\n");
+                else
+                    currentStream.write("B\n");
+            } else {
+                if (!nonzero)
+                    currentStream.write("f*\n");
+                else
+                    currentStream.write("f\n");
+            }
+        } else {
+            //if(stroke)
+            currentStream.write("S\n");
+        }
+    }
 
     /**
      * Returns the device configuration associated with this
      * <code>Graphics2D</code>.
      */
-    public GraphicsConfiguration getDeviceConfiguration(){
+    public GraphicsConfiguration getDeviceConfiguration() {
         System.out.println("getDeviceConviguration");
-        return GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
+        return GraphicsEnvironment.getLocalGraphicsEnvironment().
+               getDefaultScreenDevice().getDefaultConfiguration();
     }
 
     /**
@@ -634,8 +715,8 @@
     private Graphics2D fmg;
 
     {
-        BufferedImage bi
-            = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
+        BufferedImage bi =
+          new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
 
         fmg = bi.createGraphics();
     }
@@ -648,7 +729,7 @@
      * @see       java.awt.FontMetrics
      * @see       java.awt.Graphics#getFontMetrics()
      */
-    public FontMetrics getFontMetrics(Font f){
+    public FontMetrics getFontMetrics(Font f) {
         return fmg.getFontMetrics(f);
     }
 
@@ -667,7 +748,7 @@
      * drawn twice, then all pixels are restored to their original values.
      * @param     c1 the XOR alternation color
      */
-    public void setXORMode(Color c1){
+    public void setXORMode(Color c1) {
         System.out.println("setXORMode");
     }
 
@@ -691,8 +772,8 @@
      * @param       dx the horizontal distance to copy the pixels.
      * @param       dy the vertical distance to copy the pixels.
      */
-    public void copyArea(int x, int y, int width, int height,
-                         int dx, int dy){
+    public void copyArea(int x, int y, int width, int height, int dx,
+                         int dy) {
         System.out.println("copyArea");
     }
 
diff --git a/src/org/apache/fop/svg/PDFTranscoder.java b/src/org/apache/fop/svg/PDFTranscoder.java
index 3bb8d22..fdf6700 100644
--- a/src/org/apache/fop/svg/PDFTranscoder.java
+++ b/src/org/apache/fop/svg/PDFTranscoder.java
@@ -474,6 +474,10 @@
         public boolean supportExtension(String s) {
             return false;
         }
+
+        public void registerExtension(BridgeExtension be)
+        {    
+        }    
     }
 
     protected final static Set FEATURES = new HashSet();