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 ss...@apache.org on 2016/07/25 09:59:09 UTC

svn commit: r1753972 - in /xmlgraphics/fop/trunk/fop-core/src: main/java/org/apache/fop/fonts/ main/java/org/apache/fop/fonts/autodetect/ main/java/org/apache/fop/fonts/truetype/ main/java/org/apache/fop/render/bitmap/ main/java/org/apache/fop/render/i...

Author: ssteiner
Date: Mon Jul 25 09:59:08 2016
New Revision: 1753972

URL: http://svn.apache.org/viewvc?rev=1753972&view=rev
Log:
FOP-2633: Generate bold/italic versions of fonts for PDF

Modified:
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/CustomFont.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/DefaultFontConfig.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/DefaultFontConfigurator.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/EmbedFontInfo.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontEventAdapter.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontEventProducer.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontLoader.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/LazyFont.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/autodetect/FontInfoFinder.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/truetype/OFFontLoader.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/BitmapRendererConfig.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/PNGRendererConfig.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/TIFFRendererConfig.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRendererConfig.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/java2d/ConfiguredFontCollection.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/java2d/Java2DRendererConfig.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pcl/PCLRendererConfig.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFPainter.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererConfig.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSRendererConfig.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/txt/TxtRendererConfig.java
    xmlgraphics/fop/trunk/fop-core/src/main/resources/org/apache/fop/fonts/FontEventProducer.xml
    xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/DejaVuLGCSerifTestCase.java
    xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/EmbedFontInfoTestCase.java
    xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/OTFToType1TestCase.java
    xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/TTFFontLoaderTestCase.java
    xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java
    xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/svg/font/FontInfoBuilder.java

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/CustomFont.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/CustomFont.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/CustomFont.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/CustomFont.java Mon Jul 25 09:59:08 2016
@@ -80,6 +80,7 @@ public abstract class CustomFont extends
     /** the character map, mapping Unicode ranges to glyph indices. */
     protected List<CMapSegment> cmap = new ArrayList<CMapSegment>();
     private boolean useAdvanced = true;
+    private boolean simulateStyle;
 
     /**
      * @param resourceResolver the URI resource resolver for controlling file access
@@ -490,6 +491,17 @@ public abstract class CustomFont extends
         this.useAdvanced = enabled;
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    public void setSimulateStyle(boolean enabled) {
+        this.simulateStyle = enabled;
+    }
+
+    public boolean getSimulateStyle() {
+        return this.simulateStyle;
+    }
+
     /** {@inheritDoc} */
     public void putKerningEntry(Integer key, Map<Integer, Integer> value) {
         if (kerning == null) {

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/DefaultFontConfig.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/DefaultFontConfig.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/DefaultFontConfig.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/DefaultFontConfig.java Mon Jul 25 09:59:08 2016
@@ -69,6 +69,12 @@ public final class DefaultFontConfig imp
         }
 
         /** {@inheritDoc} */
+        public DefaultFontConfig parse(Configuration cfg, boolean strict,
+                                       FontEventAdapter eventAdapter) throws FOPException {
+            return new ParserHelper(cfg, strict, eventAdapter).instance;
+        }
+
+        /** {@inheritDoc} */
         public FontConfig parse(Configuration cfg, FontManager fontManager, boolean strict,
                 EventProducer eventProducer) throws FOPException {
             return parse(cfg, strict);
@@ -81,10 +87,17 @@ public final class DefaultFontConfig imp
 
         private Configuration config;
         private  Configuration fontInfoCfg;
+        private FontEventAdapter eventAdapter;
 
         private  DefaultFontConfig instance;
 
         private ParserHelper(Configuration cfg, boolean strict) throws FOPException {
+            this(cfg, strict, null);
+        }
+
+        private ParserHelper(Configuration cfg, boolean strict, FontEventAdapter eventAdapter)
+                throws FOPException {
+            this.eventAdapter = eventAdapter;
             if (cfg == null || cfg.getChild("fonts", false) == null) {
                 instance = null;
             } else {
@@ -118,6 +131,7 @@ public final class DefaultFontConfig imp
                         fontCfg.getAttributeAsBoolean("advanced", true),
                         fontCfg.getAttribute("encoding-mode", EncodingMode.AUTO.getName()),
                         fontCfg.getAttribute("embedding-mode", EncodingMode.AUTO.getName()),
+                        fontCfg.getAttributeAsBoolean("simulate-style", false),
                         fontCfg.getAttributeAsBoolean("embed-as-type1", false));
                 instance.fonts.add(font);
                 boolean hasTriplets = false;
@@ -131,7 +145,12 @@ public final class DefaultFontConfig imp
                     LogUtil.handleError(log, "font without font-triplet", strict);
                 }
                 try {
-                    if (font.getEmbedAsType1() && !config.getAttribute("mime").equals("application/postscript")) {
+                    if (eventAdapter != null && font.getSimulateStyle()
+                            && !config.getAttribute("mime").equals("application/pdf")) {
+                        eventAdapter.fontFeatureNotSuppprted(this, "simulate-style", "PDF");
+                    }
+                    if (eventAdapter != null && font.getEmbedAsType1()
+                            && !config.getAttribute("mime").equals("application/postscript")) {
                         throw new FOPException("The embed-as-type1 attribute is only supported in postscript");
                     }
                 } catch (ConfigurationException ex) {
@@ -301,6 +320,7 @@ public final class DefaultFontConfig imp
         }
 
         private final boolean embedAsType1;
+        private final boolean simulateStyle;
 
         private final List<FontTriplet> tripletList = new ArrayList<FontTriplet>();
 
@@ -309,7 +329,8 @@ public final class DefaultFontConfig imp
         }
 
         private Font(String metrics, String embed, String afm, String pfm, String subFont, boolean kerning,
-                boolean advanced, String encodingMode, String embeddingMode, boolean embedAsType1) {
+                     boolean advanced, String encodingMode, String embeddingMode, boolean simulateStyle,
+                     boolean embedAsType1) {
             this.metrics = metrics;
             this.embedUri = embed;
             this.afm = afm;
@@ -319,6 +340,7 @@ public final class DefaultFontConfig imp
             this.advanced = advanced;
             this.encodingMode = encodingMode;
             this.embeddingMode = embeddingMode;
+            this.simulateStyle = simulateStyle;
             this.embedAsType1 = embedAsType1;
         }
 
@@ -370,6 +392,10 @@ public final class DefaultFontConfig imp
             return pfm;
         }
 
+        public boolean getSimulateStyle() {
+            return simulateStyle;
+        }
+
         public boolean getEmbedAsType1() {
             return embedAsType1;
         }

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/DefaultFontConfigurator.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/DefaultFontConfigurator.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/DefaultFontConfigurator.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/DefaultFontConfigurator.java Mon Jul 25 09:59:08 2016
@@ -166,8 +166,9 @@ public class DefaultFontConfigurator imp
         }
         EncodingMode encodingMode = EncodingMode.getValue(font.getEncodingMode());
         EmbeddingMode embeddingMode = EmbeddingMode.getValue(font.getEmbeddingMode());
