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 ga...@apache.org on 2012/10/21 20:06:04 UTC

svn commit: r1400689 [6/13] - in /xmlgraphics/fop/branches/fop-1_1: ./ examples/embedding/java/embedding/ examples/embedding/java/embedding/atxml/ examples/embedding/java/embedding/events/ examples/embedding/java/embedding/intermediate/ src/documentati...

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java Sun Oct 21 18:05:50 2012
@@ -35,6 +35,8 @@ import org.apache.fop.fo.flow.ListItemLa
 import org.apache.fop.fo.properties.KeepProperty;
 import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
 import org.apache.fop.layoutmgr.BreakElement;
+import org.apache.fop.layoutmgr.BreakOpportunity;
+import org.apache.fop.layoutmgr.BreakOpportunityHelper;
 import org.apache.fop.layoutmgr.ConditionalElementListener;
 import org.apache.fop.layoutmgr.ElementListObserver;
 import org.apache.fop.layoutmgr.ElementListUtils;
@@ -56,13 +58,14 @@ import org.apache.fop.layoutmgr.SpaceRes
 import org.apache.fop.layoutmgr.TraitSetter;
 import org.apache.fop.traits.MinOptMax;
 import org.apache.fop.traits.SpaceVal;
+import org.apache.fop.util.BreakUtil;
 
 /**
  * LayoutManager for a list-item FO.
  * The list item contains a list item label and a list item body.
  */
-public class ListItemLayoutManager extends BlockStackingLayoutManager
-                    implements ConditionalElementListener {
+public class ListItemLayoutManager extends BlockStackingLayoutManager implements ConditionalElementListener,
+        BreakOpportunity {
 
     /** logging instance */
     private static Log log = LogFactory.getLog(ListItemLayoutManager.class);
@@ -204,6 +207,7 @@ public class ListItemLayoutManager exten
 
         // label
         childLC = makeChildLayoutContext(context);
+        childLC.setFlags(LayoutContext.SUPPRESS_BREAK_BEFORE);
         label.initialize();
         labelList = label.getNextKnuthElements(childLC, alignment);
 
@@ -217,6 +221,7 @@ public class ListItemLayoutManager exten
 
         // body
         childLC = makeChildLayoutContext(context);
+        childLC.setFlags(LayoutContext.SUPPRESS_BREAK_BEFORE);
         body.initialize();
         bodyList = body.getNextKnuthElements(childLC, alignment);
 
@@ -296,16 +301,23 @@ public class ListItemLayoutManager exten
             //Additional penalty height from penalties in the source lists
             int additionalPenaltyHeight = 0;
             int stepPenalty = 0;
+            int breakClass = EN_AUTO;
             KnuthElement endEl = (KnuthElement)elementLists[0].get(end[0]);
             if (endEl instanceof KnuthPenalty) {
                 additionalPenaltyHeight = endEl.getWidth();
-                stepPenalty = Math.max(stepPenalty, endEl.getPenalty());
+                stepPenalty = endEl.getPenalty() == -KnuthElement.INFINITE ? -KnuthElement.INFINITE : Math
+                        .max(stepPenalty, endEl.getPenalty());
+                breakClass = BreakUtil.compareBreakClasses(breakClass,
+                        ((KnuthPenalty) endEl).getBreakClass());
             }
             endEl = (KnuthElement)elementLists[1].get(end[1]);
             if (endEl instanceof KnuthPenalty) {
                 additionalPenaltyHeight = Math.max(
                         additionalPenaltyHeight, endEl.getWidth());
-                stepPenalty = Math.max(stepPenalty, endEl.getPenalty());
+                stepPenalty = endEl.getPenalty() == -KnuthElement.INFINITE ? -KnuthElement.INFINITE : Math
+                        .max(stepPenalty, endEl.getPenalty());
+                breakClass = BreakUtil.compareBreakClasses(breakClass,
+                        ((KnuthPenalty) endEl).getBreakClass());
             }
 
             int boxHeight = step - addedBoxHeight - penaltyHeight;
@@ -343,9 +355,9 @@ public class ListItemLayoutManager exten
                 int p = stepPenalty;
                 if (p > -KnuthElement.INFINITE) {
                     p = Math.max(p, keep.getPenalty());
+                    breakClass = keep.getContext();
                 }
-                returnList.add(new BreakElement(stepPosition, penaltyHeight, p, keep.getContext(),
-                        context));
+                returnList.add(new BreakElement(stepPosition, penaltyHeight, p, breakClass, context));
             }
         }
 
@@ -476,7 +488,7 @@ public class ListItemLayoutManager exten
 
         addId();
 
-        LayoutContext lc = new LayoutContext(0);
+        LayoutContext lc = LayoutContext.offspringOf(layoutContext);
         Position firstPos = null;
         Position lastPos = null;
 
@@ -693,6 +705,13 @@ public class ListItemLayoutManager exten
         body.reset();
     }
 
+    @Override
+    public int getBreakBefore() {
+        int breakBefore = BreakOpportunityHelper.getBreakBefore(this);
+        breakBefore = BreakUtil.compareBreakClasses(breakBefore, label.getBreakBefore());
+        breakBefore = BreakUtil.compareBreakClasses(breakBefore, body.getBreakBefore());
+        return breakBefore;
+    }
 
 }
 

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/RowGroupLayoutManager.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/RowGroupLayoutManager.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/RowGroupLayoutManager.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/RowGroupLayoutManager.java Sun Oct 21 18:05:50 2012
@@ -112,7 +112,7 @@ class RowGroupLayoutManager {
                         spanWidth += ((TableColumn) colIter.next()).getColumnWidth().getValue(
                                 tableLM);
                     }
-                    LayoutContext childLC = new LayoutContext(0);
+                    LayoutContext childLC = LayoutContext.newInstance();
                     childLC.setStackLimitBP(context.getStackLimitBP()); //necessary?
                     childLC.setRefIPD(spanWidth);
 

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableAndCaptionLayoutManager.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableAndCaptionLayoutManager.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableAndCaptionLayoutManager.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableAndCaptionLayoutManager.java Sun Oct 21 18:05:50 2012
@@ -81,7 +81,7 @@ public class TableAndCaptionLayoutManage
             int ipd = context.getRefIPD();
             BreakPoss bp;
 
