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 sp...@apache.org on 2007/11/08 22:27:35 UTC

svn commit: r593328 [4/7] - in /xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking: ./ src/codegen/fonts/ src/documentation/ src/documentation/content/xdocs/ src/documentation/content/xdocs/dev/ src/documentation/content/xdocs/trunk/ src/java...

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFactory.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFactory.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFactory.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFactory.java Thu Nov  8 13:27:19 2007
@@ -26,29 +26,27 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
+import java.util.ArrayList;
 import java.util.BitSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+
 import javax.xml.transform.Source;
 import javax.xml.transform.stream.StreamSource;
-import java.util.ArrayList;
 
-// Apache libs
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.output.ByteArrayOutputStream;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-
-// FOP
 import org.apache.fop.fonts.CIDFont;
 import org.apache.fop.fonts.CustomFont;
-import org.apache.fop.fonts.Typeface;
 import org.apache.fop.fonts.FontDescriptor;
 import org.apache.fop.fonts.FontMetrics;
 import org.apache.fop.fonts.FontType;
 import org.apache.fop.fonts.LazyFont;
 import org.apache.fop.fonts.MultiByteFont;
+import org.apache.fop.fonts.Typeface;
 import org.apache.fop.fonts.truetype.FontFileReader;
 import org.apache.fop.fonts.truetype.TTFSubSetFile;
 import org.apache.fop.fonts.type1.PFBData;
@@ -1270,7 +1268,7 @@
 
         if (desc.getFontType() == FontType.TYPE0) {
             // CID Font
-            descriptor = new PDFCIDFontDescriptor(desc.getFontName(),
+            descriptor = new PDFCIDFontDescriptor(desc.getEmbedFontName(),
                                             desc.getFontBBox(),
                                             desc.getCapHeight(),
                                             desc.getFlags(),
@@ -1278,7 +1276,7 @@
                                             desc.getStemV(), null);
         } else {
             // Create normal FontDescriptor
-            descriptor = new PDFFontDescriptor(desc.getFontName(),
+            descriptor = new PDFFontDescriptor(desc.getEmbedFontName(),
                                          desc.getAscender(),
                                          desc.getDescender(),
                                          desc.getCapHeight(),
@@ -1333,7 +1331,7 @@
         } catch (IOException ioe) {
             log.error(
                     "Failed to write CIDSet [" + cidFont + "] "
-                    + cidFont.getFontName(), ioe);
+                    + cidFont.getEmbedFontName(), ioe);
         }
     }
 
@@ -1422,7 +1420,7 @@
         } catch (IOException ioe) {
             log.error(
                     "Failed to embed font [" + desc + "] "
-                    + desc.getFontName(), ioe);
+                    + desc.getEmbedFontName(), ioe);
             return (PDFStream) null;
         }
     }
@@ -1471,7 +1469,7 @@
 
     /**
      * Create a PDFICCStream
-     * @see PDFXObject
+     * @see PDFImageXObject
      * @see org.apache.fop.image.JpegImage
      * @see org.apache.fop.pdf.PDFDeviceColorSpace     
      * @return the new PDF ICC stream object

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilter.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilter.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilter.java Thu Nov  8 13:27:19 2007
@@ -92,7 +92,7 @@
      *
      * @return the decode params for the filter
      */
-    public abstract String getDecodeParms();
+    public abstract PDFObject getDecodeParms();
 
     /**
      * Applies a filter to an OutputStream.

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilterList.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilterList.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilterList.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilterList.java Thu Nov  8 13:27:19 2007
@@ -48,6 +48,8 @@
     private List filters = new java.util.ArrayList();
 
     private boolean ignoreASCIIFilters = false;
+    
+    private boolean disableAllFilters = false;
         
     /**
      * Default constructor.
@@ -68,6 +70,22 @@
     }
 
     /**
+     * Used to disable all filters.
+     * @param value true if all filters shall be disabled
+     */
+    public void setDisableAllFilters(boolean value) {
+        this.disableAllFilters = value;
+    }
+    
+    /**
+     * Returns true if all filters are disabled.
+     * @return true if all filters are disabled
+     */
+    public boolean isDisableAllFilters() {
+        return this.disableAllFilters;
+    }
+    
+    /**
      * Indicates whether the filter list is already initialized.
      * @return true if more there are filters present
      */
@@ -185,21 +203,7 @@
             List names = new java.util.ArrayList();
             List parms = new java.util.ArrayList();
 
-            // run the filters
-            int nonNullParams = 0;
-            for (int count = 0; count < filters.size(); count++) {
-                PDFFilter filter = (PDFFilter)filters.get(count);
-                // place the names in our local vector in reverse order
-                if (filter.getName().length() > 0) {
-                    names.add(0, filter.getName());
-                    if (filter.getDecodeParms() != null) {
-                        parms.add(0, filter.getDecodeParms());
-                        nonNullParams++;
-                    } else {
-                        parms.add(0, null);
-                    }
-                }
-            }
+            int nonNullParams = populateNamesAndParms(names, parms);
 
             // now build up the filter entries for the dictionary
             return buildFilterEntries(names) 
@@ -209,6 +213,47 @@
 
     }
 
+    /**
+     * Apply the filters to the data
+     * in the order given and add the /Filter and /DecodeParms
+     * entries to the stream dictionary. If the filters have already
+     * been applied to the data (either externally, or internally)
+     * then the dictionary entries added.
+     * @param dict the PDFDictionary to set the entries on
+     */
+    protected void putFilterDictEntries(PDFDictionary dict) {
+        if (filters != null && filters.size() > 0) {
+            List names = new java.util.ArrayList();
+            List parms = new java.util.ArrayList();
+
+            populateNamesAndParms(names, parms);
+
+            // now build up the filter entries for the dictionary
+            putFilterEntries(dict, names);
+            putDecodeParams(dict, parms);
+        }
+    }
+    
+    private int populateNamesAndParms(List names, List parms) {
+        // run the filters
+        int nonNullParams = 0;
+        for (int count = 0; count < filters.size(); count++) {
+            PDFFilter filter = (PDFFilter)filters.get(count);
+            // place the names in our local vector in reverse order
+            if (filter.getName().length() > 0) {
+                names.add(0, filter.getName());
+                PDFObject param = filter.getDecodeParms(); 
+                if (param != null) {
+                    parms.add(0, param);
+                    nonNullParams++;
+                } else {
+                    parms.add(0, null);
+                }
+            }
+        }
+        return nonNullParams;
+    }
+
     private String buildFilterEntries(List names) {
         int filterCount = 0;
         StringBuffer sb = new StringBuffer(64);
@@ -231,6 +276,23 @@
         }
     }
 
+    private void putFilterEntries(PDFDictionary dict, List names) {
+        PDFArray array = new PDFArray();
+        for (int i = 0, c = names.size(); i < c; i++) {
+            final String name = (String)names.get(i);
+            if (name.length() > 0) {
+                array.add(new PDFName(name));
+            }
+        }
+        if (array.length() > 0) {
+            if (array.length() > 1) {
+                dict.put("Filter", array);
+            } else {
+                dict.put("Filter", array.get(0));
+            }
+        }
+    }
+    
     private String buildDecodeParms(List parms) {
         StringBuffer sb = new StringBuffer();
         boolean needParmsEntry = false;
@@ -259,6 +321,26 @@
         }
     }
 