-        EmbedFontInfo embedFontInfo = new EmbedFontInfo(fontUris, font.isKerning(), font.isAdvanced(),
-                tripletList, subFont, encodingMode, embeddingMode, font.getEmbedAsType1());
+        EmbedFontInfo embedFontInfo = new EmbedFontInfo(fontUris, font.isKerning(),
+                font.isAdvanced(), tripletList, subFont, encodingMode, embeddingMode,
+                font.getSimulateStyle(), font.getEmbedAsType1());
         if (fontCache != null) {
             if (!fontCache.containsFont(embedFontInfo)) {
                 fontCache.addFont(embedFontInfo, resourceResolver);

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/EmbedFontInfo.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/EmbedFontInfo.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/EmbedFontInfo.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/EmbedFontInfo.java Mon Jul 25 09:59:08 2016
@@ -42,12 +42,14 @@ public class EmbedFontInfo implements Se
     private final EncodingMode encodingMode;
     /** the requested embedding mode for this font */
     private final EmbeddingMode embeddingMode;
+    /** simulates bold or italic on a regular font */
+    private final boolean simulateStyle;
+    private final boolean embedAsType1;
 
     /** the PostScript name of the font */
     protected String postScriptName;
     /** the sub-fontname of the font (used for TrueType Collections, null otherwise) */
     protected String subFontName;
-    private boolean embedAsType1;
 
     /** the list of associated font triplets */
     private List<FontTriplet> fontTriplets;
@@ -67,8 +69,8 @@ public class EmbedFontInfo implements Se
      * @param encodingMode the encoding mode to use for this font
      */
     public EmbedFontInfo(FontUris fontUris, boolean kerning, boolean advanced,
-            List<FontTriplet> fontTriplets, String subFontName,
-            EncodingMode encodingMode, EmbeddingMode embeddingMode, boolean embedAsType1) {
+            List<FontTriplet> fontTriplets, String subFontName, EncodingMode encodingMode,
+            EmbeddingMode embeddingMode, boolean simulateStyle, boolean embedAsType1) {
         this.kerning = kerning;
         this.advanced = advanced;
         this.fontTriplets = fontTriplets;
@@ -76,6 +78,7 @@ public class EmbedFontInfo implements Se
         this.encodingMode = encodingMode;
         this.embeddingMode = embeddingMode;
         this.fontUris = fontUris;
+        this.simulateStyle = simulateStyle;
         this.embedAsType1 = embedAsType1;
     }
 
@@ -90,7 +93,7 @@ public class EmbedFontInfo implements Se
     public EmbedFontInfo(FontUris fontUris, boolean kerning, boolean advanced,
             List<FontTriplet> fontTriplets, String subFontName) {
         this(fontUris, kerning, advanced, fontTriplets, subFontName, EncodingMode.AUTO,
-                EmbeddingMode.AUTO, false);
+                EmbeddingMode.AUTO, false, false);
     }
 
     /**
@@ -196,6 +199,14 @@ public class EmbedFontInfo implements Se
         return this.encodingMode;
     }
 
+    /**
+     * Determines whether the font can simulate a style such as bold or italic.
+     * @return true if the font is being simulated as a different style.
+     */
+    public boolean getSimulateStyle() {
+        return this.simulateStyle;
+    }
+
     public boolean getEmbedAsType1() {
         return embedAsType1;
     }

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontEventAdapter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontEventAdapter.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontEventAdapter.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontEventAdapter.java Mon Jul 25 09:59:08 2016
@@ -71,4 +71,9 @@ public class FontEventAdapter implements
         getEventProducer().svgTextStrokedAsShapes(source, fontFamily);
     }
 