-            LayoutContext childLC = new LayoutContext(0);
+            LayoutContext childLC = LayoutContext.newInstance();
             // if line layout manager then set stack limit to ipd
             // line LM actually generates a LineArea which is a block
             childLC.setStackLimit(
@@ -145,7 +145,7 @@ public class TableAndCaptionLayoutManage
         /* TODO: Reimplement using Knuth approach
         LayoutManager childLM;
         int iStartPos = 0;
-        LayoutContext lc = new LayoutContext(0);
+        LayoutContext lc = LayoutContext.newInstance();
         while (parentIter.hasNext()) {
             LeafPosition lfp = (LeafPosition) parentIter.next();
             // Add the block areas to Area

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableCaptionLayoutManager.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableCaptionLayoutManager.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableCaptionLayoutManager.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableCaptionLayoutManager.java Sun Oct 21 18:05:50 2012
@@ -76,7 +76,7 @@ public class TableCaptionLayoutManager e
             int ipd = context.getRefIPD();
             BreakPoss bp;
 
-            LayoutContext childLC = new LayoutContext(0);
+            LayoutContext childLC = LayoutContext.newInstance();
             // if line layout manager then set stack limit to ipd
             // line LM actually generates a LineArea which is a block
             childLC.setStackLimit(
@@ -141,7 +141,7 @@ public class TableCaptionLayoutManager e
         /* TODO: Reimplement using Knuth approach
         LayoutManager childLM;
         int iStartPos = 0;
-        LayoutContext lc = new LayoutContext(0);
+        LayoutContext lc = LayoutContext.newInstance();
         while (parentIter.hasNext()) {
             LeafPosition lfp = (LeafPosition) parentIter.next();
             // Add the block areas to Area

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java Sun Oct 21 18:05:50 2012
@@ -144,7 +144,7 @@ public class TableCellLayoutManager exte
         LayoutManager curLM; // currently active LM
         LayoutManager prevLM = null; // previously active LM
         while ((curLM = getChildLM()) != null) {
-            LayoutContext childLC = new LayoutContext(0);
+            LayoutContext childLC = LayoutContext.newInstance();
             // curLM is a ?
             childLC.setStackLimitBP(context.getStackLimitBP().minus(stackLimit));
             childLC.setRefIPD(cellIPD);

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java Sun Oct 21 18:05:50 2012
@@ -71,6 +71,8 @@ public class TableContentLayoutManager i
 
     private TableStepper stepper;
 
+    private boolean headerIsBeingRepeated;
+
     /**
      * Main constructor
      * @param parent Parent layout manager
@@ -383,6 +385,7 @@ public class TableContentLayoutManager i
                 }
             }
         }
+        boolean treatFooterAsArtifact = layoutContext.treatAsArtifact();
         if (lastPos instanceof TableHFPenaltyPosition) {
             TableHFPenaltyPosition penaltyPos = (TableHFPenaltyPosition)lastPos;
             LOG.debug("Break at penalty!");
@@ -393,6 +396,7 @@ public class TableContentLayoutManager i
             }
             if (penaltyPos.footerElements != null) {
                 footerElements = penaltyPos.footerElements;
+                treatFooterAsArtifact = true;
             }
         }
 
@@ -403,10 +407,18 @@ public class TableContentLayoutManager i
         }
 
         if (headerElements != null) {
+            boolean ancestorTreatAsArtifact = layoutContext.treatAsArtifact();
+            if (headerIsBeingRepeated) {
+                layoutContext.setTreatAsArtifact(true);
+            }
             //header positions for the last part are the second-to-last element and need to
             //be handled first before all other TableContentPositions
             addHeaderFooterAreas(headerElements, tableLM.getTable().getTableHeader(), painter,
                     false);
+            if (!ancestorTreatAsArtifact) {
+                headerIsBeingRepeated = true;
+            }
+            layoutContext.setTreatAsArtifact(ancestorTreatAsArtifact);
         }
 
         if (tablePositions.isEmpty()) {
@@ -419,9 +431,12 @@ public class TableContentLayoutManager i
         }
 
         if (footerElements != null) {
+            boolean ancestorTreatAsArtifact = layoutContext.treatAsArtifact();
+            layoutContext.setTreatAsArtifact(treatFooterAsArtifact);
             //Positions for footers are simply added at the end
             addHeaderFooterAreas(footerElements, tableLM.getTable().getTableFooter(), painter,
                     true);
+            layoutContext.setTreatAsArtifact(ancestorTreatAsArtifact);
         }
 
         this.usedBPD += painter.getAccumulatedBPD();

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java Sun Oct 21 18:05:50 2012
@@ -242,7 +242,7 @@ public class TableLayoutManager extends 
         // Elements for the table-header/footer/body
         List contentKnuthElements;
         contentLM = new TableContentLayoutManager(this);
-        LayoutContext childLC = new LayoutContext(0);
+        LayoutContext childLC = LayoutContext.newInstance();
         /*
         childLC.setStackLimit(
               MinOptMax.subtract(context.getStackLimit(),
@@ -355,7 +355,7 @@ public class TableLayoutManager extends 
         // BPD of the table, i.e., height of its content; table's borders and paddings not counted
         int tableHeight = 0;
         //Body childLM;
-        LayoutContext lc = new LayoutContext(0);
+        LayoutContext lc = LayoutContext.offspringOf(layoutContext);
 
 
         lc.setRefIPD(getContentAreaIPD());

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFAMode.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFAMode.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFAMode.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFAMode.java Sun Oct 21 18:05:50 2012
@@ -20,14 +20,14 @@
 package org.apache.fop.pdf;
 
 /** Enum class for PDF/A modes. */
-public final class PDFAMode {
+public enum PDFAMode {
 
     /** PDF/A disabled */
-    public static final PDFAMode DISABLED = new PDFAMode("PDF/A disabled");
+    DISABLED("PDF/A disabled"),
     /** PDF/A-1a enabled */
-    public static final PDFAMode PDFA_1A = new PDFAMode("PDF/A-1a");
+    PDFA_1A("PDF/A-1a"),
     /** PDF/A-1b enabled */
-    public static final PDFAMode PDFA_1B = new PDFAMode("PDF/A-1b");
+    PDFA_1B("PDF/A-1b");
 
     private String name;
 
@@ -66,7 +66,7 @@ public final class PDFAMode {
      * @param s the string
      * @return the PDFAMode enum object (DISABLED will be returned if no match is found)
      */
-    public static PDFAMode valueOf(String s) {
+    public static PDFAMode getValueOf(String s) {
         if (PDFA_1A.getName().equalsIgnoreCase(s)) {
             return PDFA_1A;
         } else if (PDFA_1B.getName().equalsIgnoreCase(s)) {

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFDocument.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFDocument.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFDocument.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFDocument.java Sun Oct 21 18:05:50 2012
@@ -21,7 +21,6 @@ package org.apache.fop.pdf;
 
 // Java
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
 import java.security.NoSuchAlgorithmException;
@@ -719,24 +718,6 @@ public class PDFDocument {
     }
 
     /**
-     * Resolve a URI.
-     *
-     * @param uri the uri to resolve
-     * @throws java.io.FileNotFoundException if the URI could not be resolved
-     * @return the InputStream from the URI.
-     */
-    protected InputStream resolveURI(String uri)
-        throws java.io.FileNotFoundException {
-        try {
-            /* TODO: Temporary hack to compile, improve later */
-            return new java.net.URL(uri).openStream();
-        } catch (Exception e) {
-            throw new java.io.FileNotFoundException(
-                "URI could not be resolved (" + e.getMessage() + "): " + uri);
-        }
-    }
-
-    /**
      * Get an image from the image map.
      *
      * @param key the image key to look for

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFEncryptionParams.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFEncryptionParams.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFEncryptionParams.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFEncryptionParams.java Sun Oct 21 18:05:50 2012
@@ -273,4 +273,17 @@ public class PDFEncryptionParams {
         this.encryptionLengthInBits = encryptionLength;
     }
 
+    public String toString() {
+        return "userPassword = " + userPassword + "\n"
+                + "ownerPassword = " + ownerPassword + "\n"
+                + "allowPrint = " + allowPrint + "\n"
+                + "allowCopyContent = " + allowCopyContent + "\n"
+                + "allowEditContent = " + allowEditContent + "\n"
+                + "allowEditAnnotations = " + allowEditAnnotations + "\n"
+                + "allowFillInForms  = " + allowFillInForms + "\n"
+                + "allowAccessContent = " + allowAccessContent + "\n"
+                + "allowAssembleDocument = " + allowAssembleDocument + "\n"
+                + "allowPrintHq = " + allowPrintHq;
+    }
+
 }

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFFactory.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFFactory.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFFactory.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFFactory.java Sun Oct 21 18:05:50 2012
@@ -23,10 +23,8 @@ package org.apache.fop.pdf;
 import java.awt.Color;
 import java.awt.geom.Point2D;
 import java.awt.geom.Rectangle2D;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.MalformedURLException;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -35,9 +33,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import javax.xml.transform.Source;
-import javax.xml.transform.stream.StreamSource;
-
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.output.ByteArrayOutputStream;
 import org.apache.commons.logging.Log;
@@ -1637,79 +1632,48 @@ public class PDFFactory {
 
         InputStream in = null;
         try {
-            Source source = font.getEmbedFileSource();
-            if (source == null && font.getEmbedResourceName() != null) {
-                source = new StreamSource(this.getClass()
-                        .getResourceAsStream(font.getEmbedResourceName()));
-            }
-            if (source == null) {
-                return null;
-            }
-            if (source instanceof StreamSource) {
-                in = ((StreamSource) source).getInputStream();
-            }
-            if (in == null && source.getSystemId() != null) {
-                try {
-                    in = new java.net.URL(source.getSystemId()).openStream();
-                } catch (MalformedURLException e) {
-                    //TODO: Why construct a new exception here, when it is not thrown?
-                    new FileNotFoundException(
-                            "File not found. URL could not be resolved: "
-                                    + e.getMessage());
-                }
-            }
-            if (in == null) {
-                return null;
-            }
-            //Make sure the InputStream is decorated with a BufferedInputStream
-            if (!(in instanceof java.io.BufferedInputStream)) {
-                in = new java.io.BufferedInputStream(in);
-            }
+            in = font.getInputStream();
             if (in == null) {
                 return null;
             } else {
-                try {
-                    AbstractPDFStream embeddedFont;
-                    if (desc.getFontType() == FontType.TYPE0) {
-                        MultiByteFont mbfont = (MultiByteFont)font;
-                        FontFileReader reader = new FontFileReader(in);
-
-                        TTFSubSetFile subset = new TTFSubSetFile();
-                        subset.readFont(reader, mbfont.getTTCName(), mbfont.getUsedGlyphs());
-                        byte[] subsetFont = subset.getFontSubset();
-                        // Only TrueType CID fonts are supported now
-
-                        embeddedFont = new PDFTTFStream(subsetFont.length);
-                        ((PDFTTFStream)embeddedFont).setData(subsetFont, subsetFont.length);
-                    } else if (desc.getFontType() == FontType.TYPE1) {
-                        PFBParser parser = new PFBParser();
-                        PFBData pfb = parser.parsePFB(in);
-                        embeddedFont = new PDFT1Stream();
-                        ((PDFT1Stream)embeddedFont).setData(pfb);
-                    } else {
-                        byte[] file = IOUtils.toByteArray(in);
-                        embeddedFont = new PDFTTFStream(file.length);
-                        ((PDFTTFStream)embeddedFont).setData(file, file.length);
-                    }
+                AbstractPDFStream embeddedFont;
+                if (desc.getFontType() == FontType.TYPE0) {
+                    MultiByteFont mbfont = (MultiByteFont) font;
+                    FontFileReader reader = new FontFileReader(in);
+
+                    TTFSubSetFile subset = new TTFSubSetFile();
+                    subset.readFont(reader, mbfont.getTTCName(), mbfont.getUsedGlyphs());
+                    byte[] subsetFont = subset.getFontSubset();
+                    // Only TrueType CID fonts are supported now
+
+                    embeddedFont = new PDFTTFStream(subsetFont.length);
+                    ((PDFTTFStream) embeddedFont).setData(subsetFont, subsetFont.length);
+                } else if (desc.getFontType() == FontType.TYPE1) {
+                    PFBParser parser = new PFBParser();
+                    PFBData pfb = parser.parsePFB(in);
+                    embeddedFont = new PDFT1Stream();
+                    ((PDFT1Stream) embeddedFont).setData(pfb);
+                } else {
+                    byte[] file = IOUtils.toByteArray(in);
+                    embeddedFont = new PDFTTFStream(file.length);
+                    ((PDFTTFStream) embeddedFont).setData(file, file.length);
+                }
 
-                    /*
-                    embeddedFont.getFilterList().addFilter("flate");
-                    if (getDocument().isEncryptionActive()) {
-                        getDocument().applyEncryption(embeddedFont);
-                    } else {
-                        embeddedFont.getFilterList().addFilter("ascii-85");
-                    }*/
+                /*
+                embeddedFont.getFilterList().addFilter("flate");
+                if (getDocument().isEncryptionActive()) {
+                    getDocument().applyEncryption(embeddedFont);
+                } else {
+                    embeddedFont.getFilterList().addFilter("ascii-85");
+                }*/
 
-                    return embeddedFont;
-                } finally {
-                    in.close();
-                }
+                return embeddedFont;
             }
         } catch (IOException ioe) {
-            log.error(
-                    "Failed to embed font [" + desc + "] "
-                    + desc.getEmbedFontName(), ioe);
+            log.error("Failed to embed font [" + desc + "] " + desc.getEmbedFontName(), ioe);
             return null;
+        } finally {
+            IOUtils.closeQuietly(in);
         }
     }
 

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFStructElem.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFStructElem.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFStructElem.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFStructElem.java Sun Oct 21 18:05:50 2012
@@ -72,9 +72,7 @@ public class PDFStructElem extends PDFDi
     }
 
     /**
-     * Add a kid to this structure element. This element will then add itself to
-     * its parent structure element if it has not already, and so will the
-     * parent, and so on.
+     * Adds a kid to this structure element.
      *
      * @param kid element to be added
      */

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFXMode.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFXMode.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFXMode.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/PDFXMode.java Sun Oct 21 18:05:50 2012
@@ -20,12 +20,12 @@
 package org.apache.fop.pdf;
 
 /** Enum class for PDF/X modes. */
-public final class PDFXMode {
+public enum PDFXMode {
 
     /** PDF/X disabled */
-    public static final PDFXMode DISABLED = new PDFXMode("PDF/X disabled");
+    DISABLED("PDF/X disabled"),
     /** PDF/X-3:2003 enabled */
-    public static final PDFXMode PDFX_3_2003 = new PDFXMode("PDF/X-3:2003");
+    PDFX_3_2003("PDF/X-3:2003");
 
     private String name;
 
@@ -47,7 +47,7 @@ public final class PDFXMode {
      * @param s the string
      * @return the PDFAMode enum object (DISABLED will be returned if no match is found)
      */
-    public static PDFXMode valueOf(String s) {
+    public static PDFXMode getValueOf(String s) {
         if (PDFX_3_2003.getName().equalsIgnoreCase(s)) {
             return PDFX_3_2003;
         } else {

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/StreamCacheFactory.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/StreamCacheFactory.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/StreamCacheFactory.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/pdf/StreamCacheFactory.java Sun Oct 21 18:05:50 2012
@@ -24,56 +24,24 @@ import java.io.IOException;
 /**
  * This class is serves as a factory from
  */
-public class StreamCacheFactory {
+public final class StreamCacheFactory {
 
-    private static boolean defaultCacheToFile = false;
-    private static StreamCacheFactory fileInstance = null;
-    private static StreamCacheFactory memoryInstance = null;
-
-    private boolean cacheToFile = false;
+    private static StreamCacheFactory memoryInstance = new StreamCacheFactory();
 
     /**
      * Returns an instance of a StreamCacheFactory with the requested features.
      * @param cacheToFile True if file shall be cached using a temporary file
      * @return StreamCacheFactory the requested factory
      */
-    public static StreamCacheFactory getInstance(boolean cacheToFile) {
-        if (cacheToFile) {
-            if (fileInstance == null) {
-                fileInstance = new StreamCacheFactory(true);
-            }
-            return fileInstance;
-        } else {
-            if (memoryInstance == null) {
-                memoryInstance = new StreamCacheFactory(false);
-            }
-            return memoryInstance;
-        }
-    }
-
-    /**
-     * Returns an instance of a StreamCacheFactory depending on the default
-     * setting for cacheToFile.
-     * @return StreamCacheFactory the requested factory
-     */
     public static StreamCacheFactory getInstance() {
-        return getInstance(defaultCacheToFile);
-    }
-
-    /**
-     * Sets the global default for cacheToFile
-     * @param cacheToFile True if stream caches should be held in files.
-     */
-    public static void setDefaultCacheToFile(boolean cacheToFile) {
-        defaultCacheToFile = cacheToFile;
+        return memoryInstance;
     }
 
     /**
      * Creates a new StreamCacheFactory.
      * @param cacheToFile True if file shall be cached using a temporary file
      */
-    public StreamCacheFactory(boolean cacheToFile) {
-        this.cacheToFile = cacheToFile;
+    private StreamCacheFactory() {
     }
 
     /**
@@ -83,11 +51,7 @@ public class StreamCacheFactory {
      * @return a new StreamCache for caching streams
      */
     public StreamCache createStreamCache() throws IOException {
-        if (this.cacheToFile) {
-            return new TempFileStreamCache();
-        } else {
-            return new InMemoryStreamCache();
-        }
+        return new InMemoryStreamCache();
     }
 
     /**
@@ -98,20 +62,6 @@ public class StreamCacheFactory {
      * @return a new StreamCache for caching streams
      */
     public StreamCache createStreamCache(int hintSize) throws IOException {
-        if (this.cacheToFile) {
-            return new TempFileStreamCache();
-        } else {
-            return new InMemoryStreamCache(hintSize);
-        }
-    }
-
-    /**
-     * Get the value of the global cacheToFile flag.
-     * @return the current cache to file flag
-     */
-    public boolean getCacheToFile() {
-        return this.cacheToFile;
+        return new InMemoryStreamCache(hintSize);
     }
-
-
 }

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/AbstractConfigurator.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/AbstractConfigurator.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/AbstractConfigurator.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/AbstractConfigurator.java Sun Oct 21 18:05:50 2012
@@ -19,9 +19,6 @@
 
 package org.apache.fop.render;
 
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -49,41 +46,6 @@ public abstract class AbstractConfigurat
     }
 
     /**
-     * Returns the configuration subtree for a specific renderer.
-     * @param mimeType the MIME type of the renderer
-     * @return the requested configuration subtree, null if there's no configuration
-     */
-    protected Configuration getConfig(String mimeType) {
-        Configuration cfg = userAgent.getFactory().getUserConfig();
-        if (cfg == null) {
-            if (log.isDebugEnabled()) {
-                log.debug("userconfig is null");
-            }
-            return null;
-        }
-
-        Configuration userConfig = null;
-
-        String type = getType();
-        Configuration[] cfgs
-            = cfg.getChild(type + "s").getChildren(type);
-        for (int i = 0; i < cfgs.length; ++i) {
-            Configuration child = cfgs[i];
-            try {
-                if (child.getAttribute(MIME).equals(mimeType)) {
-                    userConfig = child;
-                    break;
-                }
-            } catch (ConfigurationException e) {
-                // silently pass over configurations without mime type
-            }
-        }
-        log.debug((userConfig == null ? "No u" : "U")
-                  + "ser configuration found for MIME type " + mimeType);
-        return userConfig;
-    }
-
-    /**
      * Returns the configurator type
      * @return the configurator type
      */

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/AbstractRendererConfigurator.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/AbstractRendererConfigurator.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/AbstractRendererConfigurator.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/AbstractRendererConfigurator.java Sun Oct 21 18:05:50 2012
@@ -19,49 +19,30 @@
 
 package org.apache.fop.render;
 
-import org.apache.avalon.framework.configuration.Configuration;
-
 import org.apache.fop.apps.FOUserAgent;
 
 /**
  * Abstract base classes for renderer-related configurator classes. This class basically just
  * provides an accessor to the specific renderer configuration object.
  */
-public abstract class AbstractRendererConfigurator extends AbstractConfigurator {
+public abstract class AbstractRendererConfigurator {
 
-    private static final String TYPE = "renderer";
+    /** fop factory configuration */
+    protected final FOUserAgent userAgent;
 
     /**
      * Default constructor
      * @param userAgent user agent
      */
     public AbstractRendererConfigurator(FOUserAgent userAgent) {
-        super(userAgent);
-    }
-
-    /**
-     * Returns the configuration subtree for a specific renderer.
-     * @param renderer the renderer
-     * @return the requested configuration subtree, null if there's no configuration
-     */
-    protected Configuration getRendererConfig(Renderer renderer) {
-        return super.getConfig(renderer.getMimeType());
+        this.userAgent = userAgent;
     }
 
     /**
-     * Returns the configuration subtree for a specific renderer.
-     * @param mimeType the MIME type of the renderer
-     * @return the requested configuration subtree, null if there's no configuration
+     * Returns the configurator type
+     * @return the configurator type
      */
-    protected Configuration getRendererConfig(String mimeType) {
-        return super.getConfig(mimeType);
+    public static String getType() {
+        return "renderer";
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getType() {
-        return TYPE;
-    }
-
 }

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/AbstractRendererMaker.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/AbstractRendererMaker.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/AbstractRendererMaker.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/AbstractRendererMaker.java Sun Oct 21 18:05:50 2012
@@ -19,6 +19,7 @@
 
 package org.apache.fop.render;
 
+import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
 
 /**
@@ -50,9 +51,8 @@ public abstract class AbstractRendererMa
      * @param userAgent user agent
      * @return a config object that can be used to configure the renderer
      */
-    public RendererConfigurator getConfigurator(FOUserAgent userAgent) {
-        return null;
-    }
+    public abstract void configureRenderer(FOUserAgent userAgent, Renderer renderer)
+            throws FOPException;
 
     /**
      * Indicates whether a specific MIME type is supported by this renderer.

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/PrintRenderer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/PrintRenderer.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/PrintRenderer.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/PrintRenderer.java Sun Oct 21 18:05:50 2012
@@ -36,7 +36,6 @@ import org.apache.fop.fonts.Font;
 import org.apache.fop.fonts.FontCollection;
 import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.fonts.FontManager;
-import org.apache.fop.fonts.FontResolver;
 import org.apache.fop.fonts.FontTriplet;
 import org.apache.fop.fonts.base14.Base14FontCollection;
 
@@ -53,9 +52,6 @@ public abstract class PrintRenderer exte
     /** Font configuration */
     protected FontInfo fontInfo;
 
-    /** Font resolver */
-    protected FontResolver fontResolver = null;
-
     /** list of fonts */
     protected List<EmbedFontInfo> embedFontInfoList = null;
 
@@ -88,11 +84,11 @@ public abstract class PrintRenderer exte
     /** {@inheritDoc} */
     public void setupFontInfo(FontInfo inFontInfo) throws FOPException {
         this.fontInfo = inFontInfo;
-        FontManager fontManager = userAgent.getFactory().getFontManager();
+        FontManager fontManager = userAgent.getFontManager();
         FontCollection[] fontCollections = new FontCollection[] {
                 new Base14FontCollection(fontManager.isBase14KerningEnabled()),
-                new CustomFontCollection(getFontResolver(), getFontList(),
-                                         userAgent.isComplexScriptFeaturesEnabled())
+                new CustomFontCollection(fontManager.getResourceResolver(), getFontList(),
+                        userAgent.isComplexScriptFeaturesEnabled())
         };
         fontManager.setup(getFontInfo(), fontCollections);
     }
@@ -107,7 +103,7 @@ public abstract class PrintRenderer exte
         String key = fontInfo.getInternalFontKey(triplet);
         if (key == null) {
             //Find a default fallback font as last resort
-            triplet = new FontTriplet("any", Font.STYLE_NORMAL, Font.WEIGHT_NORMAL);
+            triplet = FontTriplet.DEFAULT_FONT_TRIPLET;
             key = fontInfo.getInternalFontKey(triplet);
         }
         return key;
@@ -180,18 +176,6 @@ public abstract class PrintRenderer exte
     }
 
     /**
-     * Get FontResolver
-     *
-     * @return FontResolver
-     */
-    public FontResolver getFontResolver() {
-        if (this.fontResolver == null) {
-            this.fontResolver = new DefaultFontResolver(super.userAgent);
-        }
-        return this.fontResolver;
-    }
-
-    /**
      * @return the font info
      */
     public FontInfo getFontInfo() {

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/PrintRendererConfigurator.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/PrintRendererConfigurator.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/PrintRendererConfigurator.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/PrintRendererConfigurator.java Sun Oct 21 18:05:50 2012
@@ -19,124 +19,161 @@
 
 package org.apache.fop.render;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
-import org.apache.fop.apps.FopFactory;
+import org.apache.fop.apps.io.InternalResourceResolver;
 import org.apache.fop.fonts.CustomFontCollection;
+import org.apache.fop.fonts.DefaultFontConfigurator;
 import org.apache.fop.fonts.EmbedFontInfo;
 import org.apache.fop.fonts.FontCollection;
+import org.apache.fop.fonts.FontConfigurator;
 import org.apache.fop.fonts.FontEventAdapter;
-import org.apache.fop.fonts.FontEventListener;
 import org.apache.fop.fonts.FontInfo;
-import org.apache.fop.fonts.FontInfoConfigurator;
 import org.apache.fop.fonts.FontManager;
-import org.apache.fop.fonts.FontResolver;
-import org.apache.fop.fonts.base14.Base14FontCollection;
+import org.apache.fop.render.RendererConfig.RendererConfigParser;
 import org.apache.fop.render.intermediate.IFDocumentHandler;
 import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
+import org.apache.fop.render.pdf.PDFRendererConfig.PDFRendererConfigParser;
 
 /**
  * Base Print renderer configurator (mostly handles font configuration)
  */
-public class PrintRendererConfigurator extends AbstractRendererConfigurator
-            implements RendererConfigurator, IFDocumentHandlerConfigurator {
+public abstract class PrintRendererConfigurator extends AbstractRendererConfigurator
+        implements IFDocumentHandlerConfigurator {
+
+    private final RendererConfigParser rendererConfigParser;
+
+    private final FontConfigurator<EmbedFontInfo> fontInfoConfigurator;
 
-    /** logger instance */
-    protected static final Log log = LogFactory.getLog(PrintRendererConfigurator.class);
+    /**
+     * Default constructor
+     * @param userAgent user agent
+     */
+    public PrintRendererConfigurator(FOUserAgent userAgent, RendererConfigParser rendererConfigParser) {
+        this(userAgent, rendererConfigParser,
+                new DefaultFontConfigurator(userAgent.getFontManager(), new FontEventAdapter(
+                        userAgent.getEventBroadcaster()), userAgent.validateUserConfigStrictly()));
+    }
 
     /**
      * Default constructor
      * @param userAgent user agent
      */
-    public PrintRendererConfigurator(FOUserAgent userAgent) {
+    public PrintRendererConfigurator(FOUserAgent userAgent, RendererConfigParser rendererConfigParser,
+            FontConfigurator<EmbedFontInfo> fontInfoConfigurator) {
         super(userAgent);
+        this.rendererConfigParser = rendererConfigParser;
+        this.fontInfoConfigurator = fontInfoConfigurator;
     }
 
     /**
-     * Builds a list of EmbedFontInfo objects for use with the setup() method.
+     * Returns the renderer configuration data for a specific renderer.
      *
-     * @param renderer print renderer
-     * @throws FOPException if something's wrong with the config data
+     * @param documentHandler the document handler
+     * @return the renderer configuration data
+     * @throws FOPException if an error occurs
      */
-    public void configure(Renderer renderer) throws FOPException {
-        Configuration cfg = getRendererConfig(renderer);
-        if (cfg == null) {
-            log.trace("no configuration found for " + renderer);
-            return;
-        }
-
-        PrintRenderer printRenderer = (PrintRenderer)renderer;
-        FontResolver fontResolver = printRenderer.getFontResolver();
+    protected RendererConfig getRendererConfig(IFDocumentHandler documentHandler) throws FOPException {
+        return getRendererConfig(documentHandler.getMimeType());
+    }
 
-        FontEventListener listener = new FontEventAdapter(
-                renderer.getUserAgent().getEventBroadcaster());
-        List<EmbedFontInfo> embedFontInfoList = buildFontList(cfg, fontResolver, listener);
-        printRenderer.addFontList(embedFontInfoList);
+    /**
+     * gets the renderer configuration data for a specific renderer.
+     *
+     * @param mimeType the MIME type
+     * @return the renderer configuration data
+     * @throws FOPException if an error occurs
+     */
+    protected RendererConfig getRendererConfig(String mimeType) throws FOPException {
+        return userAgent.getRendererConfig(mimeType, rendererConfigParser);
     }
 
     /**
-     * Builds the font list from configuration.
-     * @param cfg the configuration object
-     * @param fontResolver a font resolver
-     * @param listener the font event listener
-     * @return the list of {@link EmbedFontInfo} objects
-     * @throws FOPException if an error occurs while processing the configuration
-     */
-    protected List<EmbedFontInfo> buildFontList(Configuration cfg, FontResolver fontResolver,
-                    FontEventListener listener) throws FOPException {
-        FopFactory factory = userAgent.getFactory();
-        FontManager fontManager = factory.getFontManager();
-        if (fontResolver == null) {
-            //Ensure that we have minimal font resolution capabilities
-            fontResolver
-                = FontManager.createMinimalFontResolver
-                    ( userAgent.isComplexScriptFeaturesEnabled() );
-        }
+     * gets the renderer configuration data for a specific renderer.
+     *
+     * @param renderer the renderer
+     * @return the renderer configuration data
+     * @throws FOPException if an error occurs
+     */
+    protected RendererConfig getRendererConfig(Renderer renderer) throws FOPException {
+        return  getRendererConfig(renderer.getMimeType());
+    }
 
-        boolean strict = factory.validateUserConfigStrictly();
 
-        //Read font configuration
-        FontInfoConfigurator fontInfoConfigurator
-            = new FontInfoConfigurator(cfg, fontManager, fontResolver, listener, strict);
-        List<EmbedFontInfo> fontInfoList = new ArrayList<EmbedFontInfo>();
-        fontInfoConfigurator.configure(fontInfoList);
-        return fontInfoList;
+    /**
+     * Builds a list of EmbedFontInfo objects for use with the setup() method.
+     *
+     * @param renderer print renderer
+     * @throws FOPException if something's wrong with the config data
+     */
+    public void configure(Renderer renderer) throws FOPException {
+        PrintRenderer printRenderer = (PrintRenderer) renderer;
+        List<EmbedFontInfo> embedFontInfoList = buildFontList(renderer.getMimeType());
+        printRenderer.addFontList(embedFontInfoList);
     }
 
-    // ---=== IFDocumentHandler configuration ===---
-
     /** {@inheritDoc} */
     public void configure(IFDocumentHandler documentHandler) throws FOPException {
         //nop
     }
 
     /** {@inheritDoc} */
-    public void setupFontInfo(IFDocumentHandler documentHandler, FontInfo fontInfo)
-                throws FOPException {
-        FontManager fontManager = userAgent.getFactory().getFontManager();
-        List<FontCollection> fontCollections = new ArrayList<FontCollection>();
-        fontCollections.add(new Base14FontCollection(fontManager.isBase14KerningEnabled()));
-
-        Configuration cfg = super.getRendererConfig(documentHandler.getMimeType());
-        if (cfg != null) {
-            FontResolver fontResolver = new DefaultFontResolver(userAgent);
-            FontEventListener listener = new FontEventAdapter(
-                    userAgent.getEventBroadcaster());
-            List<EmbedFontInfo> fontList = buildFontList(cfg, fontResolver, listener);
-            fontCollections.add(new CustomFontCollection(fontResolver, fontList,
-                                userAgent.isComplexScriptFeaturesEnabled()));
+    public void setupFontInfo(String mimeType, FontInfo fontInfo) throws FOPException {
+        FontManager fontManager = userAgent.getFontManager();
+        List<FontCollection> fontCollections = getDefaultFontCollection();
+        fontCollections.add(getCustomFontCollection(fontManager.getResourceResolver(), mimeType));
+        fontManager.setup(fontInfo, fontCollections.toArray(new FontCollection[fontCollections.size()]));
+    }
+
+    protected abstract List<FontCollection> getDefaultFontCollection();
+
+    /**
+     * Returns the font collection for custom configured fonts.
+     *
+     * @param resolver the resource resolver
+     * @param mimeType the renderer MIME type
+     * @return the font collection
+     * @throws FOPException if an error occurs
+     */
+    protected FontCollection getCustomFontCollection(InternalResourceResolver resolver, String mimeType)
+            throws FOPException {
+        List<EmbedFontInfo> fontList;
+        if (rendererConfigParser == null) {
+            fontList = Collections.<EmbedFontInfo>emptyList();
+        } else {
+            fontList = fontInfoConfigurator.configure(getRendererConfig(mimeType).getFontInfoConfig());
         }
+        return createCollectionFromFontList(resolver, fontList);
+    }
+
+    /***
+     * Creates the font collection given a list of embedded font infomation.
+     *
+     * @param resolver the resource resolver
+     * @param fontList the embedded font infomation
+     * @return the font collection
+     */
+    protected FontCollection createCollectionFromFontList(InternalResourceResolver resolver,
+            List<EmbedFontInfo> fontList) {
+        return new CustomFontCollection(resolver, fontList,
+                userAgent.isComplexScriptFeaturesEnabled());
+    }
+
+    private List<EmbedFontInfo> buildFontList(String mimeType) throws FOPException {
+        return fontInfoConfigurator.configure(getRendererConfig(mimeType).getFontInfoConfig());
+    }
 
-        fontManager.setup(fontInfo,
-                (FontCollection[])fontCollections.toArray(
-                        new FontCollection[fontCollections.size()]));
-        documentHandler.setFontInfo(fontInfo);
+    public static PrintRendererConfigurator createDefaultInstance(FOUserAgent userAgent) {
+        // Since PDF is the default output is PDF, it makes sense for the default config parser
+        // to also be the PDF flavour
+        return new PrintRendererConfigurator(userAgent, new PDFRendererConfigParser()) {
+            @Override
+            protected List<FontCollection> getDefaultFontCollection() {
+                throw new UnsupportedOperationException();
+            }
+        };
     }
 }

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/RendererFactory.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/RendererFactory.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/RendererFactory.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/RendererFactory.java Sun Oct 21 18:05:50 2012
@@ -36,6 +36,7 @@ import org.apache.fop.area.AreaTreeHandl
 import org.apache.fop.fo.FOEventHandler;
 import org.apache.fop.render.intermediate.AbstractIFDocumentHandlerMaker;
 import org.apache.fop.render.intermediate.EventProducingFilter;
+import org.apache.fop.render.intermediate.IFContext;
 import org.apache.fop.render.intermediate.IFDocumentHandler;
 import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
 import org.apache.fop.render.intermediate.IFRenderer;
@@ -52,25 +53,19 @@ public class RendererFactory {
     private Map eventHandlerMakerMapping = new java.util.HashMap();
     private Map documentHandlerMakerMapping = new java.util.HashMap();
 
-    private boolean rendererPreferred = false;
+    private final boolean rendererPreferred;
 
     /**
      * Main constructor.
+     * @param rendererPreferred Controls whether a {@link Renderer} is preferred over a
+     * {@link IFDocumentHandler} if both are available for the same MIME type. True to prefer the
+     * {@link Renderer}, false to prefer the {@link IFDocumentHandler}.
      */
-    public RendererFactory() {
+    public RendererFactory(boolean rendererPreferred) {
         discoverRenderers();
         discoverFOEventHandlers();
         discoverDocumentHandlers();
-    }
-
-    /**
-     * Controls whether a {@link Renderer} is preferred over a {@link IFDocumentHandler} if
-     * both are available for the same MIME type.
-     * @param value true to prefer the {@link Renderer},
-     *                  false to prefer the {@link IFDocumentHandler}.
-     */
-    public void setRendererPreferred(boolean value) {
-        this.rendererPreferred = value;
+        this.rendererPreferred = rendererPreferred;
     }
 
     /**
@@ -239,7 +234,7 @@ public class RendererFactory {
      * @param mime the requested output format
      * @return the requested RendererMaker or null if none is available
      */
-    public AbstractIFDocumentHandlerMaker getDocumentHandlerMaker(String mime) {
+    private AbstractIFDocumentHandlerMaker getDocumentHandlerMaker(String mime) {
         AbstractIFDocumentHandlerMaker maker
             = (AbstractIFDocumentHandlerMaker)documentHandlerMakerMapping.get(mime);
         return maker;
@@ -299,10 +294,7 @@ public class RendererFactory {
         AbstractRendererMaker maker = getRendererMaker(outputFormat);
         if (maker != null) {
             Renderer rend = maker.makeRenderer(userAgent);
-            RendererConfigurator configurator = maker.getConfigurator(userAgent);
-            if (configurator != null) {
-                configurator.configure(rend);
-            }
+            maker.configureRenderer(userAgent, rend);
             return rend;
         } else {
             return null;
@@ -383,7 +375,10 @@ public class RendererFactory {
             throw new UnsupportedOperationException(
                 "No IF document handler for the requested format available: " + outputFormat);
         }
-        IFDocumentHandler documentHandler = maker.makeIFDocumentHandler(userAgent);
+        IFDocumentHandler documentHandler = maker.makeIFDocumentHandler(new IFContext(userAgent));
+        // TODO: do all the configuration in the makeIfDocumentHandler method, that would beam when
+        // you ask for a document handler, a configured one is returned to you. Getting it and
+        // configuring it in two steps doesn't make sense.
         IFDocumentHandlerConfigurator configurator = documentHandler.getConfigurator();
         if (configurator != null) {
             configurator.configure(documentHandler);
@@ -398,15 +393,15 @@ public class RendererFactory {
         List lst = new java.util.ArrayList();
         Iterator iter = this.rendererMakerMapping.keySet().iterator();
         while (iter.hasNext()) {
-            lst.add(((String)iter.next()));
+            lst.add(iter.next());
         }
         iter = this.eventHandlerMakerMapping.keySet().iterator();
         while (iter.hasNext()) {
-            lst.add(((String)iter.next()));
+            lst.add(iter.next());
         }
         iter = this.documentHandlerMakerMapping.keySet().iterator();
         while (iter.hasNext()) {
-            lst.add(((String)iter.next()));
+            lst.add(iter.next());
         }
         Collections.sort(lst);
         return (String[])lst.toArray(new String[lst.size()]);

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/XMLHandlerConfigurator.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/XMLHandlerConfigurator.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/XMLHandlerConfigurator.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/XMLHandlerConfigurator.java Sun Oct 21 18:05:50 2012
@@ -83,7 +83,7 @@ public class XMLHandlerConfigurator exte
      */
     public void configure(RendererContext context, String ns) throws FOPException {
         //Optional XML handler configuration
-        Configuration cfg = getRendererConfig(context.getRenderer());
+        Configuration cfg = userAgent.getRendererConfiguration(context.getRenderer().getMimeType());
         if (cfg != null) {
             cfg = getHandlerConfig(cfg, ns);
             if (cfg != null) {

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPCustomizable.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPCustomizable.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPCustomizable.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPCustomizable.java Sun Oct 21 18:05:50 2012
@@ -19,6 +19,8 @@
 
 package org.apache.fop.render.afp;
 
+import java.net.URI;
+
 import org.apache.fop.afp.AFPResourceLevelDefaults;
 
 /**
@@ -152,10 +154,10 @@ public interface AFPCustomizable {
     boolean isStrokeGOCAText();
 
     /**
-     * Sets the default resource group file path
-     * @param filePath the default resource group file path
+     * Sets the default resource group URI
+     * @param uri the default resource group URI
      */
-    void setDefaultResourceGroupFilePath(String filePath);
+    void setDefaultResourceGroupUri(URI uri);
 
     /**
      * Sets the resource level defaults. The object passed in provides information which resource

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPDocumentHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPDocumentHandler.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPDocumentHandler.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPDocumentHandler.java Sun Oct 21 18:05:50 2012
@@ -23,6 +23,7 @@ import java.awt.Color;
 import java.awt.Dimension;
 import java.awt.geom.AffineTransform;
 import java.io.IOException;
+import java.net.URI;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -38,13 +39,13 @@ import org.apache.fop.afp.DataStream;
 import org.apache.fop.afp.fonts.AFPFontCollection;
 import org.apache.fop.afp.fonts.AFPPageFonts;
 import org.apache.fop.afp.modca.ResourceObject;
-import org.apache.fop.afp.util.DefaultFOPResourceAccessor;
-import org.apache.fop.afp.util.ResourceAccessor;
+import org.apache.fop.afp.util.AFPResourceAccessor;
 import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.fonts.FontCollection;
 import org.apache.fop.fonts.FontEventAdapter;
 import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.fonts.FontManager;
+import org.apache.fop.render.afp.AFPRendererConfig.AFPRendererConfigParser;
 import org.apache.fop.render.afp.extensions.AFPElementMapping;
 import org.apache.fop.render.afp.extensions.AFPIncludeFormMap;
 import org.apache.fop.render.afp.extensions.AFPInvokeMediumMap;
@@ -53,13 +54,14 @@ import org.apache.fop.render.afp.extensi
 import org.apache.fop.render.afp.extensions.AFPPageSetup;
 import org.apache.fop.render.afp.extensions.ExtensionPlacement;
 import org.apache.fop.render.intermediate.AbstractBinaryWritingIFDocumentHandler;
+import org.apache.fop.render.intermediate.IFContext;
 import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
 import org.apache.fop.render.intermediate.IFException;
 import org.apache.fop.render.intermediate.IFPainter;
 
 /**
- * {@link org.apache.fop.render.intermediate.IFDocumentHandler} implementation that
- * produces AFP (MO:DCA).
+ * {@link org.apache.fop.render.intermediate.IFDocumentHandler} implementation that produces AFP
+ * (MO:DCA).
  */
 public class AFPDocumentHandler extends AbstractBinaryWritingIFDocumentHandler
             implements AFPCustomizable {
@@ -99,8 +101,9 @@ public class AFPDocumentHandler extends 
     /**
      * Default constructor.
      */
-    public AFPDocumentHandler() {
-        this.resourceManager = new AFPResourceManager();
+    public AFPDocumentHandler(IFContext context) {
+        super(context);
+        this.resourceManager = new AFPResourceManager(context.getUserAgent().getResourceResolver());
         this.paintingState = new AFPPaintingState();
         this.unitConv = paintingState.getUnitConverter();
     }
@@ -117,13 +120,13 @@ public class AFPDocumentHandler extends 
 
     /** {@inheritDoc} */
     public IFDocumentHandlerConfigurator getConfigurator() {
-        return new AFPRendererConfigurator(getUserAgent());
+        return new AFPRendererConfigurator(getUserAgent(), new AFPRendererConfigParser());
     }
 
     /** {@inheritDoc} */
     @Override
     public void setDefaultFontInfo(FontInfo fontInfo) {
-        FontManager fontManager = getUserAgent().getFactory().getFontManager();
+        FontManager fontManager = getUserAgent().getFontManager();
         FontCollection[] fontCollections = new FontCollection[] {
             new AFPFontCollection(getUserAgent().getEventBroadcaster(), null)
         };
@@ -381,8 +384,8 @@ public class AFPDocumentHandler extends 
             }
         } else if (extension instanceof AFPIncludeFormMap) {
             AFPIncludeFormMap formMap = (AFPIncludeFormMap)extension;
-            ResourceAccessor accessor = new DefaultFOPResourceAccessor(
-                    getUserAgent(), null, null);
+            AFPResourceAccessor accessor = new AFPResourceAccessor(
+                    getUserAgent().getResourceResolver());
             try {
                 getResourceManager().createIncludedResource(formMap.getName(),
                         formMap.getSrc(), accessor,
@@ -493,9 +496,8 @@ public class AFPDocumentHandler extends 
         return  paintingState.getFS45();
     }
 
-    /** {@inheritDoc} */
-    public void setDefaultResourceGroupFilePath(String filePath) {
-        resourceManager.setDefaultResourceGroupFilePath(filePath);
+    public void setDefaultResourceGroupUri(URI uri) {
+        resourceManager.setDefaultResourceGroupUri(uri);
     }
 
     /** {@inheritDoc} */

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPDocumentHandlerMaker.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPDocumentHandlerMaker.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPDocumentHandlerMaker.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPDocumentHandlerMaker.java Sun Oct 21 18:05:50 2012
@@ -19,7 +19,6 @@
 
 package org.apache.fop.render.afp;
 
-import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.render.intermediate.AbstractIFDocumentHandlerMaker;
 import org.apache.fop.render.intermediate.IFContext;
@@ -36,10 +35,8 @@ public class AFPDocumentHandlerMaker ext
     };
 
     /** {@inheritDoc} */
-    public IFDocumentHandler makeIFDocumentHandler(FOUserAgent ua) {
-        AFPDocumentHandler handler = new AFPDocumentHandler();
-        handler.setContext(new IFContext(ua));
-        return handler;
+    public IFDocumentHandler makeIFDocumentHandler(IFContext ifContext) {
+        return new AFPDocumentHandler(ifContext);
     }
 
     /** {@inheritDoc} */

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPForeignAttributeReader.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPForeignAttributeReader.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPForeignAttributeReader.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPForeignAttributeReader.java Sun Oct 21 18:05:50 2012
@@ -19,7 +19,7 @@
 
 package org.apache.fop.render.afp;
 
-import java.io.File;
+import java.net.URI;
 import java.util.Map;
 
 import org.apache.commons.logging.Log;
@@ -46,7 +46,7 @@ public class AFPForeignAttributeReader {
             AFPElementMapping.NAMESPACE, "afp:resource-level");
 
     /** the resource-group-file attribute */
-    public static final QName RESOURCE_GROUP_FILE = new QName(
+    public static final QName RESOURCE_GROUP_URI = new QName(
             AFPElementMapping.NAMESPACE, "afp:resource-group-file");
 
     /**
@@ -64,7 +64,7 @@ public class AFPForeignAttributeReader {
     public AFPResourceInfo getResourceInfo(Map/*<QName, String>*/ foreignAttributes) {
         AFPResourceInfo resourceInfo = new AFPResourceInfo();
         if (foreignAttributes != null && !foreignAttributes.isEmpty()) {
-            String resourceName = (String)foreignAttributes.get(RESOURCE_NAME);
+            String resourceName = (String) foreignAttributes.get(RESOURCE_NAME);
             if (resourceName != null) {
                 resourceInfo.setName(resourceName);
             }
@@ -82,45 +82,20 @@ public class AFPForeignAttributeReader {
      * @param foreignAttributes the foreign attributes
      * @return the resource level
      */
-    public AFPResourceLevel getResourceLevel(Map/*<QName, String>*/ foreignAttributes) {
+    public AFPResourceLevel getResourceLevel(Map<QName, String> foreignAttributes) {
         AFPResourceLevel resourceLevel = null;
         if (foreignAttributes != null && !foreignAttributes.isEmpty()) {
             if (foreignAttributes.containsKey(RESOURCE_LEVEL)) {
-                String levelString = (String)foreignAttributes.get(RESOURCE_LEVEL);
+                String levelString = foreignAttributes.get(RESOURCE_LEVEL);
                 resourceLevel = AFPResourceLevel.valueOf(levelString);
                 // if external get resource group file attributes
                 if (resourceLevel != null && resourceLevel.isExternal()) {
-                    String resourceGroupFile
-                        = (String)foreignAttributes.get(RESOURCE_GROUP_FILE);
-                    if (resourceGroupFile == null) {
-                        String msg = RESOURCE_GROUP_FILE + " not specified";
-                        LOG.error(msg);
+                    String resourceGroupUri = foreignAttributes.get(RESOURCE_GROUP_URI);
+                    if (resourceGroupUri == null) {
+                        String msg = RESOURCE_GROUP_URI + " not specified";
                         throw new UnsupportedOperationException(msg);
                     }
-                    File resourceExternalGroupFile = new File(resourceGroupFile);
-                    SecurityManager security = System.getSecurityManager();
-                    try {
-                        if (security != null) {
-                            security.checkWrite(resourceExternalGroupFile.getPath());
-                        }
-                    } catch (SecurityException ex) {
-                        String msg = "unable to gain write access to external resource file: "
-                        + resourceGroupFile;
-                        LOG.error(msg);
-                    }
-
-                    try {
-                        boolean exists = resourceExternalGroupFile.exists();
-                        if (exists) {
-                            LOG.warn("overwriting external resource file: "
-                                    + resourceGroupFile);
-                        }
-                        resourceLevel.setExternalFilePath(resourceGroupFile);
-                    } catch (SecurityException ex) {
-                        String msg = "unable to gain read access to external resource file: "
-                            + resourceGroupFile;
-                        LOG.error(msg);
-                    }
+                    resourceLevel.setExternalUri(URI.create(resourceGroupUri));
                 }
             }
         }

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPImageHandlerSVG.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPImageHandlerSVG.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPImageHandlerSVG.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPImageHandlerSVG.java Sun Oct 21 18:05:50 2012
@@ -42,6 +42,7 @@ import org.apache.fop.afp.AFPObjectAreaI
 import org.apache.fop.afp.AFPPaintingState;
 import org.apache.fop.afp.AFPResourceInfo;
 import org.apache.fop.afp.AFPResourceLevel;
+import org.apache.fop.afp.AFPResourceLevel.ResourceType;
 import org.apache.fop.afp.AFPResourceManager;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.image.loader.batik.BatikImageFlavors;
@@ -142,7 +143,7 @@ public class AFPImageHandlerSVG implemen
         //level not explicitly set/changed so default to inline for GOCA graphic objects
         // (due to a bug in the IBM AFP Workbench Viewer (2.04.01.07), hard copy works just fine)
         if (!resourceInfo.levelChanged()) {
-            resourceInfo.setLevel(new AFPResourceLevel(AFPResourceLevel.INLINE));
+            resourceInfo.setLevel(new AFPResourceLevel(ResourceType.INLINE));
         }
     }
 

Modified: xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPPainter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPPainter.java?rev=1400689&r1=1400688&r2=1400689&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPPainter.java (original)
+++ xmlgraphics/fop/branches/fop-1_1/src/java/org/apache/fop/render/afp/AFPPainter.java Sun Oct 21 18:05:50 2012
@@ -36,6 +36,7 @@ import org.apache.xmlgraphics.image.load
 import org.apache.xmlgraphics.image.loader.ImageSessionContext;
 
 import org.apache.fop.afp.AFPBorderPainter;
+import org.apache.fop.afp.AFPEventProducer;
 import org.apache.fop.afp.AFPPaintingState;
 import org.apache.fop.afp.AFPUnitConverter;
 import org.apache.fop.afp.AbstractAFPPainter;
@@ -50,16 +51,13 @@ import org.apache.fop.afp.modca.Abstract
 import org.apache.fop.afp.modca.PresentationTextObject;
 import org.apache.fop.afp.ptoca.PtocaBuilder;
 import org.apache.fop.afp.ptoca.PtocaProducer;
-import org.apache.fop.afp.util.DefaultFOPResourceAccessor;
-import org.apache.fop.afp.util.ResourceAccessor;
+import org.apache.fop.afp.util.AFPResourceAccessor;
 import org.apache.fop.fonts.Font;
-import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.fonts.FontTriplet;
 import org.apache.fop.fonts.Typeface;
 import org.apache.fop.render.RenderingContext;
 import org.apache.fop.render.intermediate.AbstractIFPainter;
 import org.apache.fop.render.intermediate.BorderPainter;
-import org.apache.fop.render.intermediate.IFContext;
 import org.apache.fop.render.intermediate.IFException;
 import org.apache.fop.render.intermediate.IFState;
 import org.apache.fop.render.intermediate.IFUtil;
@@ -70,7 +68,7 @@ import org.apache.fop.util.CharUtilities
 /**
  * IFPainter implementation that produces AFP (MO:DCA).
  */
-public class AFPPainter extends AbstractIFPainter {
+public class AFPPainter extends AbstractIFPainter<AFPDocumentHandler> {
 
     //** logging instance */
     //private static Log log = LogFactory.getLog(AFPPainter.class);
@@ -78,8 +76,6 @@ public class AFPPainter extends Abstract
     private static final int X = 0;
     private static final int Y = 1;
 
-    private final AFPDocumentHandler documentHandler;
-
     /** the border painter */
     private final AFPBorderPainterAdapter borderPainter;
     /** the rectangle painter */
@@ -88,36 +84,38 @@ public class AFPPainter extends Abstract
     /** unit converter */
     private final AFPUnitConverter unitConv;
 
+    private final AFPEventProducer eventProducer;
+
     /**
      * Default constructor.
      * @param documentHandler the parent document handler
      */
     public AFPPainter(AFPDocumentHandler documentHandler) {
-        super();
-        this.documentHandler = documentHandler;
+        super(documentHandler);
         this.state = IFState.create();
         this.borderPainter = new AFPBorderPainterAdapter(
                 new AFPBorderPainter(getPaintingState(), getDataStream()));
         this.rectanglePainter = documentHandler.createRectanglePainter();
         this.unitConv = getPaintingState().getUnitConverter();
+        this.eventProducer = AFPEventProducer.Provider.get(getUserAgent().getEventBroadcaster());
     }
 
-    /** {@inheritDoc} */
-    @Override
-    protected IFContext getContext() {
-        return this.documentHandler.getContext();
-    }
-
-    FontInfo getFontInfo() {
-        return this.documentHandler.getFontInfo();
+    private AFPPaintingState getPaintingState() {
+        return getDocumentHandler().getPaintingState();
     }
 
-    AFPPaintingState getPaintingState() {
-        return this.documentHandler.getPaintingState();
+    private DataStream getDataStream() {
+        return getDocumentHandler().getDataStream();
     }
 
-    DataStream getDataStream() {
-        return this.documentHandler.getDataStream();
+    @Override
+    public String getFontKey(FontTriplet triplet) throws IFException {
+        try {
+            return super.getFontKey(triplet);
+        } catch (IFException e) {
+            eventProducer.invalidConfiguration(null, e);
+            return super.getFontKey(FontTriplet.DEFAULT_FONT_TRIPLET);
+        }
     }
 
     /** {@inheritDoc} */
@@ -183,7 +181,7 @@ public class AFPPainter extends Abstract
     protected RenderingContext createRenderingContext() {
         AFPRenderingContext psContext = new AFPRenderingContext(
                 getUserAgent(),
-                documentHandler.getResourceManager(),
+                getDocumentHandler().getResourceManager(),
                 getPaintingState(),
                 getFontInfo(),
                 getContext().getForeignAttributes());
@@ -192,7 +190,7 @@ public class AFPPainter extends Abstract
 
     /** {@inheritDoc} */
     public void drawImage(String uri, Rectangle rect) throws IFException {
-        PageSegmentDescriptor pageSegment = documentHandler.getPageSegmentNameFor(uri);
+        PageSegmentDescriptor pageSegment = getDocumentHandler().getPageSegmentNameFor(uri);
 
         if (pageSegment != null) {
             float[] srcPts = {rect.x, rect.y};
@@ -205,11 +203,11 @@ public class AFPPainter extends Abstract
 
             //Do we need to embed an external page segment?
             if (pageSegment.getURI() != null) {
-                ResourceAccessor accessor = new DefaultFOPResourceAccessor (
-                        documentHandler.getUserAgent(), null, null);
+                AFPResourceAccessor accessor = new AFPResourceAccessor(
+                        getDocumentHandler().getUserAgent().getResourceResolver());
                 try {
                     URI resourceUri = new URI(pageSegment.getURI());
-                    documentHandler.getResourceManager().createIncludedResourceFromExternal(
+                    getDocumentHandler().getResourceManager().createIncludedResourceFromExternal(
                             pageSegment.getName(), resourceUri, accessor);
 
                 } catch (URISyntaxException urie) {
@@ -365,14 +363,10 @@ public class AFPPainter extends Abstract
         FontTriplet triplet = new FontTriplet(
                 state.getFontFamily(), state.getFontStyle(), state.getFontWeight());
         //TODO Ignored: state.getFontVariant()
-        String fontKey = getFontInfo().getInternalFontKey(triplet);
-        if (fontKey == null) {
-            triplet = new FontTriplet("any", Font.STYLE_NORMAL, Font.WEIGHT_NORMAL);
-            fontKey = getFontInfo().getInternalFontKey(triplet);
-        }
+        String fontKey = getFontKey(triplet);
 
         // register font as necessary
-        Map<String, Typeface> fontMetricMap = documentHandler.getFontInfo().getFonts();
+        Map<String, Typeface> fontMetricMap = getFontInfo().getFonts();
         final AFPFont afpFont = (AFPFont)fontMetricMap.get(fontKey);
         final Font font = getFontInfo().getFontInstance(triplet, fontSize);
         AFPPageFonts pageFonts = getPaintingState().getPageFonts();
@@ -386,7 +380,7 @@ public class AFPPainter extends Abstract
 
         if (afpFont.isEmbeddable()) {
             try {
-                documentHandler.getResourceManager().embedFont(afpFont, charSet);
+                getDocumentHandler().getResourceManager().embedFont(afpFont, charSet);
             } catch (IOException ioe) {
                 throw new IFException("Error while embedding font resources", ioe);
             }



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