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 vh...@apache.org on 2012/04/05 18:20:17 UTC

svn commit: r1309921 [8/42] - in /xmlgraphics/fop/branches/Temp_TrueTypeInPostScript: ./ examples/embedding/ examples/embedding/java/embedding/ examples/embedding/java/embedding/atxml/ examples/embedding/java/embedding/tools/ examples/plan/src/org/apac...

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsData.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsData.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsData.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsData.java Thu Apr  5 16:19:19 2012
@@ -32,11 +32,14 @@ import org.apache.fop.afp.util.StringUti
 public final class GraphicsData extends AbstractGraphicsDrawingOrderContainer {
 
     /** the maximum graphics data length */
-    public static final int MAX_DATA_LEN = 8192;
+    public static final int MAX_DATA_LEN = GraphicsChainedSegment.MAX_DATA_LEN + 16;
+    //+16 to avoid unnecessary, practically empty GraphicsData instances.
 
     /** the graphics segment */
     private GraphicsChainedSegment currentSegment = null;
 
+    private boolean segmentedData;
+
     /**
      * Main constructor
      */
@@ -44,11 +47,21 @@ public final class GraphicsData extends 
     }
 
     /** {@inheritDoc} */
+    @Override
     public int getDataLength() {
         return 8 + super.getDataLength();
     }
 
     /**
+     * Sets the indicator that this instance is a part of a series of segmented data chunks.
+     * This indirectly sets the SegFlag on the SFI header.
+     * @param segmented true if this data object is not the last of the series
+     */
+    public void setSegmentedData(boolean segmented) {
+        this.segmentedData = segmented;
+    }
+
+    /**
      * Returns a new segment name
      *
      * @return a new segment name
@@ -60,28 +73,40 @@ public final class GraphicsData extends 
     }
 
     /**
-     * Creates a new graphics segment
+     * Creates a new graphics segment.
      *
      * @return a newly created graphics segment
      */
     public GraphicsChainedSegment newSegment() {
+        return newSegment(false, false);
+    }
+
+    /**
+     * Creates a new graphics segment.
+     * @param appended true if this segment is appended to the previous one
+     * @param prologPresent true if started with a prolog
+     * @return a newly created graphics segment
+     */
+    public GraphicsChainedSegment newSegment(boolean appended, boolean prologPresent) {
         String segmentName = createSegmentName();
         if (currentSegment == null) {
             currentSegment = new GraphicsChainedSegment(segmentName);
         } else {
             currentSegment.setComplete(true);
-            currentSegment = new GraphicsChainedSegment(segmentName, currentSegment.getNameBytes());
+            currentSegment = new GraphicsChainedSegment(segmentName,
+                    currentSegment.getNameBytes(), appended, prologPresent);
         }
         super.addObject(currentSegment);
         return currentSegment;
     }
 
     /** {@inheritDoc} */
+    @Override
     public void addObject(StructuredData object) {
         if (currentSegment == null
                 || (currentSegment.getDataLength() + object.getDataLength())
                 >= GraphicsChainedSegment.MAX_DATA_LEN) {
-            newSegment();
+            newSegment(true, false);
         }
         currentSegment.addObject(object);
     }
@@ -97,6 +122,7 @@ public final class GraphicsData extends 
     }
 
     /** {@inheritDoc} */
+    @Override
     public void writeToStream(OutputStream os) throws IOException {
         byte[] data = new byte[9];
         copySF(data, SF_CLASS, Type.DATA, Category.GRAPHICS);
@@ -104,14 +130,18 @@ public final class GraphicsData extends 
         byte[] len = BinaryUtils.convert(dataLength, 2);
         data[1] = len[0]; // Length byte 1
         data[2] = len[1]; // Length byte 2
+        if (this.segmentedData) {
+            data[6] |= 32; //Data is segmented
+        }
         os.write(data);
 
         writeObjects(objects, os);
     }
 
     /** {@inheritDoc} */
+    @Override
     public String toString() {
-        return "GraphicsData";
+        return "GraphicsData(len: " + getDataLength() + ")";
     }
 
     /**
@@ -123,4 +153,4 @@ public final class GraphicsData extends 
         currentSegment = segment;
         super.addObject(currentSegment);
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsFillet.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsFillet.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsFillet.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsFillet.java Thu Apr  5 16:19:19 2012
@@ -44,4 +44,4 @@ public final class GraphicsFillet extend
         }
     }
 
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsFullArc.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsFullArc.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsFullArc.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsFullArc.java Thu Apr  5 16:19:19 2012
@@ -82,4 +82,4 @@ public class GraphicsFullArc extends Abs
          + "}";
     }
 
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsLine.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsLine.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsLine.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsLine.java Thu Apr  5 16:19:19 2012
@@ -53,4 +53,4 @@ public class GraphicsLine extends Abstra
         byte[] data = getData();
         os.write(data);
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetArcParameters.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetArcParameters.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetArcParameters.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetArcParameters.java Thu Apr  5 16:19:19 2012
@@ -48,4 +48,4 @@ public class GraphicsSetArcParameters ex
             + ",xmin=" + coords[2]
             + ",ymaj=" + coords[3] + "}";
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetCharacterSet.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetCharacterSet.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetCharacterSet.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetCharacterSet.java Thu Apr  5 16:19:19 2012
@@ -63,4 +63,4 @@ public class GraphicsSetCharacterSet ext
         return 0x38;
     }
 
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetCurrentPosition.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetCurrentPosition.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetCurrentPosition.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetCurrentPosition.java Thu Apr  5 16:19:19 2012
@@ -37,4 +37,4 @@ public class GraphicsSetCurrentPosition 
     protected byte getOrderCode() {
         return (byte)0x21;
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetLineType.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetLineType.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetLineType.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetLineType.java Thu Apr  5 16:19:19 2012
@@ -94,4 +94,4 @@ public class GraphicsSetLineType extends
     byte getOrderCode() {
         return 0x18;
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetLineWidth.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetLineWidth.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetLineWidth.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetLineWidth.java Thu Apr  5 16:19:19 2012
@@ -62,4 +62,4 @@ public class GraphicsSetLineWidth extend
     byte getOrderCode() {
         return 0x19;
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetPatternSymbol.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetPatternSymbol.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetPatternSymbol.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetPatternSymbol.java Thu Apr  5 16:19:19 2012
@@ -114,4 +114,4 @@ public class GraphicsSetPatternSymbol ex
     byte getOrderCode() {
         return 0x28;
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetProcessColor.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetProcessColor.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetProcessColor.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/goca/GraphicsSetProcessColor.java Thu Apr  5 16:19:19 2012
@@ -21,9 +21,16 @@ package org.apache.fop.afp.goca;
 
 import java.awt.Color;
 import java.awt.color.ColorSpace;
+import java.io.DataOutput;
 import java.io.IOException;
 import java.io.OutputStream;
 
+import org.apache.commons.io.output.ByteArrayOutputStream;
+
+import org.apache.xmlgraphics.java2d.color.CIELabColorSpace;
+import org.apache.xmlgraphics.java2d.color.ColorUtil;
+import org.apache.xmlgraphics.java2d.color.ColorWithAlternatives;
+
 /**
  * Sets the current processing color for the following GOCA structured fields
  */