+    /** {@inheritDoc} */
+    public void fontFeatureNotSuppprted(Object source, String feature, String onlySupportedIn) {
+        getEventProducer().fontFeatureNotSuppprted(source, feature, onlySupportedIn);
+    }
+
 }

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontEventProducer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontEventProducer.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontEventProducer.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontEventProducer.java Mon Jul 25 09:59:08 2016
@@ -87,4 +87,13 @@ public interface FontEventProducer exten
      */
     void svgTextStrokedAsShapes(Object source, String fontFamily);
 
+    /**
+     * A method to warn the user that the feature they are trying to use is not supported with either the renderer or
+     * other setting.
+     * @param source
+     * @param feature The feature that has caused the not supported issue
+     * @param onlySupportedIn The renderer / setting that this feature works with.
+     * @event.severity ERROR
+     */
+    void fontFeatureNotSuppprted(Object source, String feature, String onlySupportedIn);
 }

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontLoader.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontLoader.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontLoader.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/FontLoader.java Mon Jul 25 09:59:08 2016
@@ -92,7 +92,7 @@ public abstract class FontLoader {
     public static CustomFont loadFont(FontUris fontUris, String subFontName,
             boolean embedded, EmbeddingMode embeddingMode, EncodingMode encodingMode,
             boolean useKerning, boolean useAdvanced, InternalResourceResolver resourceResolver,
-                                      boolean embedAsType1) throws IOException {
+            boolean simulateStyle, boolean embedAsType1) throws IOException {
         boolean type1 = isType1(fontUris.getEmbed());
         FontLoader loader;
         if (type1) {
@@ -104,7 +104,7 @@ public abstract class FontLoader {
                     resourceResolver);
         } else {
             loader = new OFFontLoader(fontUris.getEmbed(), subFontName, embedded, embeddingMode,
-                    encodingMode, useKerning, useAdvanced, resourceResolver, embedAsType1);
+                    encodingMode, useKerning, useAdvanced, resourceResolver, simulateStyle, embedAsType1);
         }
         return loader.getFont();
     }

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/LazyFont.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/LazyFont.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/LazyFont.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/LazyFont.java Mon Jul 25 09:59:08 2016
@@ -47,6 +47,7 @@ public class LazyFont extends Typeface i
 
     private final boolean useKerning;
     private final boolean useAdvanced;
+    private boolean simulateStyle;
     private boolean embedAsType1;
     private final EncodingMode encodingMode;
     private final EmbeddingMode embeddingMode;
@@ -73,6 +74,7 @@ public class LazyFont extends Typeface i
         } else {
             this.useAdvanced = fontInfo.getAdvanced();
         }
+        this.simulateStyle = fontInfo.getSimulateStyle();
         this.embedAsType1 = fontInfo.getEmbedAsType1();
         this.encodingMode = fontInfo.getEncodingMode() != null ? fontInfo.getEncodingMode()
                 : EncodingMode.AUTO;
@@ -115,8 +117,8 @@ public class LazyFont extends Typeface i
                     if (fontUris.getEmbed() == null) {
                         throw new RuntimeException("Cannot load font. No font URIs available.");
                     }
