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...

[email protected]
Newsgroups gmane.text.xml.fop.cvs
Message-ID <[email protected]>
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;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.