@@ -37,56 +44,98 @@ public class GraphicsSetProcessColor ext
      * X'08' CIELAB
      * X'40' Standard OCA color space
      */
-    private static final byte RGB = 0x01, CMYK = 0x04;
+    private static final byte RGB = 0x01;
+    private static final byte CMYK = 0x04;
+    private static final byte CIELAB = 0x08;
 
     private final Color color;
-
-    private final float[] colorComponents;
+    private final int componentsSize;
 
     /**
      * Main constructor
      *
-     * @param color
-     *            the color to set
+     * @param color the color to set
      */
     public GraphicsSetProcessColor(Color color) {
-        this.color = color;
-        this.colorComponents = color.getColorComponents(null);
+        if (color instanceof ColorWithAlternatives) {
+            ColorWithAlternatives cwa = (ColorWithAlternatives)color;
+            Color alt = cwa.getFirstAlternativeOfType(ColorSpace.TYPE_CMYK);
+            if (alt != null) {
+                this.color = alt;
+                this.componentsSize = 4;
+                return;
+            }
+        }
+        ColorSpace cs = color.getColorSpace();
+        int colSpaceType = cs.getType();
+        if (colSpaceType == ColorSpace.TYPE_CMYK) {
+            this.color = color;
+        } else if (cs instanceof CIELabColorSpace) {
+            //TODO Convert between illuminants if not D50 according to rendering intents
+            //Right now, we're assuming D50 as the GOCA spec requires.
+            this.color = color;
+            //16bit components didn't work, and 8-bit sadly has reduced accuracy.
+        } else {
+            if (!color.getColorSpace().isCS_sRGB()) {
+                this.color = ColorUtil.toSRGBColor(color);
+            } else {
+                this.color = color;
+            }
+        }
+        this.componentsSize = this.color.getColorSpace().getNumComponents();
     }
 
     /** {@inheritDoc} */
     public int getDataLength() {
-        return 12 + colorComponents.length;
+        return 12 + this.componentsSize;
     }
 
     /** {@inheritDoc} */
+    @Override
     byte getOrderCode() {
         return (byte) 0xB2;
     }
 
     /** {@inheritDoc} */
     public void writeToStream(OutputStream os) throws IOException {
+        float[] colorComponents = color.getColorComponents(null);
 
         // COLSPCE
         byte colspace;
-        int colSpaceType = color.getColorSpace().getType();
+        ColorSpace cs = color.getColorSpace();
+        int colSpaceType = cs.getType();
+        ByteArrayOutputStream baout = new ByteArrayOutputStream();
+        byte[] colsizes;
         if (colSpaceType == ColorSpace.TYPE_CMYK) {
             colspace = CMYK;
+            colsizes = new byte[] {0x08, 0x08, 0x08, 0x08};
+            for (int i = 0; i < colorComponents.length; i++) {
+                baout.write(Math.round(colorComponents[i] * 255));
+            }
         } else if (colSpaceType == ColorSpace.TYPE_RGB) {
             colspace = RGB;
+            colsizes = new byte[] {0x08, 0x08, 0x08, 0x00};
+            for (int i = 0; i < colorComponents.length; i++) {
+                baout.write(Math.round(colorComponents[i] * 255));
+            }
+        } else if (cs instanceof CIELabColorSpace) {
+            colspace = CIELAB;
+            colsizes = new byte[] {0x08, 0x08, 0x08, 0x00};
+            DataOutput dout = new java.io.DataOutputStream(baout);
+            //According to GOCA, I'd expect the multiplicator below to be 255f, not 100f
+            //But only IBM AFP Workbench seems to support Lab colors and it requires "c * 100f"
+            int l = Math.round(colorComponents[0] * 100f);
+            int a = Math.round(colorComponents[1] * 255f) - 128;
+            int b = Math.round(colorComponents[2] * 255f) - 128;
+            dout.writeByte(l);
+            dout.writeByte(a);
+            dout.writeByte(b);
         } else {
-            LOG.error("unsupported colorspace " + colSpaceType);
-            colspace = RGB;
-        }
-
-        // COLSIZE(S)
-        byte[] colsizes = new byte[] {0x00, 0x00, 0x00, 0x00};
-        for (int i = 0; i < colorComponents.length; i++) {
-            colsizes[i] = (byte) 8;
+            throw new IllegalStateException();
         }
 
         int len = getDataLength();
-        byte[] data = new byte[len];
+        byte[] data = new byte[12];
         data[0] = getOrderCode(); // GSPCOL order code
         data[1] = (byte) (len - 2); // LEN
         data[2] = 0x00; // reserved; must be zero
@@ -100,16 +149,13 @@ public class GraphicsSetProcessColor ext
         data[10] = colsizes[2];
         data[11] = colsizes[3];
 
-        // COLVALUE(S)
-        for (int i = 0; i < colorComponents.length; i++) {
-            data[i + 12] = (byte) (colorComponents[i] * 255);
-        }
-
         os.write(data);
+        baout.writeTo(os);
     }
 
     /** {@inheritDoc} */