-                    realFont = FontLoader.loadFont(fontUris, subFontName, embedded,
-                            embeddingMode, encodingMode, useKerning, useAdvanced, resourceResolver, embedAsType1);
+                    realFont = FontLoader.loadFont(fontUris, subFontName, embedded, embeddingMode,
+                                encodingMode, useKerning, useAdvanced, resourceResolver, simulateStyle, embedAsType1);
                 }
                 if (realFont instanceof FontDescriptor) {
                     realFontDescriptor = (FontDescriptor) realFont;

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/autodetect/FontInfoFinder.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/autodetect/FontInfoFinder.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/autodetect/FontInfoFinder.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/autodetect/FontInfoFinder.java Mon Jul 25 09:59:08 2016
@@ -223,7 +223,7 @@ public class FontInfoFinder {
                 try {
                     OFFontLoader ttfLoader = new OFFontLoader(fontURI, fontName, true,
                             EmbeddingMode.AUTO, EncodingMode.AUTO, useKerning, useAdvanced,
-                            resourceResolver, false);
+                            resourceResolver, false, false);
                     customFont = ttfLoader.getFont();
                     if (this.eventListener != null) {
                         customFont.setEventListener(this.eventListener);
@@ -251,7 +251,7 @@ public class FontInfoFinder {
             try {
                 FontUris fontUris = new FontUris(fontURI, null);
                 customFont = FontLoader.loadFont(fontUris, null, true, EmbeddingMode.AUTO, EncodingMode.AUTO,
-                        useKerning, useAdvanced, resourceResolver, false);
+                        useKerning, useAdvanced, resourceResolver, false, false);
                 if (this.eventListener != null) {
                     customFont.setEventListener(this.eventListener);
                 }

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/truetype/OFFontLoader.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/truetype/OFFontLoader.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/truetype/OFFontLoader.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/truetype/OFFontLoader.java Mon Jul 25 09:59:08 2016
@@ -32,6 +32,7 @@ import org.apache.fop.apps.io.InternalRe
 import org.apache.fop.fonts.CFFToType1Font;
 import org.apache.fop.fonts.CIDFontType;
 import org.apache.fop.fonts.CMapSegment;
+import org.apache.fop.fonts.CustomFont;
 import org.apache.fop.fonts.EmbeddingMode;
 import org.apache.fop.fonts.EncodingMode;
 import org.apache.fop.fonts.FontLoader;
@@ -52,6 +53,7 @@ public class OFFontLoader extends FontLo
     private final String subFontName;
     private EncodingMode encodingMode;
     private EmbeddingMode embeddingMode;
+    private boolean simulateStyle;
     private boolean embedAsType1;
 
     /**
@@ -60,7 +62,8 @@ public class OFFontLoader extends FontLo
      * @param resourceResolver the resource resolver for font URI resolution
      */
     public OFFontLoader(URI fontFileURI, InternalResourceResolver resourceResolver) {
-        this(fontFileURI, null, true, EmbeddingMode.AUTO, EncodingMode.AUTO, true, true, resourceResolver, false);
+        this(fontFileURI, null, true, EmbeddingMode.AUTO, EncodingMode.AUTO, true, true, resourceResolver, false,
+                false);
     }
 
     /**
@@ -74,14 +77,16 @@ public class OFFontLoader extends FontLo
      * @param useKerning true to enable loading kerning info if available, false to disable
      * @param useAdvanced true to enable loading advanced info if available, false to disable
      * @param resolver the FontResolver for font URI resolution
+     * @param simulateStyle Determines whether to simulate font styles if a font does not support those by default.
      */
     public OFFontLoader(URI fontFileURI, String subFontName, boolean embedded,
             EmbeddingMode embeddingMode, EncodingMode encodingMode, boolean useKerning,
-            boolean useAdvanced, InternalResourceResolver resolver, boolean embedAsType1) {
+            boolean useAdvanced, InternalResourceResolver resolver, boolean simulateStyle, boolean embedAsType1) {
         super(fontFileURI, embedded, useKerning, useAdvanced, resolver);
         this.subFontName = subFontName;
         this.encodingMode = encodingMode;
         this.embeddingMode = embeddingMode;
+        this.simulateStyle = simulateStyle;
         this.embedAsType1 = embedAsType1;
         if (this.encodingMode == EncodingMode.AUTO) {
             this.encodingMode = EncodingMode.CID; //Default to CID mode for TrueType
@@ -134,6 +139,7 @@ public class OFFontLoader extends FontLo
             isCid = false;
         }
 
+        CustomFont font;
         if (isCid) {
             if (otf instanceof OTFFile && embedAsType1) {
                 multiFont = new CFFToType1Font(resourceResolver, embeddingMode);
@@ -143,10 +149,13 @@ public class OFFontLoader extends FontLo
             multiFont.setIsOTFFile(otf instanceof OTFFile);
             returnFont = multiFont;
             multiFont.setTTCName(ttcFontName);
+            font = multiFont;
         } else {
             singleFont = new SingleByteFont(resourceResolver, embeddingMode);
             returnFont = singleFont;
+            font = singleFont;
         }
+        font.setSimulateStyle(simulateStyle);
 
         returnFont.setFontURI(fontFileURI);
         if (!otf.getEmbedFontName().equals("")) {

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/BitmapRendererConfig.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/BitmapRendererConfig.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/BitmapRendererConfig.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/BitmapRendererConfig.java Mon Jul 25 09:59:08 2016
@@ -29,6 +29,7 @@ import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.fonts.DefaultFontConfig;
 import org.apache.fop.fonts.DefaultFontConfig.DefaultFontConfigParser;
+import org.apache.fop.fonts.FontEventAdapter;
 import org.apache.fop.render.RendererConfig;
 import org.apache.fop.render.java2d.Java2DRendererConfig;
 import org.apache.fop.render.java2d.Java2DRendererConfig.Java2DRendererConfigParser;
@@ -139,7 +140,8 @@ public class BitmapRendererConfig implem
         public BitmapRendererConfig build(FOUserAgent userAgent, Configuration cfg)
                 throws FOPException {
             BitmapRendererConfig config = new BitmapRendererConfig(new DefaultFontConfigParser()
-                    .parse(cfg, userAgent.validateStrictly()));
+                    .parse(cfg, userAgent.validateStrictly(),
+                            new FontEventAdapter(userAgent.getEventBroadcaster())));
             build(config, userAgent, cfg);
             return config;
         }

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/PNGRendererConfig.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/PNGRendererConfig.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/PNGRendererConfig.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/PNGRendererConfig.java Mon Jul 25 09:59:08 2016
@@ -25,6 +25,7 @@ import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.fonts.DefaultFontConfig;
 import org.apache.fop.fonts.DefaultFontConfig.DefaultFontConfigParser;
+import org.apache.fop.fonts.FontEventAdapter;
 
 /**
  * The PNG renderer configuration data object.
@@ -43,7 +44,8 @@ public final class PNGRendererConfig ext
         public PNGRendererConfig build(FOUserAgent userAgent, Configuration cfg)
                 throws FOPException {
             return new PNGRendererConfig(new DefaultFontConfigParser().parse(cfg,
-                    userAgent.validateStrictly()));
+                    userAgent.validateStrictly(),
+                    new FontEventAdapter(userAgent.getEventBroadcaster())));
         }
 
         /** {@inheritDoc} */

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/TIFFRendererConfig.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/TIFFRendererConfig.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/TIFFRendererConfig.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/bitmap/TIFFRendererConfig.java Mon Jul 25 09:59:08 2016
@@ -30,6 +30,7 @@ import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.fonts.DefaultFontConfig;
 import org.apache.fop.fonts.DefaultFontConfig.DefaultFontConfigParser;
+import org.apache.fop.fonts.FontEventAdapter;
 import org.apache.fop.render.RendererConfigOption;
 
 import static org.apache.fop.render.bitmap.TIFFCompressionValue.PACKBITS;
@@ -111,7 +112,8 @@ public final class TIFFRendererConfig ex
         /** {@inheritDoc} */
         public TIFFRendererConfig build(FOUserAgent userAgent, Configuration cfg) throws FOPException {
             config = new TIFFRendererConfig(new DefaultFontConfigParser()
-                    .parse(cfg, userAgent.validateStrictly()));
+                    .parse(cfg, userAgent.validateStrictly(),
+                            new FontEventAdapter(userAgent.getEventBroadcaster())));
             super.build(config, userAgent, cfg);
             if (cfg != null) {
                 setParam(TIFFRendererOption.COMPRESSION,

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRendererConfig.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRendererConfig.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRendererConfig.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRendererConfig.java Mon Jul 25 09:59:08 2016
@@ -26,6 +26,7 @@ import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.fonts.DefaultFontConfig;
 import org.apache.fop.fonts.DefaultFontConfig.DefaultFontConfigParser;
 import org.apache.fop.fonts.FontConfig;
+import org.apache.fop.fonts.FontEventAdapter;
 import org.apache.fop.render.RendererConfig;
 
 /**
@@ -52,7 +53,8 @@ public final class IFRendererConfig impl
         public RendererConfig build(FOUserAgent userAgent, Configuration cfg)
                 throws FOPException {
             return new IFRendererConfig(new DefaultFontConfigParser().parse(cfg,
-                    userAgent.validateStrictly()));
+                    userAgent.validateStrictly(),
+                    new FontEventAdapter(userAgent.getEventBroadcaster())));
         }
 
         /** {@inheritDoc} */

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/java2d/ConfiguredFontCollection.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/java2d/ConfiguredFontCollection.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/java2d/ConfiguredFontCollection.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/java2d/ConfiguredFontCollection.java Mon Jul 25 09:59:08 2016
@@ -87,7 +87,7 @@ public class ConfiguredFontCollection im
                             configFontInfo.getSubFontName(), true,
                             configFontInfo.getEmbeddingMode(), configFontInfo.getEncodingMode(),
                             configFontInfo.getKerning(), configFontInfo.getAdvanced(), resourceResolver,
-                            configFontInfo.getEmbedAsType1());
+                            configFontInfo.getSimulateStyle(), configFontInfo.getEmbedAsType1());
                     font = new CustomFontMetricsMapper(fontMetrics);
                 }
 

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/java2d/Java2DRendererConfig.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/java2d/Java2DRendererConfig.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/java2d/Java2DRendererConfig.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/java2d/Java2DRendererConfig.java Mon Jul 25 09:59:08 2016
@@ -27,6 +27,7 @@ import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.fonts.DefaultFontConfig;
 import org.apache.fop.fonts.DefaultFontConfig.DefaultFontConfigParser;
+import org.apache.fop.fonts.FontEventAdapter;
 import org.apache.fop.render.RendererConfig;
 
 import static org.apache.fop.render.java2d.Java2DRendererOption.JAVA2D_TRANSPARENT_PAGE_BACKGROUND;
@@ -68,7 +69,8 @@ public final class Java2DRendererConfig
         public Java2DRendererConfig build(FOUserAgent userAgent, Configuration cfg)
                 throws FOPException {
             Java2DRendererConfig config = new Java2DRendererConfig(new DefaultFontConfigParser()
-                    .parse(cfg, userAgent.validateStrictly()));
+                    .parse(cfg, userAgent.validateStrictly(),
+                            new FontEventAdapter(userAgent.getEventBroadcaster())));
             boolean value = cfg.getChild(
                     JAVA2D_TRANSPARENT_PAGE_BACKGROUND.getName(), true).getValueAsBoolean(false);
             config.params.put(JAVA2D_TRANSPARENT_PAGE_BACKGROUND, value);

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pcl/PCLRendererConfig.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pcl/PCLRendererConfig.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pcl/PCLRendererConfig.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pcl/PCLRendererConfig.java Mon Jul 25 09:59:08 2016
@@ -29,6 +29,7 @@ import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.fonts.DefaultFontConfig;
 import org.apache.fop.fonts.DefaultFontConfig.DefaultFontConfigParser;
+import org.apache.fop.fonts.FontEventAdapter;
 import org.apache.fop.render.RendererConfig;
 
 import static org.apache.fop.render.pcl.Java2DRendererOption.DISABLE_PJL;
@@ -88,7 +89,8 @@ public final class PCLRendererConfig imp
         /** {@inheritDoc} */
         public PCLRendererConfig build(FOUserAgent userAgent, Configuration cfg) throws FOPException {
             PCLRendererConfig config = new PCLRendererConfig(new DefaultFontConfigParser()
-                    .parse(cfg, userAgent.validateStrictly()));
+                    .parse(cfg, userAgent.validateStrictly(),
+                            new FontEventAdapter(userAgent.getEventBroadcaster())));
             configure(cfg, config);
             return config;
         }

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFPainter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFPainter.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFPainter.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFPainter.java Mon Jul 25 09:59:08 2016
@@ -39,6 +39,7 @@ import org.apache.xmlgraphics.image.load
 import org.apache.xmlgraphics.image.loader.ImageSessionContext;
 
 import org.apache.fop.ResourceEventProducer;
+import org.apache.fop.fonts.CustomFont;
 import org.apache.fop.fonts.Font;
 import org.apache.fop.fonts.FontTriplet;
 import org.apache.fop.fonts.LazyFont;
@@ -458,9 +459,21 @@ public class PDFPainter extends Abstract
         PDFTextUtil textutil = generator.getTextUtil();
         textutil.updateTf(fontKey, fontSize, tf.isMultiByte());
 
+        double shear = 0;
+        boolean simulateStyle = tf instanceof CustomFont && ((CustomFont) tf).getSimulateStyle();
+        if (simulateStyle) {
+            if (triplet.getWeight() == 700) {
+                generator.add("q\n");
+                generator.add("2 Tr 0.31543 w\n");
+            }
+            if (triplet.getStyle().equals("italic")) {
+                shear = 0.3333;
+            }
+        }
+
         generator.updateCharacterSpacing(letterSpacing / 1000f);
 
-        textutil.writeTextMatrix(new AffineTransform(1, 0, 0, -1, x / 1000f, y / 1000f));
+        textutil.writeTextMatrix(new AffineTransform(1, 0, shear, -1, x / 1000f, y / 1000f));
         int l = text.length();
         int dxl = (dx != null ? dx.length : 0);
 
@@ -504,6 +517,9 @@ public class PDFPainter extends Abstract
 
         }
         textutil.writeTJ();
+        if (simulateStyle && triplet.getWeight() == 700) {
+            generator.add("Q\n");
+        }
     }
 
     private static int[] paZero = new int[4];

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererConfig.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererConfig.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererConfig.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererConfig.java Mon Jul 25 09:59:08 2016
@@ -27,6 +27,7 @@ import java.util.Map;
 
 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;
 
@@ -35,6 +36,7 @@ import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.fonts.DefaultFontConfig;
 import org.apache.fop.fonts.DefaultFontConfig.DefaultFontConfigParser;
+import org.apache.fop.fonts.FontEventAdapter;
 import org.apache.fop.pdf.PDFEncryptionParams;
 import org.apache.fop.pdf.PDFFilterList;
 import org.apache.fop.render.RendererConfig;
@@ -117,8 +119,14 @@ public final class PDFRendererConfig imp
             if (cfg != null) {
                 configure(cfg, userAgent, strict);
             }
-            pdfConfig = new PDFRendererConfig(new DefaultFontConfigParser().parse(cfg, strict),
-                    new PDFRendererOptionsConfig(configOptions, encryptionConfig));
+            if (userAgent == null) {
+                pdfConfig = new PDFRendererConfig(new DefaultFontConfigParser().parse(cfg, strict),
+                        new PDFRendererOptionsConfig(configOptions, encryptionConfig));
+            } else {
+                pdfConfig = new PDFRendererConfig(new DefaultFontConfigParser().parse(cfg, strict,
+                        new FontEventAdapter(userAgent.getEventBroadcaster())),
+                        new PDFRendererOptionsConfig(configOptions, encryptionConfig));
+            }
         }
 
         private void parseAndPut(PDFRendererOption option, Configuration cfg) {

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSRendererConfig.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSRendererConfig.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSRendererConfig.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSRendererConfig.java Mon Jul 25 09:59:08 2016
@@ -32,6 +32,7 @@ import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.fonts.DefaultFontConfig;
 import org.apache.fop.fonts.DefaultFontConfig.DefaultFontConfigParser;
+import org.apache.fop.fonts.FontEventAdapter;
 import org.apache.fop.render.RendererConfig;
 import org.apache.fop.util.LogUtil;
 
@@ -113,7 +114,8 @@ public final class PSRendererConfig impl
         private ParserHelper(Configuration cfg, FOUserAgent userAgent)
                 throws ConfigurationException, FOPException {
             config = new PSRendererConfig(new DefaultFontConfigParser().parse(cfg,
-                    userAgent.validateStrictly()));
+                    userAgent.validateStrictly(),
+                    new FontEventAdapter(userAgent.getEventBroadcaster())));
             if (cfg != null) {
                 setBoolConfigParam(cfg, AUTO_ROTATE_LANDSCAPE);
                 setConfigParameter(LANGUAGE_LEVEL,

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/txt/TxtRendererConfig.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/txt/TxtRendererConfig.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/txt/TxtRendererConfig.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/txt/TxtRendererConfig.java Mon Jul 25 09:59:08 2016
@@ -28,6 +28,7 @@ import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.fonts.DefaultFontConfig;
 import org.apache.fop.fonts.DefaultFontConfig.DefaultFontConfigParser;
+import org.apache.fop.fonts.FontEventAdapter;
 import org.apache.fop.render.RendererConfig;
 import org.apache.fop.render.RendererConfigOption;
 
@@ -81,7 +82,7 @@ public final class TxtRendererConfig imp
         /** {@inheritDoc} */
         public TxtRendererConfig build(FOUserAgent userAgent, Configuration cfg) throws FOPException {
             TxtRendererConfig config = new TxtRendererConfig(new DefaultFontConfigParser().parse(cfg,
-                    userAgent.validateStrictly()));
+                    userAgent.validateStrictly(), new FontEventAdapter(userAgent.getEventBroadcaster())));
             if (cfg != null) {
                 TxtRendererOption option = TxtRendererOption.ENCODING;
                 String value = cfg.getChild(option.getName(), true).getValue(null);

Modified: xmlgraphics/fop/trunk/fop-core/src/main/resources/org/apache/fop/fonts/FontEventProducer.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/resources/org/apache/fop/fonts/FontEventProducer.xml?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/resources/org/apache/fop/fonts/FontEventProducer.xml (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/resources/org/apache/fop/fonts/FontEventProducer.xml Mon Jul 25 09:59:08 2016
@@ -22,4 +22,5 @@
   <message key="glyphNotAvailable">Glyph "{ch}" (0x{ch,hex}[, {ch,glyph-name}]) not available in font "{fontName}".</message>
   <message key="fontDirectoryNotFound">The font directory {dir} could not be found.</message>
   <message key="svgTextStrokedAsShapes">The SVG text for font {fontFamily} will be stroked as shapes.</message>
+  <message key="fontFeatureNotSuppprted">The {feature} property is only supported in {onlySupportedIn}.</message>
 </catalogue>

Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/DejaVuLGCSerifTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/DejaVuLGCSerifTestCase.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/DejaVuLGCSerifTestCase.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/DejaVuLGCSerifTestCase.java Mon Jul 25 09:59:08 2016
@@ -49,7 +49,7 @@ public class DejaVuLGCSerifTestCase {
         File file = new File("test/resources/fonts/ttf/DejaVuLGCSerif.ttf");
         FontUris fontUris = new FontUris(file.toURI(), null);
         font = FontLoader.loadFont(fontUris, "", true, EmbeddingMode.AUTO, EncodingMode.AUTO,
-                false, false, resolver, false);
+                false, false, resolver, false, false);
     }
 
     /**

Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/EmbedFontInfoTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/EmbedFontInfoTestCase.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/EmbedFontInfoTestCase.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/EmbedFontInfoTestCase.java Mon Jul 25 09:59:08 2016
@@ -53,7 +53,8 @@ public class EmbedFontInfoTestCase {
         List<FontTriplet> triplets = new ArrayList<FontTriplet>();
         triplets.add(triplet);
         FontUris fontUris = new FontUris(embedURI, metricsURI);
-        sut = new EmbedFontInfo(fontUris, kerning, useAdvanced, triplets, subFontName, encMode, embedMode, false);
+        sut = new EmbedFontInfo(fontUris, kerning, useAdvanced, triplets, subFontName, encMode,
+                embedMode, false, false);
     }
 
     @Test

Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/OTFToType1TestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/OTFToType1TestCase.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/OTFToType1TestCase.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/OTFToType1TestCase.java Mon Jul 25 09:59:08 2016
@@ -51,7 +51,7 @@ public class OTFToType1TestCase {
         InternalResourceResolver rr = ResourceResolverFactory.createDefaultInternalResourceResolver(
                 new File(".").toURI());
         CustomFont realFont = FontLoader.loadFont(new FontUris(new File(s).toURI(), null), null, true,
-                EmbeddingMode.SUBSET, EncodingMode.AUTO, true, true, rr, true);
+                EmbeddingMode.SUBSET, EncodingMode.AUTO, true, true, rr, false, true);
         realFont.mapChar('d');
         InputStream is = ((CFFToType1Font)realFont).getInputStreams().get(0);
         return Type1Font.createWithPFB(is);

Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/TTFFontLoaderTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/TTFFontLoaderTestCase.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/TTFFontLoaderTestCase.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/TTFFontLoaderTestCase.java Mon Jul 25 09:59:08 2016
@@ -50,12 +50,13 @@ public class TTFFontLoaderTestCase {
         boolean useKerning = true;
 
         OFFontLoader fontLoader = new OFFontLoader(absoluteFilePath, fontName, embedded,
-                EmbeddingMode.AUTO, EncodingMode.AUTO, useKerning, useComplexScriptFeatures, resourceResolver, false);
+                EmbeddingMode.AUTO, EncodingMode.AUTO, useKerning, useComplexScriptFeatures,
+                resourceResolver, false, false);
         assertTrue(fontLoader.getFont().hasKerningInfo());
         useKerning = false;
 
         fontLoader = new OFFontLoader(absoluteFilePath, fontName, embedded, EmbeddingMode.AUTO,
-                EncodingMode.AUTO, useKerning, useComplexScriptFeatures, resourceResolver, false);
+                EncodingMode.AUTO, useKerning, useComplexScriptFeatures, resourceResolver, false, false);
         assertFalse(fontLoader.getFont().hasKerningInfo());
     }
 }

Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java Mon Jul 25 09:59:08 2016
@@ -38,9 +38,13 @@ import static org.mockito.Mockito.when;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.FopFactory;
 import org.apache.fop.fo.Constants;
+import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.fonts.FontTriplet;
+import org.apache.fop.fonts.MultiByteFont;
 import org.apache.fop.pdf.PDFDocument;
 import org.apache.fop.pdf.PDFProfile;
 import org.apache.fop.pdf.PDFStructElem;
+import org.apache.fop.pdf.PDFTextUtil;
 import org.apache.fop.render.RenderingContext;
 import org.apache.fop.render.intermediate.IFContext;
 import org.apache.fop.render.intermediate.IFException;
@@ -51,7 +55,7 @@ import junit.framework.Assert;
 public class PDFPainterTestCase {
 
     private FOUserAgent foUserAgent;
-    private  PDFContentGenerator pdfContentGenerator;
+    private PDFContentGenerator pdfContentGenerator;
     private PDFDocumentHandler pdfDocumentHandler;
     private PDFPainter pdfPainter;
     private PDFStructElem elem = new PDFStructElem();
@@ -73,17 +77,17 @@ public class PDFPainterTestCase {
         verify(pdfContentGenerator, times(16)).add(endsWith(" c "));
     }
 
-    private void createPDFPainter(boolean value) {
-        mockFOUserAgent(value);
+    private void createPDFPainter(boolean accessibility) {
+        mockFOUserAgent(accessibility);
         mockPDFContentGenerator();
         mockPDFDocumentHandler();
         PDFLogicalStructureHandler handler = mock(PDFLogicalStructureHandler.class);
         pdfPainter = new PDFPainter(pdfDocumentHandler, handler);
     }
 
-    private void mockFOUserAgent(boolean value) {
+    private void mockFOUserAgent(boolean accessibility) {
         foUserAgent = mock(FOUserAgent.class);
-        when(foUserAgent.isAccessibilityEnabled()).thenReturn(value);
+        when(foUserAgent.isAccessibilityEnabled()).thenReturn(accessibility);
     }
 
     private void mockPDFContentGenerator() {
@@ -132,4 +136,46 @@ public class PDFPainterTestCase {
             return renderingContext;
         }
     }
+
+    @Test
+    public void testSimulateStyle() throws IFException {
+        FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
+        foUserAgent = fopFactory.newFOUserAgent();
+        mockPDFContentGenerator();
+        final StringBuilder sb = new StringBuilder();
+        PDFTextUtil pdfTextUtil = new PDFTextUtil() {
+            protected void write(String code) {
+                sb.append(code);
+            }
+            protected void write(StringBuffer code) {
+                sb.append(code);
+            }
+        };
+        pdfTextUtil.beginTextObject();
+
+        when(pdfContentGenerator.getTextUtil()).thenReturn(pdfTextUtil);
+        PDFDocumentHandler pdfDocumentHandler = new PDFDocumentHandler(new IFContext(foUserAgent)) {
+            PDFContentGenerator getGenerator() {
+                return pdfContentGenerator;
+            }
+        };
+
+        pdfDocumentHandler.setResult(new StreamResult(new ByteArrayOutputStream()));
+        pdfDocumentHandler.startDocument();
+        pdfDocumentHandler.startPage(0, "", "", new Dimension());
+        FontInfo fi = new FontInfo();
+        fi.addFontProperties("f1", new FontTriplet("a", "italic", 700));
+        MultiByteFont font = new MultiByteFont(null, null);
+        font.setSimulateStyle(true);
+        fi.addMetrics("f1", font);
+        pdfDocumentHandler.setFontInfo(fi);
+        MyPDFPainter pdfPainter = new MyPDFPainter(pdfDocumentHandler, null);
+        pdfPainter.setFont("a", "italic", 700, null, 12, null);
+        pdfPainter.drawText(0, 0, 0, 0, null, "test");
+
+        Assert.assertEquals(sb.toString(), "BT\n/f1 0.012 Tf\n1 0 0.3333 -1 0 0 Tm [<0000000000000000>] TJ\n");
+        verify(pdfContentGenerator).add("q\n");
+        verify(pdfContentGenerator).add("2 Tr 0.31543 w\n");
+        verify(pdfContentGenerator).add("Q\n");
+    }
 }

Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/svg/font/FontInfoBuilder.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/svg/font/FontInfoBuilder.java?rev=1753972&r1=1753971&r2=1753972&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/svg/font/FontInfoBuilder.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/svg/font/FontInfoBuilder.java Mon Jul 25 09:59:08 2016
@@ -83,7 +83,7 @@ class FontInfoBuilder {
         URI baseURI = new File("test/resources/fonts/ttf").toURI();
         InternalResourceResolver resolver = ResourceResolverFactory.createDefaultInternalResourceResolver(baseURI);
         OFFontLoader fontLoader = new OFFontLoader(new URI(filename), null, true,
-                EmbeddingMode.AUTO, EncodingMode.AUTO, true, useAdvanced, resolver, false);
+                EmbeddingMode.AUTO, EncodingMode.AUTO, true, useAdvanced, resolver, false, false);
         FontMetrics font = fontLoader.getFont();
         registerFont(font, "F" + fontKey++, fontName);
         return this;



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