]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Buzilla#53657 - AFP fonts use nominal character increment when the glyph metrics...
authorMehdi Houshmand <mehdi@apache.org>
Fri, 10 Aug 2012 09:50:47 +0000 (09:50 +0000)
committerMehdi Houshmand <mehdi@apache.org>
Fri, 10 Aug 2012 09:50:47 +0000 (09:50 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1371629 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/afp/fonts/CharacterSet.java
src/java/org/apache/fop/afp/fonts/CharacterSetBuilder.java
src/java/org/apache/fop/afp/fonts/CharacterSetOrientation.java
src/java/org/apache/fop/afp/fonts/DoubleByteFont.java
status.xml

index 49e7f99bab562e45eed5bc0ea582fbc2279bbf6e..d54d478bcee3d38de72a5224d9877da095d71fb1 100644 (file)
@@ -363,4 +363,12 @@ public class CharacterSet {
         return getCharacterSetOrientation().getEmSpaceIncrement();
     }
 
+    /**
+     * Returns the nominal character increment.
+     * @return the nominal character increment
+     */
+    public int getNominalCharIncrement() {
+        return getCharacterSetOrientation().getNominalCharIncrement();
+    }
+
 }
index 7331178f521acc745e779f2a220e540cb2243559..2aa5a9eeab13a0e33eac8941aabaa54cc887ea6b 100644 (file)
@@ -446,20 +446,15 @@ public abstract class CharacterSetBuilder {
             position++;
 
             if (position == 26) {
-
                 position = 0;
 
                 int orientation = determineOrientation(fnoData[2]);
-                //  Space Increment
-                int space = ((fnoData[8] & 0xFF ) << 8) + (fnoData[9] & 0xFF);
-                //  Em-Space Increment
-                int em = ((fnoData[14] & 0xFF ) << 8) + (fnoData[15] & 0xFF);
-
-                CharacterSetOrientation cso = new CharacterSetOrientation(orientation);
-                cso.setSpaceIncrement(space);
-                cso.setEmSpaceIncrement(em);
-                orientations.add(cso);
+                int spaceIncrement = getUBIN(fnoData, 8);
+                int emIncrement = getUBIN(fnoData, 14);
+                int nominalCharacterIncrement = getUBIN(fnoData, 20);
 
+                orientations.add(new CharacterSetOrientation(orientation, spaceIncrement,
+                        emIncrement, nominalCharacterIncrement));
             }
         }
         return orientations.toArray(EMPTY_CSO_ARRAY);
index 7ac8ae96b1984440be255623b95684e1d1c27377..a730525d2e1b7a4ed54a0dcd7a2c6f19f7d6e73d 100644 (file)
@@ -60,7 +60,7 @@ public class CharacterSetOrientation {
     /**
      * The character widths in the character set (indexed using Unicode codepoints)
      */
-    private int[] charsWidths = null;
+    private int[] charsWidths;
 
     /**
      * The height of lowercase letters
@@ -77,25 +77,26 @@ public class CharacterSetOrientation {
      */
     private char lastChar;
 
-
-    /**
-     * The character set orientation
-     */
-    private int orientation = 0;
-
+    /** The character set orientation */
+    private final int orientation;
     /** space increment */
-    private int spaceIncrement;
+    private final int spaceIncrement;
     /** em space increment */
-    private int emSpaceIncrement = -1;
-
+    private final int emSpaceIncrement;
+    /** Nominal Character Increment */
+    private final int nomCharIncrement;
 
     /**
      * Constructor for the CharacterSetOrientation, the orientation is
      * expressed as the degrees rotation (i.e 0, 90, 180, 270)
      * @param orientation the character set orientation
      */
-    public CharacterSetOrientation(int orientation) {
+    public CharacterSetOrientation(int orientation, int spaceIncrement, int emSpaceIncrement,
+            int nomCharIncrement) {
         this.orientation = orientation;
+        this.spaceIncrement = spaceIncrement;
+        this.emSpaceIncrement = emSpaceIncrement;
+        this.nomCharIncrement = nomCharIncrement;
         charsWidths = new int[256];
         Arrays.fill(charsWidths, -1);
     }
@@ -283,14 +284,6 @@ public class CharacterSetOrientation {
         return this.spaceIncrement;
     }
 
-    /**
-     * Sets the space increment.
-     * @param value the space increment
-     */
-    public void setSpaceIncrement(int value) {
-        this.spaceIncrement = value;
-    }
-
     /**
      * Returns the em space increment.
      * @return the em space increment
@@ -300,11 +293,10 @@ public class CharacterSetOrientation {
     }
 
     /**
-     * Sets the em space increment.
-     * @param value the em space increment
+     * Returns the nominal character increment.
+     * @return the nominal character increment
      */
-    public void setEmSpaceIncrement(int value) {
-        this.emSpaceIncrement = value;
+    public int getNominalCharIncrement() {
+        return this.nomCharIncrement;
     }
-
 }
index 0e6cc20c207fec8a6719e7fb8365345c61c2dbfc..78da6ea82068917f6fd0108fb0e6d02cd7822456 100644 (file)
@@ -80,11 +80,20 @@ public class DoubleByteFont extends AbstractOutlineFont {
         }
 
         if (charWidth == -1) {
-            charWidth = inferCharWidth(character);
+            charWidth = getDefaultCharacterWidth(character);
         }
         return charWidth * size;
     }
 
+    private int getDefaultCharacterWidth(int character) {
+        int nominalCharIncrement = charSet.getNominalCharIncrement();
+        if (nominalCharIncrement > 0) {
+            return nominalCharIncrement;
+        } else {
+            return inferCharWidth(character);
+        }
+    }
+
     private int inferCharWidth(int character) {
 
         //Is this character an ideograph?
index 8b82d990d9563ce6e79c75325c44e470777f5d02..d7c43caa22a1a9268511656e3d1d3b9d46a46fda 100644 (file)
       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="fix" fixes-bug="53657" due-to="Robert Meyer">
+        AFP fonts default to the nominal character increment to font metrics when glyph info
+        is missing from the characterset.
+      </action>
       <action context="Layout" dev="VH" type="fix" fixes-bug="53688">
         Wrong page number reported when a column overflows the region-body in a multi-column 
         document.