+    private void putDecodeParams(PDFDictionary dict, List parms) {
+        boolean needParmsEntry = false;
+        PDFArray array = new PDFArray();
+        for (int i = 0, c = parms.size(); i < c; i++) {
+            Object obj = parms.get(i);
+            if (obj != null) {
+                array.add(obj);
+                needParmsEntry = true;
+            } else {
+                array.add(null);
+            }
+        }
+        if (array.length() > 0 & needParmsEntry) {
+            if (array.length() > 1) {
+                dict.put("DecodeParams", array);
+            } else {
+                dict.put("DecodeParams", array.get(0));
+            }
+        }
+    }
     
     /**
      * Applies all registered filters as necessary. The method returns an 
@@ -269,7 +351,7 @@
      */
     public OutputStream applyFilters(OutputStream stream) throws IOException {
         OutputStream out = stream;
-        if (filters != null) {
+        if (filters != null && !isDisableAllFilters()) {
             for (int count = filters.size() - 1; count >= 0; count--) {
                 PDFFilter filter = (PDFFilter)filters.get(count);
                 out = filter.applyFilter(out);

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFormXObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFormXObject.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFormXObject.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFormXObject.java Thu Nov  8 13:27:19 2007
@@ -20,6 +20,8 @@
 package org.apache.fop.pdf;
 
 // Java
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
 import java.io.IOException;
 import java.io.OutputStream;
 
@@ -30,79 +32,149 @@
  * dictionary but a stream of image data.
  */
 public class PDFFormXObject extends PDFXObject {
+    
     private PDFStream contents;
-    private String resRef;
+    private PDFReference resRef;
 
     /**
      * create a FormXObject with the given number and name and load the
      * image in the object
      *
      * @param xnumber the pdf object X number
-     * @param cont the pdf stream contents
-     * @param ref the resource PDF reference
+     * @param contents the form's contents
+     * @param resources the resource PDF reference
      */
-    public PDFFormXObject(int xnumber, PDFStream cont, String ref) {
-        super(xnumber, null);
-        contents = cont;
-        resRef = ref;
+    public PDFFormXObject(int xnumber, PDFStream contents, PDFReference resources) {
+        super();
+        put("Name", new PDFName("Form" + xnumber));
+        this.resRef = resources;
+        this.contents = contents;
+        
+        put("Type", new PDFName("XObject"));
+        put("Subtype", new PDFName("Form"));
+        put("FormType", new Integer(1));
+        setMatrix(new AffineTransform());
     }
 
     /**
-     * Output the form stream as PDF.
-     * This sets up the form XObject dictionary and adds the content
-     * data stream.
-     *
-     * @param stream the output stream to write the data
-     * @throws IOException if there is an error writing the data
-     * @return the length of the data written
+     * Sets the bounding box of the Form XObject.
+     * @param bbox the bounding box
      */
-    protected int output(OutputStream stream) throws IOException {
-        int length = 0;
-
-        String dictEntries = getFilterList().buildFilterDictEntries();
-
-        final StreamCache encodedStream = encodeStream();        
-
-        StringBuffer sb = new StringBuffer(128);
-        sb.append(getObjectID());
-        sb.append("<</Type /XObject\n");
-        sb.append("/Subtype /Form\n");
-        sb.append("/FormType 1\n");
-        sb.append("/BBox [0 0 1000 1000]\n");
-        sb.append("/Matrix [1 0 0 1 0 0]\n");
-        sb.append("/Resources " + resRef + "\n");
-        sb.append("/Length " + (encodedStream.getSize() + 1) + "\n");
-
-        sb.append(dictEntries);
-        sb.append(">>\n");
-
-        // push the pdf dictionary on the writer
-        byte[] pdfBytes = encode(sb.toString());
-        stream.write(pdfBytes);
-        length += pdfBytes.length;
-
-        //Send encoded stream to target OutputStream
-        length += outputStreamData(encodedStream, stream);
-        encodedStream.clear(); //Encoded stream can now be discarded
-
-        pdfBytes = encode("endobj\n");
-        stream.write(pdfBytes);
-        length += pdfBytes.length;
-        
-        // let it gc
-        // this object is retained as a reference to inserting
-        // the same image but the image data is no longer needed
-        contents = null;
-        return length;
+    public void setBBox(Rectangle2D bbox) {
+        PDFArray array = (PDFArray)get("BBox");
+        if (array == null) {
+            array = new PDFArray();
+            array.add(bbox.getX());
+            array.add(bbox.getY());
+            array.add(bbox.getWidth());
+            array.add(bbox.getHeight());
+            put("BBox", array);
+        } else {
+            array.set(0, bbox.getX());
+            array.set(1, bbox.getY());
+            array.set(2, bbox.getWidth());
+            array.set(3, bbox.getHeight());
+        }
     }
     
     /**
-     * {@inheritDoc}
+     * Returns the bounding box.
+     * @return the BBox value
      */
+    public Rectangle2D getBBox() {
+        PDFArray array = (PDFArray)get("BBox");
+        if (array != null) {
+            Rectangle2D rect = new Rectangle2D.Double();
+            double x = ((Number)array.get(0)).doubleValue();
+            double y = ((Number)array.get(1)).doubleValue();
+            double w = ((Number)array.get(2)).doubleValue();
+            double h = ((Number)array.get(3)).doubleValue();
+            rect.setFrame(x, y, w, h);
+            return rect;
+        } else {
+            return null;
+        }
+    }
+    
+    /**
+     * Sets the Matrix value
+     * @param at the AffineTransform defining the transformation matrix
+     */
+    public void setMatrix(AffineTransform at) {
+        PDFArray array = (PDFArray)get("Matrix");
+        double[] m = new double[6];
+        at.getMatrix(m);
+        if (array == null) {
+            array = new PDFArray();
+            array.add(m[0]);
+            array.add(m[1]);
+            array.add(m[2]);
+            array.add(m[3]);
+            array.add(m[4]);
+            array.add(m[5]);
+            put("Matrix", array);
+        } else {
+            array.set(0, m[0]);
+            array.set(1, m[1]);
+            array.set(2, m[2]);
+            array.set(3, m[3]);
+            array.set(4, m[4]);
+            array.set(5, m[5]);
+        }
+    }
+    
+    /**
+     * Returns the Matrix value.
+     * @return the Matrix
+     */
+    public AffineTransform getMatrix() {
+        PDFArray array = (PDFArray)get("Matrix");
+        if (array != null) {
+            AffineTransform at = new AffineTransform();
+            double m00 = ((Number)array.get(0)).doubleValue();
+            double m10 = ((Number)array.get(1)).doubleValue();
+            double m01 = ((Number)array.get(2)).doubleValue();
+            double m11 = ((Number)array.get(3)).doubleValue();
+            double m02 = ((Number)array.get(4)).doubleValue();
+            double m12 = ((Number)array.get(5)).doubleValue();
+            at.setTransform(m00, m10, m01, m11, m02, m12);
+            return at;
+        } else {
+            return null;
+        }
+    }
+    
+    /**
+     * Used to set the contents of the PDF stream.
+     * @param data the contents as a byte array
+     * @throws IOException in case of an I/O problem
+     */
+    public void setData(byte[] data) throws IOException {
+        this.contents.setData(data);
+    }
+
+    /** {@inheritDoc} */
     protected void outputRawStreamData(OutputStream out) throws IOException {
         contents.outputRawStreamData(out);
     }
 
+    /** {@inheritDoc} */
+    protected int output(OutputStream stream) throws IOException {
+        final int len = super.output(stream);
+        
+        //Now that the data has been written, it can be discarded.
+        this.contents = null;
+        return len;
+    }
+
+    /** {@inheritDoc} */
+    protected void populateStreamDict(Object lengthEntry) {
+        if (get("Matrix") == null) {
+            put("Matrix", new PDFArray(new int[] {1, 0, 0, 1, 0, 0}));
+        }
+        put("Resources", resRef);
+        super.populateStreamDict(lengthEntry);
+    }
     
 }
 

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFICCStream.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFICCStream.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFICCStream.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFICCStream.java Thu Nov  8 13:27:19 2007
@@ -73,24 +73,13 @@
         cp.write(out);
     }
     
-    /**
-     * {@inheritDoc}
-     */
-    protected String buildStreamDict(String lengthEntry) {
-        final String filterEntry = getFilterList().buildFilterDictEntries();
-        final StringBuffer sb = new StringBuffer(128);
-        sb.append(getObjectID());
-        sb.append("<< ");
-        sb.append("/N " + cp.getNumComponents());
-
+    /** {@inheritDoc} */
+    protected void populateStreamDict(Object lengthEntry) {
+        put("N", cp.getNumComponents());
         if (pdfColorSpace != null) {
-            sb.append("\n/Alternate /" + pdfColorSpace.getName() + " ");
+            put("Alternate", new PDFName(pdfColorSpace.getName()));
         }
-
-        sb.append("\n/Length " + lengthEntry);
-        sb.append("\n" + filterEntry);
-        sb.append("\n>>\n");
-        return sb.toString();
+        super.populateStreamDict(lengthEntry);
     }
 
 }

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFImage.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFImage.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFImage.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFImage.java Thu Nov  8 13:27:19 2007
@@ -109,6 +109,8 @@
      * @return the PDF reference for a soft mask image
      */
     String getSoftMask();
+    
+    PDFReference getSoftMaskReference();
 
     /** @return true for CMYK images generated by Adobe Photoshop */
     boolean isInverted();

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFMetadata.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFMetadata.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFMetadata.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFMetadata.java Thu Nov  8 13:27:19 2007
@@ -101,24 +101,18 @@
     }
     
     /** {@inheritDoc} */
-    protected String buildStreamDict(String lengthEntry) {
+    protected void populateStreamDict(Object lengthEntry) {
         final String filterEntry = getFilterList().buildFilterDictEntries();
         if (getDocumentSafely().getProfile().getPDFAMode().isPDFA1LevelB() 
                 && filterEntry != null && filterEntry.length() > 0) {
             throw new PDFConformanceException(
                     "The Filter key is prohibited when PDF/A-1 is active");
         }
-        final StringBuffer sb = new StringBuffer(128);
-        sb.append(getObjectID());
-        sb.append("<< ");
-        sb.append("/Type /Metadata");
-        sb.append("\n/Subtype /XML");
-        sb.append("\n/Length " + lengthEntry);
-        sb.append("\n" + filterEntry);
-        sb.append("\n>>\n");
-        return sb.toString();
+        put("Type", new PDFName("Metadata"));
+        put("Subtype", new PDFName("XML"));
+        super.populateStreamDict(lengthEntry);
     }
-
+    
     /**
      * Creates an XMP document based on the settings on the PDF Document.
      * @param pdfDoc the PDF Document

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFNumber.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFNumber.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFNumber.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFNumber.java Thu Nov  8 13:27:19 2007
@@ -111,9 +111,13 @@
                 "The number of this PDFNumber must not be empty");
         }
         StringBuffer sb = new StringBuffer(64);
-        sb.append(getObjectID());
+        if (hasObjectNumber()) {
+            sb.append(getObjectID());
+        }
         sb.append(getNumber().toString());
-        sb.append("\nendobj\n");
+        if (hasObjectNumber()) {
+            sb.append("\nendobj\n");
+        }
         return sb.toString();
     }
 

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFObject.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFObject.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFObject.java Thu Nov  8 13:27:19 2007
@@ -251,9 +251,17 @@
      * @param sb the StringBuffer to write to
      */
     protected void formatObject(Object obj, StringBuffer sb) {
-        if (obj instanceof PDFWritable) {
+        if (obj == null) {
+            sb.append("null");
+        } else if (obj instanceof PDFWritable) {
             sb.append(((PDFWritable)obj).toInlinePDFString());
         } else if (obj instanceof Number) {
+            if (obj instanceof Double || obj instanceof Float) {
+                sb.append(PDFNumber.doubleOut(((Number)obj).doubleValue()));
+            } else {
+                sb.append(obj);
+            }
+        } else if (obj instanceof Boolean) {
             sb.append(obj);
         } else {
             sb.append("(").append(obj).append(")");

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFReference.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFReference.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFReference.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFReference.java Thu Nov  8 13:27:19 2007
@@ -42,6 +42,14 @@
         this.indirectReference = obj.referencePDF();
         this.objReference = new SoftReference(obj);
     }
+    
+    /**
+     * Creates a new PDF reference, but without a reference to the original object.
+     * @param ref an object reference
+     */
+    public PDFReference(String ref) {
+        this.indirectReference = ref;
+    }
 
     /**
      * Returns the PDF object
@@ -62,6 +70,11 @@
     /** {@inheritDoc} */
     public String toInlinePDFString() {
         return this.indirectReference;
+    }
+    
+    /** {@inheritDoc} */
+    public String toString() {
+        return toInlinePDFString();
     }
     
 }

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFResources.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFResources.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFResources.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFResources.java Thu Nov  8 13:27:19 2007
@@ -19,17 +19,16 @@
  
 package org.apache.fop.pdf;
 
-import org.apache.fop.fonts.FontInfo;
-import org.apache.fop.fonts.Typeface;
-import org.apache.fop.fonts.FontDescriptor;
-import org.apache.fop.util.ColorProfileUtil;
-
-// Java
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
-import java.util.HashMap;
-import java.util.HashSet;
+
+import org.apache.fop.fonts.FontDescriptor;
+import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.fonts.Typeface;
+import org.apache.fop.util.ColorProfileUtil;
 
 /**
  * class representing a /Resources object.
@@ -97,17 +96,22 @@
      * @param fontInfo font info object to get font information from
      */
    public void addFonts(PDFDocument doc, FontInfo fontInfo) {
-        Map fonts = fontInfo.getUsedFonts();
-        Iterator e = fonts.keySet().iterator();
+        Map usedFonts = fontInfo.getUsedFonts();
+        Iterator e = usedFonts.keySet().iterator();
         while (e.hasNext()) {
             String f = (String)e.next();
-            Typeface font = (Typeface)fonts.get(f);
-            FontDescriptor desc = null;
-            if (font instanceof FontDescriptor) {
-                desc = (FontDescriptor)font;
+            Typeface font = (Typeface)usedFonts.get(f);
+            
+            //Check if the font actually had any mapping operations. If not, it is an indication
+            //that it has never actually been used and therefore doesn't have to be embedded.
+            if (font.hadMappingOperations()) {
+                FontDescriptor desc = null;
+                if (font instanceof FontDescriptor) {
+                    desc = (FontDescriptor)font;
+                }
+                addFont(doc.getFactory().makeFont(
+                    f, font.getEmbedFontName(), font.getEncoding(), font, desc));
             }
-            addFont(doc.getFactory().makeFont(
-                f, font.getFontName(), font.getEncoding(), font, desc));
         }
     }
 
@@ -240,7 +244,7 @@
             p = p.append("/XObject <<\n");
             for (Iterator iter = xObjects.iterator(); iter.hasNext();) {
                 PDFXObject xobj = (PDFXObject)iter.next();
-                p = p.append("  /Im" + xobj.getXNumber() + " "
+                p = p.append("  " + xobj.getName() + " "
                              + xobj.referencePDF()
                              + "\n");
             }

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFStream.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFStream.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFStream.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFStream.java Thu Nov  8 13:27:19 2007
@@ -64,7 +64,17 @@
         }
 
     }
-
+    
+    /**
+     * Returns an OutputStream that can be used to write to the buffer which is used
+     * to build up the PDF stream.
+     * @return the OutputStream
+     * @throws IOException In case of an I/O problem
+     */
+    public OutputStream getBufferOutputStream() throws IOException {
+        return this.data.getOutputStream();
+    }
+    
     /**
      * Used to set the contents of the PDF stream.
      * @param data the contents as a byte array

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFT1Stream.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFT1Stream.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFT1Stream.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFT1Stream.java Thu Nov  8 13:27:19 2007
@@ -61,18 +61,12 @@
         return length;
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    protected String buildStreamDict(String lengthEntry) {
-        final String filterEntry = getFilterList().buildFilterDictEntries();
-        return (getObjectID() 
-                + "<< /Length " + lengthEntry 
-                + " /Length1 " + pfb.getLength1()
-                + " /Length2 " + pfb.getLength2()
-                + " /Length3 " + pfb.getLength3() 
-                + "\n" + filterEntry  
-                + "\n>>\n");
+    /** {@inheritDoc} */
+    protected void populateStreamDict(Object lengthEntry) {
+        super.populateStreamDict(lengthEntry);
+        put("Length1", new Integer(pfb.getLength1()));
+        put("Length2", new Integer(pfb.getLength2()));
+        put("Length3", new Integer(pfb.getLength3()));
     }
 
     /**

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFTTFStream.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFTTFStream.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFTTFStream.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFTTFStream.java Thu Nov  8 13:27:19 2007
@@ -51,18 +51,12 @@
         return length;
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    protected String buildStreamDict(String lengthEntry) {
-        final String filterEntry = getFilterList().buildFilterDictEntries();
-        return (getObjectID()
-                + "<< /Length " + lengthEntry
-                + " /Length1 " + origLength
-                + "\n" + filterEntry
-                + "\n>>\n");
+    /** {@inheritDoc} */
+    protected void populateStreamDict(Object lengthEntry) {
+        put("Length1", origLength);
+        super.populateStreamDict(lengthEntry);
     }
-
+    
     /**
      * Sets the TrueType font data.
      * @param data the font payload

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFXObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFXObject.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFXObject.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFXObject.java Thu Nov  8 13:27:19 2007
@@ -21,13 +21,9 @@
 
 // Java
 import java.io.IOException;
-import java.io.OutputStream;
-
-/* modified by JKT to integrate with 0.12.0 */
-/* modified by Eric SCHAEFFER to integrate with 0.13.0 */
 
 /**
- * PDF XObject
+ * Abstract base class of PDF XObjects.
  *
  * A derivative of the PDF Object, is a PDF Stream that has not only a
  * dictionary but a stream of image data.
@@ -36,170 +32,32 @@
  * This is used as a reference for inserting the same image in the
  * document in another place.
  */
-public class PDFXObject extends AbstractPDFStream {
+public abstract class PDFXObject extends AbstractPDFStream {
     
-    private PDFImage pdfimage;
-    private int xnum;
-
     /**
-     * create an XObject with the given number and name and load the
-     * image in the object
-     *
-     * @param xnumber the pdf object X number
-     * @param img the pdf image that contains the image data
+     * Create an XObject with the given number.
      */
-    public PDFXObject(int xnumber, PDFImage img) {
+    public PDFXObject() {
         super();
-        this.xnum = xnumber;
-        pdfimage = img;
-    }
-
-    /**
-     * Get the xnumber for this pdf object.
-     *
-     * @return the PDF XObject number
-     */
-    public int getXNumber() {
-        return this.xnum;
-    }
-
-    /**
-     * Output the image as PDF.
-     * This sets up the image dictionary and adds the image data stream.
-     *
-     * @param stream the output stream to write the data
-     * @throws IOException if there is an error writing the data
-     * @return the length of the data written
-     */
-    protected int output(OutputStream stream) throws IOException {
-        int length = super.output(stream);
-        
-        // let it gc
-        // this object is retained as a reference to inserting
-        // the same image but the image data is no longer needed
-        pdfimage = null;
-        return length;
     }
 
     /**
-     * {@inheritDoc}
+     * Returns the XObject's name.
+     * @return the name of the XObject
      */
-    protected String buildStreamDict(String lengthEntry) {
-        String dictEntries = getFilterList().buildFilterDictEntries();
-        if (pdfimage.isPS()) {
-            return buildDictionaryFromPS(lengthEntry, dictEntries);
-        } else {
-            return buildDictionaryFromImage(lengthEntry, dictEntries);
-        }
+    public PDFName getName() {
+        return (PDFName)get("Name");
     }
     
-    private String buildDictionaryFromPS(String lengthEntry, 
-                                         String dictEntries) {
-        getDocumentSafely().getProfile().verifyPSXObjectsAllowed();
-        StringBuffer sb = new StringBuffer(128);
-        sb.append(getObjectID());
-        sb.append("<</Type /XObject\n");
-        sb.append("/Subtype /PS\n");
-        sb.append("/Length " + lengthEntry);
-
-        sb.append(dictEntries);
-        sb.append("\n>>\n");
-        return sb.toString();
-    }
-
-    private String buildDictionaryFromImage(String lengthEntry,
-                                            String dictEntries) {
-        StringBuffer sb = new StringBuffer(128);
-        sb.append(getObjectID());
-        sb.append("<</Type /XObject\n");
-        sb.append("/Subtype /Image\n");
-        sb.append("/Name /Im" + xnum + "\n");
-        sb.append("/Length " + lengthEntry + "\n");
-        sb.append("/Width " + pdfimage.getWidth() + "\n");
-        sb.append("/Height " + pdfimage.getHeight() + "\n");
-        sb.append("/BitsPerComponent " + pdfimage.getBitsPerPixel() + "\n");
-
-        PDFICCStream pdfICCStream = pdfimage.getICCStream();
-        if (pdfICCStream != null) {
-            sb.append("/ColorSpace [/ICCBased "
-                + pdfICCStream.referencePDF() + "]\n");
-        } else {
-            PDFDeviceColorSpace cs = pdfimage.getColorSpace();
-            sb.append("/ColorSpace /" + cs.getName()
-                  + "\n");
-        }
-
-        if (pdfimage.isInverted()) {
-            /* PhotoShop generates CMYK values that's inverse,
-             * this will invert the values - too bad if it's not
-             * a PhotoShop image...
-             */
-            if (pdfimage.getColorSpace().getColorSpace() == PDFDeviceColorSpace.DEVICE_CMYK) {
-                sb.append("/Decode [ 1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0 ]\n");
-            } else if (pdfimage.getColorSpace().getColorSpace() == PDFDeviceColorSpace.DEVICE_RGB) {
-                sb.append("/Decode [ 1.0 0.0 1.0 0.0 1.0 0.0 ]\n");
-            } else if (pdfimage.getColorSpace().getColorSpace() == PDFDeviceColorSpace.DEVICE_GRAY) {
-                sb.append("/Decode [ 1.0 0.0 ]\n");
-            }
-        }
-
-        if (pdfimage.isTransparent()) {
-            PDFColor transp = pdfimage.getTransparentColor();
-            sb.append("/Mask [" 
-                + transp.red255() + " "
-                + transp.red255() + " " 
-                + transp.green255() + " " 
-                + transp.green255() + " "
-                + transp.blue255() + " " 
-                + transp.blue255() + "]\n");
-        }
-        String ref = pdfimage.getSoftMask();
-        if (ref != null) {
-            sb.append("/SMask " + ref + "\n");
-        }
-
-        sb.append(dictEntries);
-        sb.append("\n>>\n");
-        return sb.toString();
+    /** {@inheritDoc} */
+    protected void populateStreamDict(Object lengthEntry) {
+        put("Type", new PDFName("XObject"));
+        super.populateStreamDict(lengthEntry);
     }
     
-    /**
-     * {@inheritDoc}
-     */
-    protected void outputRawStreamData(OutputStream out) throws IOException {
-        pdfimage.outputContents(out);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
+    /** {@inheritDoc} */
     protected int getSizeHint() throws IOException {
         return 0;
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected void prepareImplicitFilters() {
-        PDFFilter pdfFilter = pdfimage.getPDFFilter();
-        if (pdfFilter != null) {
-            getFilterList().ensureFilterInPlace(pdfFilter);
-        }
-    }
-    
-    /**
-     * This sets up the default filters for XObjects. It uses the PDFImage
-     * instance to determine what default filters to apply.
-     * {@inheritDoc}
-     */
-    protected void setupFilterList() {
-        if (!getFilterList().isInitialized()) {
-            getFilterList().addDefaultFilters(
-                getDocumentSafely().getFilterMap(), 
-                pdfimage.getFilterHint());
-        }
-        super.setupFilterList();
-    }
-    
 
 }

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/PrintRendererConfigurator.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/PrintRendererConfigurator.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/PrintRendererConfigurator.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/PrintRendererConfigurator.java Thu Nov  8 13:27:19 2007
@@ -21,6 +21,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Iterator;
 import java.util.List;
@@ -53,9 +54,6 @@
 public class PrintRendererConfigurator extends AbstractRendererConfigurator 
             implements RendererConfigurator {
 
-    /** have we already autodetected system fonts? */
-    private static boolean autodetectedFonts = false;
-
     /** logger instance */
     protected static Log log = LogFactory.getLog(PrintRendererConfigurator.class);
 
@@ -126,7 +124,7 @@
             
             // native o/s search (autodetect) configuration
             boolean autodetectFonts = (fonts.getChild("auto-detect", false) != null);
-            if (!autodetectedFonts && autodetectFonts) {
+            if (autodetectFonts) {
                 // search in font base if it is defined and
                 // is a directory but don't recurse
                 FontFileFinder fontFileFinder = new FontFileFinder();
@@ -158,7 +156,6 @@
                 } catch (IOException e) {
                     LogUtil.handleException(log, e, strict);
                 }
-                autodetectedFonts = true;
             }
 
             // directory (multiple font) configuration
@@ -216,10 +213,10 @@
     private static void addFontInfoListFromFileList(
             List fontFileList, List fontInfoList, FontResolver resolver, FontCache fontCache) {
         for (Iterator iter = fontFileList.iterator(); iter.hasNext();) {
-            File fontFile = (File)iter.next();
+            URL fontUrl = (URL)iter.next();
             // parse font to ascertain font info
             FontInfoFinder finder = new FontInfoFinder();
-            EmbedFontInfo fontInfo = finder.find(fontFile, resolver, fontCache);
+            EmbedFontInfo fontInfo = finder.find(fontUrl, resolver, fontCache);
             if (fontInfo != null) {
                 fontInfoList.add(fontInfo);                
             }
@@ -274,9 +271,17 @@
 
             // if not strict try to determine font info from the embed/metrics url
             File fontFile = CachedFontInfo.getFileFromUrls(new String[] {embedUrl, metricsUrl});
+            URL fontUrl;
+            try {
+                fontUrl = fontFile.toURI().toURL();
+            } catch (MalformedURLException e) {
+                // Should never happen
+                log.debug("Malformed Url: " + e.getMessage());
+                return null;
+            }
             if (fontFile != null) {
                 FontInfoFinder finder = new FontInfoFinder();
-                return finder.find(fontFile, fontResolver, fontCache);
+                return finder.find(fontUrl, fontResolver, fontCache);
             } else {
                 return null;
             }

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/AFPFont.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/AFPFont.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/AFPFont.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/AFPFont.java Thu Nov  8 13:27:19 2007
@@ -19,35 +19,51 @@
 
 package org.apache.fop.render.afp.fonts;
 import java.util.Map;
+import java.util.Set;
+
 import org.apache.fop.fonts.FontType;
 import org.apache.fop.fonts.Typeface;
 
 
 /**
- * All implemenations of AFP fonts should extend this base class,
+ * All implementations of AFP fonts should extend this base class,
  * the object implements the FontMetrics information.
  * <p/>
  */
 public abstract class AFPFont extends Typeface {
 
     /** The font name */
-    protected String _name;
+    protected String name;
 
     /**
      * Constructor for the base font requires the name.
      * @param name the name of the font
      */
     public AFPFont(String name) {
-
-        _name = name;
+        this.name = name;
 
     }
 
-    /**
-     * @return the name of the font.
-     */
+    /** {@inheritDoc} */
     public String getFontName() {
-        return _name;
+        return this.name;
+    }
+
+    /** {@inheritDoc} */
+    public String getEmbedFontName() {
+        return this.name;
+    }
+
+    /** {@inheritDoc} */
+    public String getFullName() {
+        return getFontName();
+    }
+
+    /** {@inheritDoc} */
+    public Set getFamilyNames() {
+        Set s = new java.util.HashSet();
+        s.add(this.name);
+        return s;
     }
 
     /**
@@ -59,7 +75,7 @@
     }
 
     /**
-     * Indicates if the font has kering information.
+     * Indicates if the font has kerning information.
      * @return True, if kerning is available.
      */
     public boolean hasKerningInfo() {
@@ -84,7 +100,7 @@
      /**
      * Determines whether this font contains a particular character/glyph.
      * @param c character to check
-     * @return True if the character is supported, Falso otherwise
+     * @return True if the character is supported, False otherwise
      */
     public boolean hasChar(char c) {
         return true;

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/RasterFont.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/RasterFont.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/RasterFont.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/RasterFont.java Thu Nov  8 13:27:19 2007
@@ -92,13 +92,13 @@
             }
             if (csm != null) {
                 _characterSets.put(size + "mpt", csm);
-                String msg = "No " + (size / 1000) + "pt font " + _name
+                String msg = "No " + (size / 1000) + "pt font " + getFontName()
                     + " found, substituted with " + pointsize + "pt font";
                 log.warn(msg);
             }
         }
         if (csm == null) {
-            String msg = "No font found for font " + _name
+            String msg = "No font found for font " + getFontName()
                 + " with point size " + pointsize;
             log.error(msg);
             throw new FontRuntimeException(msg);
@@ -117,7 +117,7 @@
             CharacterSet csm = (CharacterSet) i.next();
             return csm.getFirstChar();
         } else {
-            String msg = "getFirstChar() - No character set found for font:" + _name;
+            String msg = "getFirstChar() - No character set found for font:" + getFontName();
             log.error(msg);
             throw new FontRuntimeException(msg);
         }
@@ -134,7 +134,7 @@
             CharacterSet csm = (CharacterSet) i.next();
             return csm.getLastChar();
         } else {
-            String msg = "getLastChar() - No character set found for font:" + _name;
+            String msg = "getLastChar() - No character set found for font:" + getFontName();
             log.error(msg);
             throw new FontRuntimeException(msg);
         }

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/bitmap/PNGRendererMaker.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/bitmap/PNGRendererMaker.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/bitmap/PNGRendererMaker.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/bitmap/PNGRendererMaker.java Thu Nov  8 13:27:19 2007
@@ -23,6 +23,8 @@
 import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.render.AbstractRendererMaker;
 import org.apache.fop.render.Renderer;
+import org.apache.fop.render.RendererConfigurator;
+import org.apache.fop.render.java2d.Java2DRendererConfigurator;
 
 /**
  * RendererMaker for the PNG Renderer.
@@ -35,6 +37,11 @@
     /** {@inheritDoc} */
     public Renderer makeRenderer(FOUserAgent ua) {
         return new PNGRenderer();
+    }
+
+    /** {@inheritDoc} */
+    public RendererConfigurator getConfigurator(FOUserAgent userAgent) {
+        return new Java2DRendererConfigurator(userAgent);
     }
 
     /** {@inheritDoc} */

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontMetricsMapper.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontMetricsMapper.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontMetricsMapper.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontMetricsMapper.java Thu Nov  8 13:27:19 2007
@@ -22,8 +22,8 @@
 // Java
 import java.awt.Graphics2D;
 import java.util.Map;
+import java.util.Set;
 
-// FOP
 import org.apache.fop.fonts.FontMetrics;
 import org.apache.fop.fonts.FontType;
 import org.apache.fop.fonts.Typeface;
@@ -72,11 +72,26 @@
         }
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    /** {@inheritDoc} */
     public String getFontName() {
         return family;
+    }
+
+    /** {@inheritDoc} */
+    public String getEmbedFontName() {
+        return getFontName();
+    }
+
+    /** {@inheritDoc} */
+    public String getFullName() {
+        return getFontName();
+    }
+
+    /** {@inheritDoc} */
+    public Set getFamilyNames() {
+        Set s = new java.util.HashSet();
+        s.add(this.family);
+        return s;
     }
 
     /**

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontSetup.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontSetup.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontSetup.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontSetup.java Thu Nov  8 13:27:19 2007
@@ -20,16 +20,16 @@
 package org.apache.fop.render.java2d;
 
 // FOP
+import java.awt.Graphics2D;
+import java.awt.GraphicsEnvironment;
+import java.util.Set;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.fonts.Font;
+import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.fonts.FontTriplet;
-
-// Java
-import java.awt.Graphics2D;
-import java.awt.GraphicsEnvironment;
-import java.util.Set;
+import org.apache.fop.fonts.FontUtil;
 
 /**
  * Sets up the Java2D/AWT fonts. It is similar to
@@ -214,54 +214,66 @@
             int startNumber) {
         int num = startNumber;
         GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
-        String[] allFontFamilies = env.getAvailableFontFamilyNames();
-        for (int i = 0; i < allFontFamilies.length; i++) {
-            String family = allFontFamilies[i];
-            if (HARDCODED_FONT_NAMES.contains(family)) {
+        
+        java.awt.Font[] fonts = env.getAllFonts();
+        for (int i = 0; i < fonts.length; i++) {
+            java.awt.Font f = fonts[i];
+            if (HARDCODED_FONT_NAMES.contains(f.getFontName())) {
                 continue; //skip
             }
-
-            if (log.isDebugEnabled()) {
-                log.debug("Registering: " + family);
+            
+            if (log.isTraceEnabled()) {
+                log.trace("AWT Font: " + f.getFontName() 
+                        + ", family: " + f.getFamily() 
+                        + ", PS: " + f.getPSName() 
+                        + ", Name: " + f.getName()
+                        + ", Angle: " + f.getItalicAngle()
+                        + ", Style: " + f.getStyle());
             }
             
-            //Java does not give info about what variants of a font is actually supported, so
-            //we simply register all the basic variants. If we use GraphicsEnvironment.getAllFonts()
-            //we don't get reliable info whether a font is italic or bold or both.
-            int fontStyle;
-            fontStyle = java.awt.Font.PLAIN;
-            registerFontTriplet(fontInfo, family, fontStyle, "F" + num, graphics);
-            num++;
+            String searchName = FontUtil.stripWhiteSpace(f.getFontName()).toLowerCase();
+            String guessedStyle = FontUtil.guessStyle(searchName);
+            int guessedWeight = FontUtil.guessWeight(searchName);
 
-            fontStyle = java.awt.Font.ITALIC;
-            registerFontTriplet(fontInfo, family, fontStyle, "F" + num, graphics);
             num++;
+            String fontKey = "F" + num;
+            int style = convertToAWTFontStyle(guessedStyle, guessedWeight);
+            addFontMetricsMapper(fontInfo, f.getFontName(), fontKey, graphics, style);
+            
+            //Register appropriate font triplets matching the font. Two different strategies:
+            //Example: "Arial Bold", normal, normal
+            addFontTriplet(fontInfo, f.getFontName(),
+                    Font.STYLE_NORMAL, Font.WEIGHT_NORMAL, fontKey);
+            if (!f.getFontName().equals(f.getFamily())) {
+                //Example: "Arial", bold, normal
+                addFontTriplet(fontInfo, f.getFamily(),
+                        guessedStyle, guessedWeight, fontKey);
+            }
+        }
 
-            fontStyle = java.awt.Font.BOLD;
-            registerFontTriplet(fontInfo, family, fontStyle, "F" + num, graphics);
-            num++;
+    }
 
-            fontStyle = java.awt.Font.BOLD | java.awt.Font.ITALIC;
-            registerFontTriplet(fontInfo, family, fontStyle, "F" + num, graphics);
-            num++;
-        }
+    private static void addFontTriplet(FontInfo fontInfo, String fontName, String fontStyle,
+            int fontWeight, String fontKey) {
+        FontTriplet triplet = FontInfo.createFontKey(fontName, fontStyle, fontWeight);
+        fontInfo.addFontProperties(fontKey, triplet);
     }
 
-    private static void registerFontTriplet(FontInfo fontInfo, String family, int fontStyle, 
-            String fontKey, Graphics2D graphics) {
-        FontMetricsMapper metric = new FontMetricsMapper(family, fontStyle, graphics);
+    private static void addFontMetricsMapper(FontInfo fontInfo, String family, String fontKey,
+            Graphics2D graphics, int style) {
+        FontMetricsMapper metric = new FontMetricsMapper(family, style, graphics);
         fontInfo.addMetrics(fontKey, metric);
-        
-        int weight = Font.WEIGHT_NORMAL;
-        if ((fontStyle & java.awt.Font.BOLD) != 0) {
-            weight = Font.WEIGHT_BOLD;
+    }
+
+    private static int convertToAWTFontStyle(String fontStyle, int fontWeight) {
+        int style = java.awt.Font.PLAIN;
+        if (fontWeight >= Font.WEIGHT_BOLD) {
+            style |= java.awt.Font.BOLD;
         }
-        String style = "normal";
-        if ((fontStyle & java.awt.Font.ITALIC) != 0) {
-            style = "italic";
+        if (!"normal".equals(fontStyle)) {
+            style |= java.awt.Font.ITALIC;
         }
-        FontTriplet triplet = FontInfo.createFontKey(family, style, weight);
-        fontInfo.addFontProperties(fontKey, triplet);
+        return style;
     }
     
 }

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/FopPDFImage.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/FopPDFImage.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/FopPDFImage.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/FopPDFImage.java Thu Nov  8 13:27:19 2007
@@ -18,32 +18,32 @@
 /* $Id$ */
 
 package org.apache.fop.render.pdf;
+import java.awt.color.ColorSpace;
+import java.awt.color.ICC_Profile;
+import java.io.IOException;
+import java.io.OutputStream;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.fop.image.EPSImage;
+import org.apache.fop.image.FopImage;
+import org.apache.fop.image.TIFFImage;
+import org.apache.fop.pdf.BitmapImage;
+import org.apache.fop.pdf.CCFFilter;
+import org.apache.fop.pdf.DCTFilter;
+import org.apache.fop.pdf.PDFColor;
 import org.apache.fop.pdf.PDFConformanceException;
+import org.apache.fop.pdf.PDFDeviceColorSpace;
+import org.apache.fop.pdf.PDFDictionary;
+import org.apache.fop.pdf.PDFDocument;
+import org.apache.fop.pdf.PDFFilter;
 import org.apache.fop.pdf.PDFFilterList;
 import org.apache.fop.pdf.PDFICCBasedColorSpace;
-import org.apache.fop.pdf.PDFImage;
-import org.apache.fop.pdf.PDFFilter;
 import org.apache.fop.pdf.PDFICCStream;
-import org.apache.fop.pdf.PDFColor;
-import org.apache.fop.pdf.PDFDocument;
-import org.apache.fop.pdf.DCTFilter;
-import org.apache.fop.pdf.CCFFilter;
-import org.apache.fop.pdf.PDFDeviceColorSpace;
-import org.apache.fop.pdf.PDFXObject;
-import org.apache.fop.pdf.BitmapImage;
+import org.apache.fop.pdf.PDFImage;
+import org.apache.fop.pdf.PDFReference;
 import org.apache.fop.util.ColorProfileUtil;
 
-import org.apache.fop.image.FopImage;
-import org.apache.fop.image.EPSImage;
-import org.apache.fop.image.TIFFImage;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.awt.color.ColorSpace;
-import java.awt.color.ICC_Profile;
-
 /**
  * PDFImage implementation for the PDF renderer.
  */
@@ -56,7 +56,7 @@
     private PDFICCStream pdfICCStream = null;
     private PDFFilter pdfFilter = null;
     private String maskRef;
-    private String softMaskRef;
+    private PDFReference softMask;
     private boolean isPS = false;
     private boolean isCCF = false;
     private boolean isDCT = false;
@@ -104,8 +104,10 @@
                 } else if (comp == 4) {
                     pdfFilter = new CCFFilter();
                     pdfFilter.setApplied(true);
-                    ((CCFFilter)pdfFilter).setDecodeParms("<< /K -1 /Columns " 
-                        + tiffImage.getWidth() + " >>");
+                    PDFDictionary dict = new PDFDictionary();
+                    dict.put("K", -1);
+                    dict.put("Columns", tiffImage.getWidth());
+                    ((CCFFilter)pdfFilter).setDecodeParms(dict);
                     isCCF = true;
                 } else if (comp == 6) {
                     pdfFilter = new DCTFilter();
@@ -149,16 +151,15 @@
             doc.getProfile().verifyTransparencyAllowed(fopImage.getOriginalURI());
             //TODO Implement code to combine image with background color if transparency is not
             //allowed (need BufferedImage support for that)
-            byte [] softMask = fopImage.getSoftMask();
-            if (softMask == null) {
+            byte [] softMaskBitmap = fopImage.getSoftMask();
+            if (softMaskBitmap == null) {
                 return;
             }
             BitmapImage fopimg = new BitmapImage
                 ("Mask:" + key, fopImage.getWidth(), fopImage.getHeight(), 
-                 softMask, null);
+                 softMaskBitmap, null);
             fopimg.setColorSpace(new PDFDeviceColorSpace(PDFDeviceColorSpace.DEVICE_GRAY));
-            PDFXObject xobj = doc.addImage(null, fopimg);
-            softMaskRef = xobj.referencePDF();
+            softMask = doc.addImage(null, fopimg).makeReference();
         }
         if (doc.getProfile().getPDFAMode().isPDFA1LevelB()) {
             if (pdfCS != null
@@ -236,13 +237,16 @@
         return maskRef;
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    /** {@inheritDoc} */
     public String getSoftMask() {
-        return softMaskRef;
+        return softMask.toInlinePDFString();
     }
 
+    /** {@inheritDoc} */
+    public PDFReference getSoftMaskReference() {
+        return softMask;
+    }
+    
     /** @return true for CMYK images generated by Adobe Photoshop */
     public boolean isInverted() {
         return fopImage.isInverted();

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/PDFRenderer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/PDFRenderer.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/PDFRenderer.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/PDFRenderer.java Thu Nov  8 13:27:19 2007
@@ -20,58 +20,56 @@
 package org.apache.fop.render.pdf;
 
 // Java
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.awt.geom.Point2D;
 import java.awt.Color;
 import java.awt.color.ColorSpace;
 import java.awt.color.ICC_Profile;
-import java.awt.geom.Rectangle2D;
 import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
 import java.util.Iterator;
-import java.util.Map;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.transform.Source;
 import javax.xml.transform.stream.StreamSource;
 
-// XML
-import org.w3c.dom.Document;
-
-// Avalon
 import org.apache.commons.io.IOUtils;
-
-// FOP
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
+import org.apache.fop.area.BookmarkData;
 import org.apache.fop.area.CTM;
+import org.apache.fop.area.DestinationData;
 import org.apache.fop.area.LineArea;
 import org.apache.fop.area.OffDocumentExtensionAttachment;
+import org.apache.fop.area.OffDocumentItem;
 import org.apache.fop.area.PageViewport;
 import org.apache.fop.area.RegionViewport;
 import org.apache.fop.area.Trait;
-import org.apache.fop.area.OffDocumentItem;
-import org.apache.fop.area.BookmarkData;
 import org.apache.fop.area.inline.AbstractTextArea;
-import org.apache.fop.area.inline.TextArea;
 import org.apache.fop.area.inline.Image;
-import org.apache.fop.area.inline.Leader;
 import org.apache.fop.area.inline.InlineArea;
 import org.apache.fop.area.inline.InlineParent;
-import org.apache.fop.area.inline.WordArea;
+import org.apache.fop.area.inline.Leader;
 import org.apache.fop.area.inline.SpaceArea;
-import org.apache.fop.fonts.Typeface;
+import org.apache.fop.area.inline.TextArea;
+import org.apache.fop.area.inline.WordArea;
+import org.apache.fop.fo.Constants;
+import org.apache.fop.fo.extensions.ExtensionAttachment;
+import org.apache.fop.fo.extensions.xmp.XMPMetadata;
 import org.apache.fop.fonts.Font;
+import org.apache.fop.fonts.Typeface;
 import org.apache.fop.image.FopImage;
 import org.apache.fop.image.ImageFactory;
 import org.apache.fop.image.XMLImage;
-import org.apache.fop.pdf.PDFAction;
 import org.apache.fop.pdf.PDFAMode;
+import org.apache.fop.pdf.PDFAction;
 import org.apache.fop.pdf.PDFAnnotList;
 import org.apache.fop.pdf.PDFColor;
 import org.apache.fop.pdf.PDFConformanceException;
@@ -102,14 +100,10 @@
 import org.apache.fop.render.RendererContext;
 import org.apache.fop.util.CharUtilities;
 import org.apache.fop.util.ColorProfileUtil;
-import org.apache.fop.fo.Constants;
-import org.apache.fop.fo.extensions.ExtensionAttachment;
-import org.apache.fop.fo.extensions.xmp.XMPMetadata;
 import org.apache.xmlgraphics.xmp.Metadata;
 import org.apache.xmlgraphics.xmp.schemas.XMPBasicAdapter;
 import org.apache.xmlgraphics.xmp.schemas.XMPBasicSchema;
-
-import org.apache.fop.area.DestinationData;
+import org.w3c.dom.Document;
 
 /**
  * Renderer that renders areas to PDF.
@@ -256,6 +250,9 @@
      */
     protected boolean inTextMode = false;
 
+    /** Image handler registry */
+    private PDFImageHandlerRegistry imageHandlerRegistry = new PDFImageHandlerRegistry();
+    
     /**
      * create the PDF renderer
      */
@@ -1659,21 +1656,21 @@
     }
     
     /**
-     * Adds a PDF XObject (a bitmap) to the PDF that will later be referenced.
+     * Adds a PDF XObject (a bitmap or form) to the PDF that will later be referenced.
      * @param url URL of the bitmap
      * @param pos Position of the bitmap
      */
     protected void putImage(String url, Rectangle2D pos) {
-        PDFXObject xobject = pdfDoc.getImage(url);
+        url = ImageFactory.getURL(url);
+        PDFXObject xobject = pdfDoc.getXObject(url);
         if (xobject != null) {
             float w = (float) pos.getWidth() / 1000f;
             float h = (float) pos.getHeight() / 1000f;
             placeImage((float)pos.getX() / 1000f,
-                       (float)pos.getY() / 1000f, w, h, xobject.getXNumber());
+                       (float)pos.getY() / 1000f, w, h, xobject);
             return;
         }
 
-        url = ImageFactory.getURL(url);
         ImageFactory fact = userAgent.getFactory().getImageFactory();
         FopImage fopimage = fact.getImage(url, userAgent);
         if (fopimage == null) {
@@ -1683,7 +1680,24 @@
             return;
         }
         String mime = fopimage.getMimeType();
-        if ("text/xml".equals(mime)) {
+        
+        //First check for a dynamically registered handler
+        PDFImageHandler handler = imageHandlerRegistry.getHandler(mime);
+        if (handler != null) {
+            PDFXObject xobj;
+            try {
+                xobj = handler.generateImage(fopimage, url, pdfDoc);
+            } catch (IOException ioe) {
+                log.error("I/O error while handling " + mime + " image", ioe);
+                return;
+            }
+            fact.releaseImage(url, userAgent);
+            
+            float w = (float)pos.getWidth() / 1000f;
+            float h = (float)pos.getHeight() / 1000f;
+            placeImage((float) pos.getX() / 1000,
+                       (float) pos.getY() / 1000, w, h, xobj);
+        } else if ("text/xml".equals(mime)) {
             if (!fopimage.load(FopImage.ORIGINAL_DATA)) {
                 return;
             }
@@ -1701,7 +1715,7 @@
             renderDocument(doc, ns, pos, null);
         } else if ("image/eps".equals(mime)) {
             FopPDFImage pdfimage = new FopPDFImage(fopimage, url);
-            int xobj = pdfDoc.addImage(currentContext, pdfimage).getXNumber();
+            PDFXObject xobj = pdfDoc.addImage(currentContext, pdfimage);
             fact.releaseImage(url, userAgent);
             
             float w = (float)pos.getWidth() / 1000f;
@@ -1710,7 +1724,7 @@
                        (float) pos.getY() / 1000, w, h, xobj);
         } else if ("image/jpeg".equals(mime) || "image/tiff".equals(mime)) {
             FopPDFImage pdfimage = new FopPDFImage(fopimage, url);
-            int xobj = pdfDoc.addImage(currentContext, pdfimage).getXNumber();
+            PDFXObject xobj = pdfDoc.addImage(currentContext, pdfimage);
             fact.releaseImage(url, userAgent);
 
             float w = (float)pos.getWidth() / 1000f;
@@ -1722,7 +1736,7 @@
                 return;
             }
             FopPDFImage pdfimage = new FopPDFImage(fopimage, url);
-            int xobj = pdfDoc.addImage(currentContext, pdfimage).getXNumber();
+            PDFXObject xobj = pdfDoc.addImage(currentContext, pdfimage);
             fact.releaseImage(url, userAgent);
 
             float w = (float) pos.getWidth() / 1000f;
@@ -1745,15 +1759,15 @@
      * @param y Y coordinate
      * @param w width for image
      * @param h height for image
-     * @param xobj object number of the referenced image
+     * @param xobj the image XObject
      */
-    protected void placeImage(float x, float y, float w, float h, int xobj) {
+    protected void placeImage(float x, float y, float w, float h, PDFXObject xobj) {
         saveGraphicsState();
         currentStream.add(format(w) + " 0 0 "
                           + format(-h) + " "
                           + format(currentIPPosition / 1000f + x) + " "
                           + format(currentBPPosition / 1000f + h + y) 
-                          + " cm\n" + "/Im" + xobj + " Do\n");
+                          + " cm\n" + xobj.getName() + " Do\n");
         restoreGraphicsState();
     }
 

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/AbstractPSTranscoder.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/AbstractPSTranscoder.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/AbstractPSTranscoder.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/AbstractPSTranscoder.java Thu Nov  8 13:27:19 2007
@@ -21,7 +21,6 @@
 
 
 import java.awt.Color;
-
 import java.io.IOException;
 
 import org.apache.avalon.framework.configuration.Configuration;
@@ -29,15 +28,12 @@
 import org.apache.batik.bridge.UnitProcessor;
 import org.apache.batik.transcoder.TranscoderException;
 import org.apache.batik.transcoder.TranscoderOutput;
-
 import org.apache.batik.transcoder.image.ImageTranscoder;
-
 import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.fonts.FontSetup;
 import org.apache.fop.svg.AbstractFOPTranscoder;
 import org.apache.xmlgraphics.java2d.ps.AbstractPSDocumentGraphics2D;
 import org.apache.xmlgraphics.java2d.ps.TextHandler;
-
 import org.w3c.dom.Document;
 import org.w3c.dom.svg.SVGLength;
 
@@ -137,15 +133,6 @@
         }
     }
     
-    /** @return true if text should be stroked rather than painted using text operators */
-    protected boolean isTextStroked() {
-        boolean stroke = false;
-        if (hints.containsKey(KEY_STROKE_TEXT)) {
-            stroke = ((Boolean)hints.get(KEY_STROKE_TEXT)).booleanValue();
-        }
-        return stroke;
-    }
-
     /** {@inheritDoc} */
     protected BridgeContext createBridgeContext() {
 

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/NativeTextHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/NativeTextHandler.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/NativeTextHandler.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/NativeTextHandler.java Thu Nov  8 13:27:19 2007
@@ -27,7 +27,6 @@
 import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.fonts.FontSetup;
 import org.apache.fop.fonts.FontTriplet;
-
 import org.apache.xmlgraphics.java2d.ps.PSGraphics2D;
 import org.apache.xmlgraphics.java2d.ps.TextHandler;
 import org.apache.xmlgraphics.ps.PSGenerator;
@@ -96,9 +95,7 @@
 
     /** {@inheritDoc} */
     public void writePageSetup() throws IOException {
-        if (fontInfo != null) {         
-            getPSGenerator().writeln("FOPFonts begin");
-        }
+        //nop
     }
 
     /**

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRenderer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRenderer.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRenderer.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRenderer.java Thu Nov  8 13:27:19 2007
@@ -830,6 +830,7 @@
                 PSExtensionAttachment comment = (PSExtensionAttachment)iter.next();
                 gen.commentln("%" + comment.getContent());
             }
+            footerComments.clear();
         }
         gen.writeDSCComment(DSCConstants.PAGES, new Integer(this.currentPageNumber));
         gen.getResourceTracker().writeResources(false, gen);
@@ -840,7 +841,12 @@
             IOUtils.closeQuietly(gen.getOutputStream());
             rewritePostScriptFile();
         }
-        this.pageDeviceDictionary.clear();
+        if (footerComments != null) {
+            headerComments.clear();
+        }
+        if (pageDeviceDictionary != null) {
+            pageDeviceDictionary.clear();
+        }
     }
     
     /**
@@ -910,12 +916,12 @@
                         }
                     } else if (attachment instanceof PSCommentBefore) {
                         if (headerComments == null) {
-                            headerComments = new java.util.TreeSet();
+                            headerComments = new java.util.ArrayList();
                         }
                         headerComments.add(attachment);
                     } else if (attachment instanceof PSCommentAfter) {
                         if (footerComments == null) {
-                            footerComments = new java.util.TreeSet();
+                            footerComments = new java.util.ArrayList();
                         }
                         footerComments.add(attachment);
                     }
@@ -1055,10 +1061,12 @@
         if (page.hasExtensionAttachments()) {
             List extensionAttachments = page.getExtensionAttachments();
             for (int i = 0; i < extensionAttachments.size(); i++) {
-                PSExtensionAttachment attachment
-                    = (PSExtensionAttachment)extensionAttachments.get(i);
-                if (attachment instanceof PSCommentBefore) {
-                    gen.commentln("%" + attachment.getContent());
+                Object attObj = extensionAttachments.get(i);
+                if (attObj instanceof PSExtensionAttachment) {
+                    PSExtensionAttachment attachment = (PSExtensionAttachment)attObj;
+                    if (attachment instanceof PSCommentBefore) {
+                        gen.commentln("%" + attachment.getContent());
+                    }
                 }
             }
         }
@@ -1091,10 +1099,12 @@
         if (page.hasExtensionAttachments()) {
             List extensionAttachments = page.getExtensionAttachments();
             for (int i = 0; i < extensionAttachments.size(); i++) {
-                PSExtensionAttachment attachment;
-                attachment = (PSExtensionAttachment)extensionAttachments.get(i);
-                if (attachment instanceof PSCommentAfter) {
-                    gen.commentln("%" + attachment.getContent());
+                Object attObj = extensionAttachments.get(i);
+                if (attObj instanceof PSExtensionAttachment) {
+                    PSExtensionAttachment attachment = (PSExtensionAttachment)attObj;
+                    if (attachment instanceof PSCommentAfter) {
+                        gen.commentln("%" + attachment.getContent());
+                    }
                 }
             }
         }

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java Thu Nov  8 13:27:19 2007
@@ -24,6 +24,7 @@
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.render.PrintRendererConfigurator;
 import org.apache.fop.render.Renderer;
+import org.apache.xmlgraphics.ps.PSGenerator;
 
 /**
  * Postscript renderer config 
@@ -55,7 +56,8 @@
             Configuration child;
             child = cfg.getChild("language-level");
             if (child != null) {
-                psRenderer.setLanguageLevel(child.getValueAsInteger(-1));
+                psRenderer.setLanguageLevel(child.getValueAsInteger(
+                        PSGenerator.DEFAULT_LANGUAGE_LEVEL));
             }
             child = cfg.getChild("optimize-resources");
             if (child != null) {

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentAfterElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentAfterElement.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentAfterElement.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentAfterElement.java Thu Nov  8 13:27:19 2007
@@ -27,6 +27,8 @@
  */
 public class PSCommentAfterElement extends AbstractPSCommentElement {
 
+    protected static final String ELEMENT = "ps-comment-after";
+
     /**
      * Main constructor
      * @param parent node
@@ -40,7 +42,7 @@
      * @see org.apache.fop.fo.FONode#getLocalName()
      */
     public String getLocalName() {
-        return "ps-comment-after";
+        return ELEMENT;
     }
 
     /**

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentBeforeElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentBeforeElement.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentBeforeElement.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentBeforeElement.java Thu Nov  8 13:27:19 2007
@@ -27,6 +27,8 @@
  */
 public class PSCommentBeforeElement extends AbstractPSCommentElement {
 
+    protected static final String ELEMENT = "ps-comment-before";
+
     /**
      * Main constructor
      * @param parent parent node
@@ -40,7 +42,7 @@
      * @see org.apache.fop.fo.FONode#getLocalName()
      */
     public String getLocalName() {
-        return "ps-comment-before";
+        return ELEMENT;
     }
 
     /**

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSExtensionElementMapping.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSExtensionElementMapping.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSExtensionElementMapping.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSExtensionElementMapping.java Thu Nov  8 13:27:19 2007
@@ -39,11 +39,11 @@
     protected void initialize() {
         if (foObjs == null) {
             foObjs = new java.util.HashMap();
-            foObjs.put("ps-setup-code", new PSSetupCodeMaker());
-            foObjs.put("ps-page-setup-code", new PSPageSetupCodeMaker());
-            foObjs.put("ps-setpagedevice", new PSSetPageDeviceMaker());
-            foObjs.put("ps-comment-before", new PSCommentBeforeMaker());
-            foObjs.put("ps-comment-after", new PSCommentAfterMaker());
+            foObjs.put(PSSetupCodeElement.ELEMENT, new PSSetupCodeMaker());
+            foObjs.put(PSPageSetupCodeElement.ELEMENT, new PSPageSetupCodeMaker());
+            foObjs.put(PSSetPageDeviceElement.ELEMENT, new PSSetPageDeviceMaker());
+            foObjs.put(PSCommentBeforeElement.ELEMENT, new PSCommentBeforeMaker());
+            foObjs.put(PSCommentAfterElement.ELEMENT, new PSCommentAfterMaker());
         }
     }
 

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSPageSetupCodeElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSPageSetupCodeElement.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSPageSetupCodeElement.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSPageSetupCodeElement.java Thu Nov  8 13:27:19 2007
@@ -29,6 +29,8 @@
  */
 public class PSPageSetupCodeElement extends AbstractPSExtensionObject {
 
+    protected static final String ELEMENT = "ps-page-setup-code";
+    
     /**
      * Main constructor
      * @param parent parent FO node
@@ -47,7 +49,7 @@
     
     /** {@inheritDoc} */
     public String getLocalName() {
-        return "ps-page-setup-code";
+        return ELEMENT;
     }
 
 }

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetPageDeviceElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetPageDeviceElement.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetPageDeviceElement.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetPageDeviceElement.java Thu Nov  8 13:27:19 2007
@@ -33,6 +33,8 @@
  */
 public class PSSetPageDeviceElement extends AbstractPSExtensionElement {
 
+    protected static final String ELEMENT = "ps-setpagedevice";
+
     /**
      * Main constructor
      * @param parent parent FO node
@@ -79,7 +81,7 @@
      * @return local name 
      * @see org.apache.fop.fo.FONode#getLocalName() */
     public String getLocalName() {
-        return "ps-setpagedevice";
+        return ELEMENT;
     }
 
     /**

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetupCodeElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetupCodeElement.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetupCodeElement.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetupCodeElement.java Thu Nov  8 13:27:19 2007
@@ -29,6 +29,8 @@
  */
 public class PSSetupCodeElement extends AbstractPSExtensionObject {
 
+    protected static final String ELEMENT = "ps-setup-code";
+    
     /**
      * Main constructor
      * @param parent parent FO node
@@ -47,7 +49,7 @@
     
     /** {@inheritDoc} */
     public String getLocalName() {
-        return "ps-setup-code";
+        return ELEMENT;
     }
     
 }

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/RTFHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/RTFHandler.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/RTFHandler.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/RTFHandler.java Thu Nov  8 13:27:19 2007
@@ -65,12 +65,12 @@
 import org.apache.fop.fo.flow.ListItemBody;
 import org.apache.fop.fo.flow.ListItemLabel;
 import org.apache.fop.fo.flow.PageNumber;
-import org.apache.fop.fo.flow.Table;
-import org.apache.fop.fo.flow.TableBody;
-import org.apache.fop.fo.flow.TableCell;
-import org.apache.fop.fo.flow.TableColumn;
-import org.apache.fop.fo.flow.TableHeader;
-import org.apache.fop.fo.flow.TableRow;
+import org.apache.fop.fo.flow.table.Table;
+import org.apache.fop.fo.flow.table.TableBody;
+import org.apache.fop.fo.flow.table.TableCell;
+import org.apache.fop.fo.flow.table.TableColumn;
+import org.apache.fop.fo.flow.table.TableHeader;
+import org.apache.fop.fo.flow.table.TableRow;
 import org.apache.fop.fo.pagination.Flow;
 import org.apache.fop.fo.pagination.PageSequence;
 import org.apache.fop.fo.pagination.PageSequenceMaster;

Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/TableAttributesConverter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/TableAttributesConverter.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/TableAttributesConverter.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/TableAttributesConverter.java Thu Nov  8 13:27:19 2007
@@ -23,11 +23,11 @@
 
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.Constants;
-import org.apache.fop.fo.flow.Table;
-import org.apache.fop.fo.flow.TableBody;
-import org.apache.fop.fo.flow.TableCell;
-import org.apache.fop.fo.flow.TableHeader;
-import org.apache.fop.fo.flow.TableRow;
+import org.apache.fop.fo.flow.table.Table;
+import org.apache.fop.fo.flow.table.TableBody;
+import org.apache.fop.fo.flow.table.TableCell;
+import org.apache.fop.fo.flow.table.TableHeader;
+import org.apache.fop.fo.flow.table.TableRow;
 import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
 import org.apache.fop.render.rtf.rtflib.rtfdoc.ITableAttributes;
 import org.apache.fop.render.rtf.rtflib.rtfdoc.RtfAttributes;



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org