+    @Override
     public String toString() {
         return "GraphicsSetProcessColor(col=" + color + ")";
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/IDEStructureParameter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/IDEStructureParameter.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/IDEStructureParameter.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/IDEStructureParameter.java Thu Apr  5 16:19:19 2012
@@ -46,7 +46,7 @@ public class IDEStructureParameter imple
     private boolean grayCoding = false;
 
     /** the image color model */
-    private byte colorModel = COLOR_MODEL_YCRCB;
+    private byte colorModel = COLOR_MODEL_RGB;
 
     /** the array with the number of bits/IDE for each component */
     private byte[] bitsPerIDE = new byte[] {(byte)1}; //1-bit by default

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageCellPosition.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageCellPosition.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageCellPosition.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageCellPosition.java Thu Apr  5 16:19:19 2012
@@ -160,4 +160,4 @@ public class ImageCellPosition extends A
         this.yFillSize[0] = x[0];
         this.yFillSize[1] = x[1];
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageContent.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageContent.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageContent.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageContent.java Thu Apr  5 16:19:19 2012
@@ -53,6 +53,9 @@ public class ImageContent extends Abstra
      */
     public static final byte COMPID_G3_MMR = (byte)0x82;
 
+    /** JPEG algorithms (usually baseline DCT). */
+    public static final byte COMPID_JPEG = (byte)0x83;
+
     /** the image size parameter */
     private ImageSizeParameter imageSizeParameter = null;
 
@@ -66,7 +69,7 @@ public class ImageContent extends Abstra
     private byte ideSize = 1;
 
     /** the image compression */
-    private byte compression = (byte)0xC0;
+    private byte compression = (byte)0xC0; //Baseline DCT in case of JPEG compression
 
     /** the image data */
     private byte[] data;
@@ -147,6 +150,7 @@ public class ImageContent extends Abstra
      * @param color    the IDE color model.
      * @deprecated use {@link #setIDEStructureParameter(IDEStructureParameter)} instead
      */
+    @Deprecated
     public void setImageIDEColorModel(byte color) {
         needIDEStructureParameter().setColorModel(color);
     }
@@ -156,6 +160,7 @@ public class ImageContent extends Abstra
      * @param subtractive true for subtractive mode, false for additive mode
      * @deprecated use {@link #setIDEStructureParameter(IDEStructureParameter)} instead
      */
+    @Deprecated
     public void setSubtractive(boolean subtractive) {
         needIDEStructureParameter().setSubtractive(subtractive);
     }
@@ -172,6 +177,7 @@ public class ImageContent extends Abstra
     private static final int MAX_DATA_LEN = 65535;
 
     /** {@inheritDoc} */
+    @Override
     protected void writeContent(OutputStream os) throws IOException {
         if (imageSizeParameter != null) {
             imageSizeParameter.writeToStream(os);
@@ -206,6 +212,7 @@ public class ImageContent extends Abstra
     }
 
     /** {@inheritDoc} */
+    @Override
     protected void writeStart(OutputStream os) throws IOException {
         final byte[] startData = new byte[] {
             (byte)0x91, // ID
@@ -216,6 +223,7 @@ public class ImageContent extends Abstra
     }
 
     /** {@inheritDoc} */
+    @Override
     protected void writeEnd(OutputStream os) throws IOException {
         final byte[] endData = new byte[] {
             (byte)0x93, // ID
@@ -234,7 +242,7 @@ public class ImageContent extends Abstra
             (byte)0x95, // ID
             0x02, // Length
             encoding,
-            0x01, // RECID
+            (byte)(encoding == COMPID_JPEG ? 0xFE : 0x01), // RECID
         };
         return encodingData;
     }
@@ -245,17 +253,17 @@ public class ImageContent extends Abstra
      * @return byte[] The data stream.
      */
     private byte[] getExternalAlgorithmParameter() {
-        if (encoding == (byte)0x83 && compression != 0) {
+        if (encoding == COMPID_JPEG && compression != 0) {
             final byte[] extAlgData = new byte[] {
-                (byte)0x95, // ID
+                (byte)0x9F, // ID
                       0x00, // Length
                       0x10, // ALGTYPE = Compression Algorithm
                       0x00, // Reserved
-                (byte)0x83, // COMPRID = JPEG
+               COMPID_JPEG, // COMPRID = JPEG
                       0x00, // Reserved
                       0x00, // Reserved
                       0x00, // Reserved
-              compression, // MARKER
+               compression, // MARKER
                       0x00, // Reserved
                       0x00, // Reserved
                       0x00, // Reserved

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageInputDescriptor.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageInputDescriptor.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageInputDescriptor.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageInputDescriptor.java Thu Apr  5 16:19:19 2012
@@ -132,4 +132,4 @@ public class ImageInputDescriptor extend
         this.resolution = resolution;
     }
 
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageOutputControl.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageOutputControl.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageOutputControl.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageOutputControl.java Thu Apr  5 16:19:19 2012
@@ -193,4 +193,4 @@ public class ImageOutputControl extends 
     public void setSinglepoint(boolean singlepoint) {
         singlePoint = singlepoint;
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageRasterData.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageRasterData.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageRasterData.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/ioca/ImageRasterData.java Thu Apr  5 16:19:19 2012
@@ -71,4 +71,4 @@ public class ImageRasterData extends Abs
 
         os.write(rasterData);
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractAFPObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractAFPObject.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractAFPObject.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractAFPObject.java Thu Apr  5 16:19:19 2012
@@ -20,7 +20,6 @@
 package org.apache.fop.afp.modca;
 
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Collection;
 import java.util.Iterator;
@@ -39,13 +38,12 @@ import org.apache.fop.afp.util.BinaryUti
 public abstract class AbstractAFPObject implements Streamable {
 
     /** Static logging instance */
-    protected static final Log LOG = LogFactory.getLog("org.apache.xmlgraphics.afp.modca");
+    protected static final Log LOG = LogFactory.getLog(AbstractAFPObject.class);
 
     /** the structured field class id */
     protected static final byte SF_CLASS = (byte)0xD3;
 
-    /** the structure field header */
-    static final byte[] SF_HEADER = new byte[] {
+    private static final byte[] SF_HEADER = new byte[] {
         0x5A, // Structured field identifier
         0x00, // Length byte 1
         0x10, // Length byte 2
@@ -57,6 +55,9 @@ public abstract class AbstractAFPObject 
         0x00, // Reserved
     };
 
+    /** Length of bytes of a Structured Field Header */
+    protected static final int SF_HEADER_LENGTH = SF_HEADER.length;
+
     /**
      * Copies the template structured field data array to the given byte array
      *
@@ -77,7 +78,7 @@ public abstract class AbstractAFPObject 
      * @param category the category code
      */
     protected static void copySF(byte[] data, byte clazz, byte type, byte category) {
-        System.arraycopy(SF_HEADER, 0, data, 0, SF_HEADER.length);
+        System.arraycopy(SF_HEADER, 0, data, 0, SF_HEADER_LENGTH);
         data[3] = clazz;
         data[4] = type;
         data[5] = category;
@@ -87,54 +88,23 @@ public abstract class AbstractAFPObject 
      * Writes a collection of Streamable to the AFP Datastream.
      *
      * @param objects a list of AFPObjects
+     * @param <S> Streamable view of an AFPObject
      * @param os The stream to write to
      * @throws java.io.IOException an I/O exception of some sort has occurred.
      */
-    protected void writeObjects(Collection/*<Streamable>*/ objects, OutputStream os)
-        throws IOException {
-        if (objects != null && objects.size() > 0) {
-            Iterator it = objects.iterator();
+    protected <S extends Streamable> void writeObjects(Collection<S> objects, OutputStream os)
+            throws IOException {
+        if (objects != null) {
+            Iterator<S> it = objects.iterator();
             while (it.hasNext()) {
-                Object object = it.next();
-                if (object instanceof Streamable) {
-                    ((Streamable)object).writeToStream(os);
-                    it.remove(); // once written, immediately remove the object
-                }
+                Streamable s = it.next();
+                s.writeToStream(os);
+                it.remove(); // once written, immediately remove the object
             }
         }
     }
 
     /**
-     * Reads data chunks from an InputStream
-     * and then formats them with a structured header to a given OutputStream
-     *
-     * @param dataHeader the header data
-     * @param lengthOffset offset of length field in data chunk
-     * @param maxChunkLength the maximum chunk length
-     * @param inputStream the InputStream to read from
-     * @param outputStream the OutputStream to write to
-     * @throws IOException thrown if an I/O exception of some sort has occurred.
-     */
-    protected static void copyChunks(byte[] dataHeader, int lengthOffset,
-            int maxChunkLength, InputStream inputStream, OutputStream outputStream)
-    throws IOException {
-        int headerLen = dataHeader.length - lengthOffset;
-        // length field is just before data so do not include in data length
-        if (headerLen == 2) {
-            headerLen = 0;
-        }
-        byte[] data = new byte[maxChunkLength];
-        int numBytesRead = 0;
-        while ((numBytesRead = inputStream.read(data, 0, maxChunkLength)) > 0) {
-            byte[] len = BinaryUtils.convert(headerLen + numBytesRead, 2);
-            dataHeader[lengthOffset] = len[0]; // Length byte 1
-            dataHeader[lengthOffset + 1] = len[1]; // Length byte 2
-            outputStream.write(dataHeader);
-            outputStream.write(data, 0, numBytesRead);
-        }
-    }
-
-    /**
      * Writes data chunks to a given outputstream
      *
      * @param data the data byte array
@@ -186,7 +156,7 @@ public abstract class AbstractAFPObject 
      * @param maxLength the maximum length allowed for the string
      * @return a possibly truncated string
      */
-    protected String truncate(String str, int maxLength) {
+    protected static String truncate(String str, int maxLength) {
         if (str.length() > maxLength) {
             str = str.substring(0, maxLength);
             LOG.warn("truncated character string '"

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractDataObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractDataObject.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractDataObject.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractDataObject.java Thu Apr  5 16:19:19 2012
@@ -74,8 +74,8 @@ public abstract class AbstractDataObject
         int height = objectAreaInfo.getHeight();
         int widthRes = objectAreaInfo.getWidthRes();
         int heightRes = objectAreaInfo.getHeightRes();
-        ObjectAreaDescriptor objectAreaDescriptor
-            = factory.createObjectAreaDescriptor(width, height, widthRes, heightRes);
+        ObjectAreaDescriptor objectAreaDescriptor = factory.createObjectAreaDescriptor(width,
+                height, widthRes, heightRes);
         getObjectEnvironmentGroup().setObjectAreaDescriptor(objectAreaDescriptor);
 
         // object area position

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractNamedAFPObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractNamedAFPObject.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractNamedAFPObject.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractNamedAFPObject.java Thu Apr  5 16:19:19 2012
@@ -90,7 +90,7 @@ public abstract class AbstractNamedAFPOb
         return nameBytes;
     }
 
-    /** {@inheritDoc} */
+    @Override
     protected void copySF(byte[] data, byte type, byte category) {
         super.copySF(data, type, category);
         byte[] nameData = getNameBytes();

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractPageObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractPageObject.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractPageObject.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractPageObject.java Thu Apr  5 16:19:19 2012
@@ -27,8 +27,8 @@ import java.util.List;
 import org.apache.fop.afp.AFPLineDataInfo;
 import org.apache.fop.afp.Completable;
 import org.apache.fop.afp.Factory;
-import org.apache.fop.afp.ptoca.PtocaProducer;
 import org.apache.fop.afp.fonts.AFPFont;
+import org.apache.fop.afp.ptoca.PtocaProducer;
 
 /**
  * Pages contain the data objects that comprise a presentation document. Each
@@ -57,11 +57,8 @@ public abstract class AbstractPageObject
     /** The current presentation text object */
     private PresentationTextObject currentPresentationTextObject = null;
 
-    /** The list of tag logical elements */
-    protected List/*<TagLogicalElement>*/ tagLogicalElements = null;
-
     /** The list of objects within this resource container */
-    protected List/*<AbstractStructuredAFPObject>*/ objects = new java.util.ArrayList();
+    protected List/*<AbstractStructuredObject>*/ objects = new java.util.ArrayList();
 
     /** The page width */
     private int width;
@@ -217,10 +214,10 @@ public abstract class AbstractPageObject
      * @return the TLEs
      */
     protected List getTagLogicalElements() {
-        if (tagLogicalElements == null) {
-            this.tagLogicalElements = new java.util.ArrayList/*<TagLogicalElement>*/();
+        if (objects == null) {
+            this.objects = new java.util.ArrayList/*<AbstractStructuredObject>*/();
         }
-        return this.tagLogicalElements;
+        return this.objects;
     }
 
     /**

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractResourceGroupContainer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractResourceGroupContainer.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractResourceGroupContainer.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractResourceGroupContainer.java Thu Apr  5 16:19:19 2012
@@ -126,6 +126,7 @@ implements Streamable {
 //    }
 
     /** {@inheritDoc} */
+    @Override
     public void writeToStream(OutputStream os) throws IOException {
         if (!started) {
             writeStart(os);
@@ -140,6 +141,7 @@ implements Streamable {
     }
 
     /** {@inheritDoc} */
+    @Override
     protected void writeObjects(Collection/*<AbstractAFPObject>*/ objects, OutputStream os)
             throws IOException {
         writeObjects(objects, os, false);
@@ -176,10 +178,9 @@ implements Streamable {
      * @return true if this object can be written
      */
     protected boolean canWrite(AbstractAFPObject obj) {
-        if (obj instanceof AbstractPageObject) {
+        if (obj instanceof Completable) {
             return ((Completable)obj).isComplete();
-        }
-        else {
+        } else {
             return this.isComplete();
         }
     }

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractTripletStructuredObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractTripletStructuredObject.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractTripletStructuredObject.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/AbstractTripletStructuredObject.java Thu Apr  5 16:19:19 2012
@@ -22,7 +22,6 @@ package org.apache.fop.afp.modca;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.List;
 
 import org.apache.fop.afp.modca.Registry.ObjectType;
@@ -35,10 +34,10 @@ import org.apache.fop.afp.modca.triplets
 /**
  * A MODCA structured object base class providing support for Triplets
  */
-public class AbstractTripletStructuredObject extends AbstractStructuredObject {
+public abstract class AbstractTripletStructuredObject extends AbstractStructuredObject {
 
     /** list of object triplets */
-    protected List/*<Triplet>*/ triplets = new java.util.ArrayList/*<Triplet>*/();
+    protected List<AbstractTriplet> triplets = new java.util.ArrayList<AbstractTriplet>();
 
     /**
      * Returns the triplet data length
@@ -47,12 +46,8 @@ public class AbstractTripletStructuredOb
      */
     protected int getTripletDataLength() {
         int dataLength = 0;
-        if (hasTriplets()) {
-            Iterator it = triplets.iterator();
-            while (it.hasNext()) {
-                AbstractTriplet triplet = (AbstractTriplet)it.next();
-                dataLength += triplet.getDataLength();
-            }
+        for (Triplet triplet : triplets) {
+            dataLength += triplet.getDataLength();
         }
         return dataLength;
     }
@@ -85,11 +80,9 @@ public class AbstractTripletStructuredOb
      * @param tripletId the triplet identifier
      */
     private AbstractTriplet getTriplet(byte tripletId) {
-        Iterator it = getTriplets().iterator();
-        while (it.hasNext()) {
-            AbstractTriplet triplet = (AbstractTriplet)it.next();
-            if (triplet.getId() == tripletId) {
-                return triplet;
+        for (AbstractTriplet trip : triplets) {
+            if (trip.getId() == tripletId) {
+                return trip;
             }
         }
         return null;
@@ -110,7 +103,7 @@ public class AbstractTripletStructuredOb
      *
      * @param triplet the triplet to add
      */
-    protected void addTriplet(Triplet triplet) {
+    protected void addTriplet(AbstractTriplet triplet) {
         triplets.add(triplet);
     }
 
@@ -119,14 +112,14 @@ public class AbstractTripletStructuredOb
      *
      * @param tripletCollection a collection of triplets
      */
-    public void addTriplets(Collection/*<Triplet>*/ tripletCollection) {
+    public void addTriplets(Collection<AbstractTriplet> tripletCollection) {
         if (tripletCollection != null) {
             triplets.addAll(tripletCollection);
         }
     }
 
     /** @return the triplet list pertaining to this resource */
-    protected List/*<Triplet>*/ getTriplets() {
+    protected List<AbstractTriplet> getTriplets() {
         return triplets;
     }
 

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ActiveEnvironmentGroup.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ActiveEnvironmentGroup.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ActiveEnvironmentGroup.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ActiveEnvironmentGroup.java Thu Apr  5 16:19:19 2012
@@ -234,4 +234,4 @@ public final class ActiveEnvironmentGrou
         return seg;
     }
 
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/Document.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/Document.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/Document.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/Document.java Thu Apr  5 16:19:19 2012
@@ -93,4 +93,4 @@ public final class Document extends Abst
         return this.name;
     }
 
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/GraphicsObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/GraphicsObject.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/GraphicsObject.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/GraphicsObject.java Thu Apr  5 16:19:19 2012
@@ -26,18 +26,21 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.xmlgraphics.java2d.color.ColorConverter;
+import org.apache.xmlgraphics.java2d.color.ColorUtil;
 
 import org.apache.fop.afp.AFPDataObjectInfo;
 import org.apache.fop.afp.AFPObjectAreaInfo;
 import org.apache.fop.afp.Completable;
 import org.apache.fop.afp.Factory;
 import org.apache.fop.afp.StructuredData;
+import org.apache.fop.afp.fonts.CharacterSet;
 import org.apache.fop.afp.goca.GraphicsAreaBegin;
 import org.apache.fop.afp.goca.GraphicsAreaEnd;
 import org.apache.fop.afp.goca.GraphicsBox;
 import org.apache.fop.afp.goca.GraphicsChainedSegment;
 import org.apache.fop.afp.goca.GraphicsCharacterString;
 import org.apache.fop.afp.goca.GraphicsData;
+import org.apache.fop.afp.goca.GraphicsEndProlog;
 import org.apache.fop.afp.goca.GraphicsFillet;
 import org.apache.fop.afp.goca.GraphicsFullArc;
 import org.apache.fop.afp.goca.GraphicsImage;
@@ -61,8 +64,8 @@ public class GraphicsObject extends Abst
     private GraphicsData currentData = null;
 
     /** list of objects contained within this container */
-    protected List/*<GraphicsData>*/ objects
-        = new java.util.ArrayList/*<GraphicsData>*/();
+    protected List<GraphicsData> objects
+        = new java.util.ArrayList<GraphicsData>();
 
     /** the graphics state */
     private final GraphicsState graphicsState = new GraphicsState();
@@ -82,6 +85,7 @@ public class GraphicsObject extends Abst
     }
 
     /** {@inheritDoc} */
+    @Override
     public void setViewport(AFPDataObjectInfo dataObjectInfo) {
         super.setViewport(dataObjectInfo);
 
@@ -93,7 +97,7 @@ public class GraphicsObject extends Abst
         final int leftEdge = 0;
         final int topEdge = 0;
         GraphicsDataDescriptor graphicsDataDescriptor = factory.createGraphicsDataDescriptor(
-                    leftEdge, width, topEdge, height, widthRes, heightRes);
+                leftEdge, width, topEdge, height, widthRes, heightRes);
 
         getObjectEnvironmentGroup().setDataDescriptor(graphicsDataDescriptor);
     }
@@ -145,7 +149,7 @@ public class GraphicsObject extends Abst
      * @param color the active color to use
      */
     public void setColor(Color color) {
-        if (!color.equals(graphicsState.color)) {
+        if (!ColorUtil.isSameColor(color, graphicsState.color)) {
             addObject(new GraphicsSetProcessColor(colorConverter.convert(color)));
             graphicsState.color = color;
         }
@@ -226,9 +230,9 @@ public class GraphicsObject extends Abst
      */
     public void setCharacterSet(int characterSet) {
         if (characterSet != graphicsState.characterSet) {
-            addObject(new GraphicsSetCharacterSet(characterSet));
             graphicsState.characterSet = characterSet;
         }
+        addObject(new GraphicsSetCharacterSet(characterSet));
     }
 
     /**
@@ -321,9 +325,10 @@ public class GraphicsObject extends Abst
      * @param str the string
      * @param x the x coordinate
      * @param y the y coordinate
+     * @param charSet the character set associated with the string
      */
-    public void addString(String str, int x, int y) {
-        addObject(new GraphicsCharacterString(str, x, y));
+    public void addString(String str, int x, int y, CharacterSet charSet) {
+        addObject(new GraphicsCharacterString(str, x, y, charSet));
     }
 
     /**
@@ -340,7 +345,15 @@ public class GraphicsObject extends Abst
         addObject(new GraphicsAreaEnd());
     }
 
+    /**
+     * Ends the prolog.
+     */
+    public void endProlog() {
+        addObject(new GraphicsEndProlog());
+    }
+
     /** {@inheritDoc} */
+    @Override
     public String toString() {
         return "GraphicsObject: " + getName();
     }
@@ -354,16 +367,18 @@ public class GraphicsObject extends Abst
     }
 
     /** {@inheritDoc} */
+    @Override
     public void setComplete(boolean complete) {
-        Iterator it = objects.iterator();
+        Iterator<GraphicsData> it = objects.iterator();
         while (it.hasNext()) {
-            Completable completedObject = (Completable)it.next();
+            Completable completedObject = it.next();
             completedObject.setComplete(true);
         }
         super.setComplete(complete);
     }
 
     /** {@inheritDoc} */
+    @Override
     protected void writeStart(OutputStream os) throws IOException {
         super.writeStart(os);
         byte[] data = new byte[17];
@@ -372,12 +387,14 @@ public class GraphicsObject extends Abst
     }
 
     /** {@inheritDoc} */
+    @Override
     protected void writeContent(OutputStream os) throws IOException {
         super.writeContent(os);
         writeObjects(objects, os);
     }
 
     /** {@inheritDoc} */
+    @Override
     protected void writeEnd(OutputStream os) throws IOException {
         byte[] data = new byte[17];
         copySF(data, Type.END, Category.GRAPHICS);
@@ -405,4 +422,4 @@ public class GraphicsObject extends Abst
         /** the current character set */
         private int characterSet;
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ImageObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ImageObject.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ImageObject.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ImageObject.java Thu Apr  5 16:19:19 2012
@@ -29,7 +29,6 @@ import org.apache.xmlgraphics.util.MimeC
 import org.apache.fop.afp.AFPDataObjectInfo;
 import org.apache.fop.afp.AFPImageObjectInfo;
 import org.apache.fop.afp.Factory;
-import org.apache.fop.afp.ioca.IDEStructureParameter;
 import org.apache.fop.afp.ioca.ImageSegment;
 
 /**

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/IncludeObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/IncludeObject.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/IncludeObject.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/IncludeObject.java Thu Apr  5 16:19:19 2012
@@ -57,7 +57,6 @@ public class IncludeObject extends Abstr
     /** the object referenced is of type image */
     public static final byte TYPE_IMAGE = (byte)0xFB;
 
-
     /** the object type referenced (default is other) */
     private byte objectType = TYPE_OTHER;
 
@@ -68,7 +67,7 @@ public class IncludeObject extends Abstr
     private int yoaOset = 0;
 
     /** the orientation of the referenced object */
-    private int oaOrent = 0;
+    private ObjectAreaRotation oaOrent = ObjectAreaRotation.RIGHT_HANDED_0;
 
     /** the X-axis origin defined in the object */
     private int xocaOset = -1;
@@ -94,13 +93,7 @@ public class IncludeObject extends Abstr
      *            The orientation (0,90, 180, 270)
      */
     public void setObjectAreaOrientation(int orientation) {
-        if (orientation == 0 || orientation == 90 || orientation == 180
-            || orientation == 270) {
-            this.oaOrent = orientation;
-        } else {
-            throw new IllegalArgumentException(
-                "The orientation must be one of the values 0, 90, 180, 270");
-        }
+        this.oaOrent = ObjectAreaRotation.objectAreaRotationFor(orientation);
     }
 
     /**
@@ -151,87 +144,16 @@ public class IncludeObject extends Abstr
         data[17] = 0x00; // reserved
         data[18] = objectType;
 
-        //XoaOset (object area)
-        if (xoaOset > -1) {
-            byte[] x = BinaryUtils.convert(xoaOset, 3);
-            data[19] = x[0];
-            data[20] = x[1];
-            data[21] = x[2];
-        } else {
-            data[19] = (byte)0xFF;
-            data[20] = (byte)0xFF;
-            data[21] = (byte)0xFF;
-        }
+        writeOsetTo(data, 19, xoaOset);
 
-        // YoaOset (object area)
-        if (yoaOset > -1) {
-            byte[] y = BinaryUtils.convert(yoaOset, 3);
-            data[22] = y[0];
-            data[23] = y[1];
-            data[24] = y[2];
-        } else {
-            data[22] = (byte)0xFF;
-            data[23] = (byte)0xFF;
-            data[24] = (byte)0xFF;
-        }
-
-        // XoaOrent/YoaOrent
-        switch (oaOrent) {
-            case -1: // use x/y axis orientation defined in object
-                data[25] = (byte)0xFF; // x axis rotation
-                data[26] = (byte)0xFF; //
-                data[27] = (byte)0xFF; // y axis rotation
-                data[28] = (byte)0xFF;
-                break;
-            case 90:
-                data[25] = 0x2D;
-                data[26] = 0x00;
-                data[27] = 0x5A;
-                data[28] = 0x00;
-                break;
-            case 180:
-                data[25] = 0x5A;
-                data[25] = 0x00;
-                data[27] = (byte)0x87;
-                data[28] = 0x00;
-                break;
-            case 270:
-                data[25] = (byte)0x87;
-                data[26] = 0x00;
-                data[27] = 0x00;
-                data[28] = 0x00;
-                break;
-            default: // 0 degrees
-                data[25] = 0x00;
-                data[26] = 0x00;
-                data[27] = 0x2D;
-                data[28] = 0x00;
-                break;
-        }
-
-        // XocaOset (object content)
-        if (xocaOset > -1) {
-            byte[] x = BinaryUtils.convert(xocaOset, 3);
-            data[29] = x[0];
-            data[30] = x[1];
-            data[31] = x[2];
-        } else {
-            data[29] = (byte)0xFF;
-            data[30] = (byte)0xFF;
-            data[31] = (byte)0xFF;
-        }
+        writeOsetTo(data, 22, yoaOset);
+
+        oaOrent.writeTo(data, 25);
+
+        writeOsetTo(data, 29, xocaOset);
+
+        writeOsetTo(data, 32, yocaOset);
 
-        // YocaOset (object content)
-        if (yocaOset > -1) {
-            byte[] y = BinaryUtils.convert(yocaOset, 3);
-            data[32] = y[0];
-            data[33] = y[1];
-            data[34] = y[2];
-        } else {
-            data[32] = (byte)0xFF;
-            data[33] = (byte)0xFF;
-            data[34] = (byte)0xFF;
-        }
         // RefCSys (Reference coordinate system)
         data[35] = 0x01; // Page or overlay coordinate system
 
@@ -242,6 +164,19 @@ public class IncludeObject extends Abstr
         writeTriplets(os);
     }
 
+    private static void writeOsetTo(byte[] out, int offset, int oset) {
+        if (oset > -1) {
+            byte[] y = BinaryUtils.convert(oset, 3);
+            out[offset] = y[0];
+            out[offset + 1] = y[1];
+            out[offset + 2] = y[2];
+        } else {
+            out[offset] = (byte)0xFF;
+            out[offset + 1] = (byte)0xFF;
+            out[offset + 2] = (byte)0xFF;
+        }
+    }
+
     private String getObjectTypeName() {
         String objectTypeName = null;
         if (objectType == TYPE_PAGE_SEGMENT) {
@@ -299,4 +234,69 @@ public class IncludeObject extends Abstr
         addTriplet(new MeasurementUnitsTriplet(xRes, xRes));
     }
 
-}
\ No newline at end of file
+    /**
+     * Represents the 4 bytes that specify the area rotation reference coordinate system
+     *
+     */
+    private enum ObjectAreaRotation {
+
+        RIGHT_HANDED_0(Rotation.ROTATION_0, Rotation.ROTATION_90),
+        RIGHT_HANDED_90(Rotation.ROTATION_90, Rotation.ROTATION_180),
+        RIGHT_HANDED_180(Rotation.ROTATION_180, Rotation.ROTATION_270),
+        RIGHT_HANDED_270(Rotation.ROTATION_270, Rotation.ROTATION_0);
+
+        /**
+         * The object area's X-axis rotation from the X axis of the reference coordinate system
+         */
+        private final Rotation xoaOrent;
+        /**
+         * The object area's Y-axis rotation from the Y axis of the reference coordinate system
+         */
+        private final Rotation yoaOrent;
+
+        public void writeTo(byte[] out, int offset) {
+            xoaOrent.writeTo(out, offset);
+            yoaOrent.writeTo(out, offset + 2);
+        }
+
+        ObjectAreaRotation(Rotation xoaOrent, Rotation yoaOrent) {
+            this.xoaOrent = xoaOrent;
+            this.yoaOrent = yoaOrent;
+        }
+
+        private static ObjectAreaRotation objectAreaRotationFor(int orientation) {
+            switch (orientation) {
+                case 0: return RIGHT_HANDED_0;
+                case 90: return RIGHT_HANDED_90;
+                case 180: return RIGHT_HANDED_180;
+                case 270: return RIGHT_HANDED_270;
+                default: throw new IllegalArgumentException(
+                "The orientation must be one of the values 0, 90, 180, 270");
+            }
+        }
+    }
+
+    /**
+     * Represents a rotation value
+     *
+     */
+    private enum Rotation {
+
+        ROTATION_0(0),
+        ROTATION_90(0x2D),
+        ROTATION_180(0x5A),
+        ROTATION_270(0x87);
+
+        private final byte firstByte;
+
+        public void writeTo(byte[] out, int offset) {
+            out[offset] = firstByte;
+            out[offset + 1] = (byte)0;
+        }
+
+        Rotation(int firstByte) {
+            this.firstByte = (byte) firstByte;
+        }
+    }
+
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/IncludePageOverlay.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/IncludePageOverlay.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/IncludePageOverlay.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/IncludePageOverlay.java Thu Apr  5 16:19:19 2012
@@ -126,4 +126,4 @@ public class IncludePageOverlay extends 
         }
         os.write(data);
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/InvokeMediumMap.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/InvokeMediumMap.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/InvokeMediumMap.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/InvokeMediumMap.java Thu Apr  5 16:19:19 2012
@@ -54,4 +54,4 @@ public class InvokeMediumMap extends Abs
 
         os.write(data);
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/MapImageObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/MapImageObject.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/MapImageObject.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/MapImageObject.java Thu Apr  5 16:19:19 2012
@@ -55,4 +55,4 @@ public class MapImageObject extends Abst
         os.write(data);
         writeTriplets(os);
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/MapPageOverlay.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/MapPageOverlay.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/MapPageOverlay.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/MapPageOverlay.java Thu Apr  5 16:19:19 2012
@@ -138,4 +138,4 @@ public class MapPageOverlay extends Abst
         }
         os.write(data);
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/MapPageSegment.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/MapPageSegment.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/MapPageSegment.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/MapPageSegment.java Thu Apr  5 16:19:19 2012
@@ -131,4 +131,4 @@ public class MapPageSegment extends Abst
         }
         os.write(data);
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/NoOperation.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/NoOperation.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/NoOperation.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/NoOperation.java Thu Apr  5 16:19:19 2012
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 
 import org.apache.fop.afp.AFPConstants;
+import org.apache.fop.afp.Completable;
 import org.apache.fop.afp.util.BinaryUtils;
 
 /**
@@ -35,7 +36,7 @@ import org.apache.fop.afp.util.BinaryUti
  * No Operation structured fields, no semantics should be attached to
  * the data carried by the No Operation structured field in interchange
  */
-public class NoOperation extends AbstractAFPObject {
+public class NoOperation extends AbstractAFPObject implements Completable {
 
     /** Up to 32759 bytes of data with no architectural definition */
     private static final int MAX_DATA_LEN = 32759;
@@ -81,7 +82,7 @@ public class NoOperation extends Abstrac
         data[1] = rl1[0];
         data[2] = rl1[1];
 
-        // Structured field ID for a TLE
+        // Structured field ID for a NOP
         data[3] = (byte) 0xD3;
         data[4] = (byte) 0xEE;
         data[5] = (byte) 0xEE;
@@ -97,4 +98,20 @@ public class NoOperation extends Abstrac
         os.write(data);
     }
 
-}
\ No newline at end of file
+    /** {@inheritDoc} */
+    public boolean isComplete() {
+        return true; //always complete
+    }
+
+    /** {@inheritDoc} */
+    public void setComplete(boolean complete) {
+        //ignore
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return "NOP: " + content.substring(0, Math.min(64, content.length()));
+    }
+
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ObjectAreaPosition.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ObjectAreaPosition.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ObjectAreaPosition.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ObjectAreaPosition.java Thu Apr  5 16:19:19 2012
@@ -139,4 +139,4 @@ public class ObjectAreaPosition extends 
             + ", xOffset=" + xOffset
             + ", yOffset=" + yOffset;
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ObjectContainer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ObjectContainer.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ObjectContainer.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/ObjectContainer.java Thu Apr  5 16:19:19 2012
@@ -107,7 +107,7 @@ public class ObjectContainer extends Abs
 
             ContainerDataDescriptor containerDataDescriptor
                 = factory.createContainerDataDescriptor(
-                        dataWidth, dataHeight, widthRes, heightRes);
+                    dataWidth, dataHeight, widthRes, heightRes);
             getObjectEnvironmentGroup().setDataDescriptor(containerDataDescriptor);
         }
     }

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/Overlay.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/Overlay.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/Overlay.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/Overlay.java Thu Apr  5 16:19:19 2012
@@ -72,7 +72,6 @@ public class Overlay extends PageObject 
 
         getActiveEnvironmentGroup().writeToStream(os);
 
-        writeObjects(tagLogicalElements, os);
         writeObjects(objects, os);
     }
 

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PageDescriptor.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PageDescriptor.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PageDescriptor.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PageDescriptor.java Thu Apr  5 16:19:19 2012
@@ -85,4 +85,4 @@ public class PageDescriptor extends Abst
         os.write(data);
     }
 
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PageGroup.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PageGroup.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PageGroup.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PageGroup.java Thu Apr  5 16:19:19 2012
@@ -76,12 +76,6 @@ public class PageGroup extends AbstractR
     }
 
     /** {@inheritDoc} */
-    protected void writeContent(OutputStream os) throws IOException {
-        writeObjects(tagLogicalElements, os, true);
-        super.writeContent(os);
-    }
-
-    /** {@inheritDoc} */
     protected void writeStart(OutputStream os) throws IOException {
         byte[] data = new byte[17];
         copySF(data, Type.BEGIN, Category.PAGE_GROUP);
@@ -104,4 +98,4 @@ public class PageGroup extends AbstractR
     public int getTleSequence() {
         return tleSequence;
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PageObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PageObject.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PageObject.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PageObject.java Thu Apr  5 16:19:19 2012
@@ -185,7 +185,6 @@ public class PageObject extends Abstract
 
         getActiveEnvironmentGroup().writeToStream(os);
 
-        writeObjects(tagLogicalElements, os);
         writeObjects(objects, os);
     }
 
@@ -215,4 +214,4 @@ public class PageObject extends Abstract
     protected boolean canWrite(AbstractAFPObject ao) {
         return true;
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PresentationTextData.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PresentationTextData.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PresentationTextData.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PresentationTextData.java Thu Apr  5 16:19:19 2012
@@ -24,7 +24,6 @@ import java.io.OutputStream;
 
 import org.apache.commons.io.output.ByteArrayOutputStream;
 
-import org.apache.fop.afp.ptoca.PtocaBuilder;
 import org.apache.fop.afp.ptoca.PtocaConstants;
 import org.apache.fop.afp.util.BinaryUtils;
 
@@ -120,4 +119,4 @@ public class PresentationTextData extend
         os.write(data);
     }
 
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PresentationTextDescriptor.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PresentationTextDescriptor.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PresentationTextDescriptor.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/PresentationTextDescriptor.java Thu Apr  5 16:19:19 2012
@@ -98,4 +98,4 @@ public class PresentationTextDescriptor 
         os.write(data);
     }
 
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/Registry.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/Registry.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/Registry.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/Registry.java Thu Apr  5 16:19:19 2012
@@ -20,6 +20,7 @@
 package org.apache.fop.afp.modca;
 
 import java.util.Collections;
+import java.util.HashMap;
 
 import org.apache.xmlgraphics.util.MimeConstants;
 
@@ -43,9 +44,8 @@ public final class Registry {
     private static final byte COMPID_TRUETYPE_OPENTYPE_FONT_COLLECTION_RESOURCE_OBJECT = 53;
 
     /** mime type entry mapping */
-    private final java.util.Map/*<String, ObjectType>*/ mimeObjectTypeMap
-        = Collections.synchronizedMap(
-                new java.util.HashMap/*<String, ObjectType>*/());
+    private final java.util.Map<String, ObjectType> mimeObjectTypeMap
+               = Collections.synchronizedMap(new HashMap<String, ObjectType>());
 
     /** singleton instance */
     private static Registry instance = null;
@@ -203,7 +203,7 @@ public final class Registry {
      * @return the MOD:CA object type
      */
     public ObjectType getObjectType(String mimeType) {
-        return (ObjectType)mimeObjectTypeMap.get(mimeType);
+        return mimeObjectTypeMap.get(mimeType);
     }
 
     /**

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/StreamedResourceGroup.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/StreamedResourceGroup.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/StreamedResourceGroup.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/StreamedResourceGroup.java Thu Apr  5 16:19:19 2012
@@ -93,4 +93,4 @@ public class StreamedResourceGroup exten
         return this.complete;
     }
 
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/TagLogicalElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/TagLogicalElement.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/TagLogicalElement.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/TagLogicalElement.java Thu Apr  5 16:19:19 2012
@@ -104,7 +104,7 @@ public class TagLogicalElement extends A
         setAttributeValue(value);
         setAttributeQualifier(tleID, 1);
 
-        byte[] data = new byte[SF_HEADER.length];
+        byte[] data = new byte[SF_HEADER_LENGTH];
         copySF(data, Type.ATTRIBUTE, Category.PROCESS_ELEMENT);
 
         int tripletDataLength = getTripletDataLength();

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/triplets/FullyQualifiedNameTriplet.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/triplets/FullyQualifiedNameTriplet.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/triplets/FullyQualifiedNameTriplet.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/triplets/FullyQualifiedNameTriplet.java Thu Apr  5 16:19:19 2012
@@ -205,4 +205,4 @@ public class FullyQualifiedNameTriplet e
 
         os.write(data);
     }
-}
\ No newline at end of file
+}

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/triplets/ObjectClassificationTriplet.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/triplets/ObjectClassificationTriplet.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/triplets/ObjectClassificationTriplet.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/modca/triplets/ObjectClassificationTriplet.java Thu Apr  5 16:19:19 2012
@@ -212,4 +212,4 @@ public class ObjectClassificationTriplet
 
         os.write(data);
     }
-}
\ No newline at end of file
+}

Propchange: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/parser/
------------------------------------------------------------------------------
  Merged /xmlgraphics/fop/branches/Temp_PDF_ObjectStreams/src/java/org/apache/fop/afp/parser:r1303414-1305418
  Merged /xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/parser:r1040963-1307575
  Merged /xmlgraphics/fop/branches/Temp_Color/src/java/org/apache/fop/afp/parser:r956535-1069429
  Merged /xmlgraphics/fop/branches/Temp_ImproveAccessibility/src/java/org/apache/fop/afp/parser:r1187234-1242827

Modified: xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/parser/MODCAParser.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/parser/MODCAParser.java?rev=1309921&r1=1309920&r2=1309921&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/parser/MODCAParser.java (original)
+++ xmlgraphics/fop/branches/Temp_TrueTypeInPostScript/src/java/org/apache/fop/afp/parser/MODCAParser.java Thu Apr  5 16:19:19 2012
@@ -20,15 +20,23 @@
 package org.apache.fop.afp.parser;
 
 import java.io.DataInputStream;
-import java.io.EOFException;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.fop.afp.parser.UnparsedStructuredField.Introducer;
+
 /**
  * An simple MO:DCA/AFP parser.
  */
 public class MODCAParser {
 
+    private static final Log LOG = LogFactory.getLog(MODCAParser.class);
+
+    private static final int INTRODUCER_LENGTH = 8;
+
     /** The carriage control character (0x5A) used to indicate the start of a structured field. */
     public static final byte CARRIAGE_CONTROL_CHAR = (byte)(0x5A & 0xFF);
 
@@ -39,19 +47,9 @@ public class MODCAParser {
      * @param in the {@link InputStream} to read the AFP file from.
      */
     public MODCAParser(InputStream in) {
-        if (!in.markSupported()) {
-            in = new java.io.BufferedInputStream(in);
-        }
         this.din = new DataInputStream(in);
     }
 
-    /**
-     * Returns the {@link DataInputStream} used for parsing structured fields.
-     * @return the data input stream
-     */
-    public DataInputStream getDataInputStream() {
-        return this.din;
-    }
 
     /**
      * Reads the next structured field from the input stream.
@@ -61,20 +59,46 @@ public class MODCAParser {
      * @throws IOException if an I/O error occurs
      */
     public UnparsedStructuredField readNextStructuredField() throws IOException {
-        try {
-            while (true) {
-                byte b = din.readByte(); //Skip 0x5A character if necessary (ex. AFP)
-                if (b == 0x0D || b == 0x0A) {
-                    //CR and LF may be used as field delimiters
-                    continue;
-                } else if (b == CARRIAGE_CONTROL_CHAR) {
-                    break; //Signals the start of a new structured field
-                }
+
+        //Find the SF delimiter
+        do {
+            //Exhausted streams and so no next SF
+            //  - null return represents this case
+            //  TODO should this happen?
+            if (din.available() == 0) {
+                return null;
+            }
+        } while (din.readByte() != CARRIAGE_CONTROL_CHAR);
+
+        //Read introducer as byte array to preserve any data not parsed below
+        byte[] introducerData = new byte[INTRODUCER_LENGTH]; //Length of introducer
+        din.readFully(introducerData);
+
+        Introducer introducer = new Introducer(introducerData);
+
+        int dataLength = introducer.getLength() - INTRODUCER_LENGTH;
+
+        //Handle optional extension
+        byte[] extData = null;
+        if (introducer.isExtensionPresent()) {
+            short extLength = 0;
+            extLength = (short)((din.readByte()) & 0xFF);
+            if (extLength > 0) {
+                extData = new byte[extLength - 1];
+                din.readFully(extData);
+                dataLength -= extLength;
             }
-        } catch (EOFException eof) {
-            return null;
         }
-        return UnparsedStructuredField.readStructuredField(getDataInputStream());
-    }
+        //Read payload
+        byte[] data = new byte[dataLength];
+        din.readFully(data);
 
+        UnparsedStructuredField sf = new UnparsedStructuredField(introducer, data, extData);
+
+        if (LOG.isTraceEnabled()) {
+            LOG.trace(sf);
+        }
+
+        return sf;
+    }
 }



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