]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Bugzilla#53600: Added an event if a glyph and its metric information does not exist...
authorMehdi Houshmand <mehdi@apache.org>
Wed, 25 Jul 2012 12:32:38 +0000 (12:32 +0000)
committerMehdi Houshmand <mehdi@apache.org>
Wed, 25 Jul 2012 12:32:38 +0000 (12:32 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1365555 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/afp/AFPEventProducer.java
src/java/org/apache/fop/afp/AFPEventProducer.xml
src/java/org/apache/fop/afp/fonts/AbstractOutlineFont.java
src/java/org/apache/fop/afp/fonts/DoubleByteFont.java
src/java/org/apache/fop/afp/fonts/OutlineFont.java
src/java/org/apache/fop/render/afp/AFPFontConfig.java
status.xml

index 93eb9c042c4fdb4cc366a436b90d78a3c7f2600d..01d5c4ad7a3eb46f894442f56903e8945ed9e8d5 100644 (file)
@@ -113,4 +113,13 @@ public interface AFPEventProducer extends EventProducer {
      * @event.severity ERROR
      */
     void invalidConfiguration(Object source, Exception e);
+
+    /**
+     * The characterset is missing metric information for the specified character
+     * @param source the event source
+     * @param character the character with missing metric information.
+     * @param charSet the character set containing missing metric information
+     * @event.severity WARN
+     */
+    void charactersetMissingMetrics(Object source, char character, String charSet);
 }
index 042eb5ed88d48769a6e23a9895e869c8fe89aabf..e17a4ea4026ff71127e7f7f7d9caf918da1d18e5 100644 (file)
@@ -8,4 +8,5 @@
   <message key="fontConfigMissing">The mandatory configuation node: '{missingConfig}' was not found at {location}.</message>
   <message key="characterSetNameInvalid">The character set given has an invalid name. [ Reason: {msg} ]</message>
   <message key="codePageNotFound">The code page for an AFP font cannot be found.[ Reason: {e}]</message>
+  <message key="charactersetMissingMetrics">Metric information is missing for the glyph `{character}` in the characterset `{charSet}`. Using space increment width.</message>
 </catalogue>
index 1a2611d8de3c9a8ec543df1c34e5557c5b886f56..7b57a2b8c52beb3eb9ab5b4c5bd512ef4dcdf535 100644 (file)
@@ -19,6 +19,8 @@
 
 package org.apache.fop.afp.fonts;
 
+import org.apache.fop.afp.AFPEventProducer;
+
 /**
  * A font defined as a set of lines and curves as opposed to a bitmap font. An
  * outline font can be scaled to any size and otherwise transformed more easily
@@ -29,16 +31,25 @@ public abstract class AbstractOutlineFont extends AFPFont {
     /** The character set for this font */
     protected CharacterSet charSet = null;
 
+    private final AFPEventProducer eventProducer;
+
     /**
      * Constructor for an outline font.
      *
      * @param name the name of the font
      * @param embeddable sets whether or not this font is to be embedded
      * @param charSet the chracter set
+     * @param eventProducer The object to handle any events which occur from the object.
      */
-    public AbstractOutlineFont(String name, boolean embeddable, CharacterSet charSet) {
+    public AbstractOutlineFont(String name, boolean embeddable, CharacterSet charSet,
+            AFPEventProducer eventProducer) {
         super(name, embeddable);
         this.charSet = charSet;
+        this.eventProducer = eventProducer;
+    }
+
+    AFPEventProducer getAFPEventProducer() {
+        return eventProducer;
     }
 
     /**
index a81805bc51c01a0749eb2c40e86d15171f545fd3..0e6cc20c207fec8a6719e7fb8365345c61c2dbfc 100644 (file)
@@ -23,6 +23,11 @@ import java.lang.Character.UnicodeBlock;
 import java.util.HashSet;
 import java.util.Set;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.fop.afp.AFPEventProducer;
+
 /**
  * Implementation of AbstractOutlineFont that supports double-byte fonts (CID Keyed font (Type 0)).
  * The width of characters that are not prescribed a width metrics in the font resource use
@@ -31,7 +36,9 @@ import java.util.Set;
  */
 public class DoubleByteFont extends AbstractOutlineFont {
 
-    //private static final Log LOG = LogFactory.getLog(DoubleByteFont.class);
+    private static final Log log = LogFactory.getLog(DoubleByteFont.class);
+
+    private final Set<Integer> charsProcessed;
 
     //See also http://unicode.org/reports/tr11/ which we've not closely looked at, yet
     //TODO the Unicode block listed here is probably not complete (ex. Hiragana, Katakana etc.)
@@ -49,9 +56,12 @@ public class DoubleByteFont extends AbstractOutlineFont {
      * @param name the name of the font
      * @param embeddable whether or not this font is embeddable
      * @param charSet the character set
+     * @param eventProducer Handles any AFP related events
      */
-    public DoubleByteFont(String name, boolean embeddable, CharacterSet charSet) {
-        super(name, embeddable, charSet);
+    public DoubleByteFont(String name, boolean embeddable, CharacterSet charSet,
+            AFPEventProducer eventProducer) {
+        super(name, embeddable, charSet, eventProducer);
+        charsProcessed = new HashSet<Integer>();
     }
 
     /** {@inheritDoc} */
@@ -60,6 +70,11 @@ public class DoubleByteFont extends AbstractOutlineFont {
         try {
             charWidth = charSet.getWidth(toUnicodeCodepoint(character));
         } catch (IllegalArgumentException e) {
+            if (!charsProcessed.contains(character)) {
+                charsProcessed.add(character);
+                getAFPEventProducer().charactersetMissingMetrics(this, (char)character,
+                        charSet.getName().trim());
+            }
             //  We shall try and handle characters that have no mapped width metric in font resource
             charWidth = -1;
         }
index 103d96eca4f09dc0ffd8da9c93adec6b282ebc66..e9cdf5ba46e96dc2dd68abdb22a5416241ca4691 100644 (file)
@@ -19,6 +19,8 @@
 
 package org.apache.fop.afp.fonts;
 
+import org.apache.fop.afp.AFPEventProducer;
+
 /**
  * Default implementation of AbstractOutlineFont.
  */
@@ -29,9 +31,11 @@ public class OutlineFont extends AbstractOutlineFont {
      * @param name font's name
      * @param embeddable whether or not this font is embeddable
      * @param charSet font's character set
+     * @param eventProducer Handles any AFP related events
      */
-    public OutlineFont(String name, boolean embeddable, CharacterSet charSet) {
-        super(name, embeddable, charSet);
+    public OutlineFont(String name, boolean embeddable, CharacterSet charSet,
+            AFPEventProducer eventProducer) {
+        super(name, embeddable, charSet, eventProducer);
     }
 
 }
index eca76078f0831543a552781bbc6dd57d95ab492d..aef0b666cb905eda50414525c4ada9406832464a 100644 (file)
@@ -329,8 +329,8 @@ public final class AFPFontConfig implements FontConfig {
             AFPResourceAccessor accessor = getAccessor(resourceResolver);
             CharacterSet characterSet = CharacterSetBuilder.getDoubleByteInstance().buildDBCS(
                     characterset, super.codePage, super.encoding, charsetType, accessor, eventProducer);
-            return getFontInfo(new DoubleByteFont(super.codePage, super.embeddable, characterSet),
-                    this);
+            return getFontInfo(new DoubleByteFont(super.codePage, super.embeddable, characterSet,
+                    eventProducer), this);
         }
     }
 
@@ -365,7 +365,8 @@ public final class AFPFontConfig implements FontConfig {
                 characterSet = CharacterSetBuilder.getSingleByteInstance().buildSBCS(
                         characterset, super.codePage, super.encoding, accessor, eventProducer);
             }
-            return getFontInfo(new OutlineFont(super.name, super.embeddable, characterSet), this);
+            return getFontInfo(new OutlineFont(super.name, super.embeddable, characterSet,
+                    eventProducer), this);
         }
     }
 
index 145cd15cb408c269338b954fa41cc9a144464311..055d40dcc68fc83b19355556ad0e199ded0205f8 100644 (file)
@@ -62,6 +62,9 @@
       documents. Example: the fix of marks layering will be such a case when it's done.
     -->
     <release version="FOP Trunk" date="TBD">
+      <action context="Fonts" dev="MH" type="add" fixes-bug="53600" due-to="Robert Meyer">
+        Added an event if a glyph and its metric information does not exist in the character set
+      </action>
       <action context="Renderers" dev="VH" type="add" fixes-bug="53596">
         When PDF accessibility is enabled, the structure tree must contain information about the 
         number of columns or rows spanned by a table cell.