You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2012/07/08 15:31:39 UTC

svn commit: r1358739 - in /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox: encoding/Encoding.java encoding/MacRomanEncoding.java ttf/PostScriptTable.java

Author: lehmi
Date: Sun Jul  8 13:31:39 2012
New Revision: 1358739

URL: http://svn.apache.org/viewvc?rev=1358739&view=rev
Log:
PDFBOX-1349: fixed the postscript table parser as proposed by Wolfgang Glas

Modified:
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/encoding/Encoding.java
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/encoding/MacRomanEncoding.java
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/PostScriptTable.java

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/encoding/Encoding.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/encoding/Encoding.java?rev=1358739&r1=1358738&r2=1358739&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/encoding/Encoding.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/encoding/Encoding.java Sun Jul  8 13:31:39 2012
@@ -26,6 +26,9 @@ import java.util.Map;
  *
  * @author Ben Litchfield
  * @version $Revision: 1.1 $
+ * 
+ * @deprecated no longer needed by fontbox
+ * 
  */
 public abstract class Encoding
 {

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/encoding/MacRomanEncoding.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/encoding/MacRomanEncoding.java?rev=1358739&r1=1358738&r2=1358739&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/encoding/MacRomanEncoding.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/encoding/MacRomanEncoding.java Sun Jul  8 13:31:39 2012
@@ -21,6 +21,8 @@ package org.apache.fontbox.encoding;
  *
  * @author Ben Litchfield
  * @version $Revision: 1.1 $
+ * 
+ * @deprecated no longer needed by fontbox
  */
 public class MacRomanEncoding extends Encoding
 {

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/PostScriptTable.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/PostScriptTable.java?rev=1358739&r1=1358738&r2=1358739&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/PostScriptTable.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/PostScriptTable.java Sun Jul  8 13:31:39 2012
@@ -18,8 +18,6 @@ package org.apache.fontbox.ttf;
 
 import java.io.IOException;
 
-import org.apache.fontbox.encoding.MacRomanEncoding;
-
 /**
  * A table in a true type font.
  * 
@@ -40,6 +38,57 @@ public class PostScriptTable extends TTF
     private String[] glyphNames = null;
     
     /**
+     * The 258 standard mac glyph names a used in 'post' format 1 and 2.
+     */
+    private static final int NUMBER_OF_MAC_GLYPHS = 258;
+    
+    private static final String[] MAC_GLYPH_NAMES = new String[] 
+    { 
+        ".notdef",".null", "nonmarkingreturn", "space", "exclam", "quotedbl",
+            "numbersign", "dollar", "percent", "ampersand", "quotesingle",
+            "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen",
+            "period", "slash", "zero", "one", "two", "three", "four", "five",
+            "six", "seven", "eight", "nine", "colon", "semicolon", "less",
+            "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F",
+            "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S",
+            "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash",
+            "bracketright", "asciicircum", "underscore", "grave", "a", "b",
+            "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o",
+            "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft",
+            "bar", "braceright", "asciitilde", "Adieresis", "Aring",
+            "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute",
+            "agrave", "acircumflex", "adieresis", "atilde", "aring",
+            "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis",
+            "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute",
+            "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave",
+            "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling",
+            "section", "bullet", "paragraph", "germandbls", "registered",
+            "copyright", "trademark", "acute", "dieresis", "notequal", "AE",
+            "Oslash", "infinity", "plusminus", "lessequal", "greaterequal",
+            "yen", "mu", "partialdiff", "summation", "product", "pi",
+            "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash",
+            "questiondown", "exclamdown", "logicalnot", "radical", "florin",
+            "approxequal", "Delta", "guillemotleft", "guillemotright",
+            "ellipsis", "nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE",
+            "oe", "endash", "emdash", "quotedblleft", "quotedblright",
+            "quoteleft", "quoteright", "divide", "lozenge", "ydieresis",
+            "Ydieresis", "fraction", "currency", "guilsinglleft",
+            "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered",
+            "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex",
+            "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute",
+            "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex",
+            "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi",
+            "circumflex", "tilde", "macron", "breve", "dotaccent", "ring",
+            "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash",
+            "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth",
+            "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply",
+            "onesuperior", "twosuperior", "threesuperior", "onehalf",
+            "onequarter", "threequarters", "franc", "Gbreve", "gbreve",
+            "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron",
+            "ccaron", "dcroat" 
+    };
+
+    /**
      * A tag that identifies this table type.
      */
     public static final String TAG = "post";
@@ -63,8 +112,6 @@ public class PostScriptTable extends TTF
         maxMemType42 = data.readUnsignedInt();
         mimMemType1 = data.readUnsignedInt();
         maxMemType1 = data.readUnsignedInt();
-        MacRomanEncoding encoding = new MacRomanEncoding();
-        
         
         if( formatType == 1.0f )
         {
@@ -72,15 +119,8 @@ public class PostScriptTable extends TTF
              * This TrueType font file contains exactly the 258 glyphs in the standard 
              * Macintosh TrueType.
              */
-            glyphNames = new String[258];
-            for( int i=0; i<glyphNames.length; i++)
-            {
-                String name = encoding.getName( i );
-                if( name != null )
-                {
-                    glyphNames[i] = name;
-                }
-            }
+            glyphNames = new String[NUMBER_OF_MAC_GLYPHS];
+            System.arraycopy(MAC_GLYPH_NAMES, 0, glyphNames, 0, NUMBER_OF_MAC_GLYPHS);
         }
         else if( formatType == 2.0f )
         {
@@ -94,15 +134,16 @@ public class PostScriptTable extends TTF
                 glyphNameIndex[i] = index;
                 // PDFBOX-808: Index numbers between 32768 and 65535 are
                 // reserved for future use, so we should just ignore them
-                if (index <= 32767) {
+                if (index <= 32767) 
+                {
                     maxIndex = Math.max( maxIndex, index );
                 }
             }
             String[] nameArray = null;
-            if( maxIndex >= 258 )
+            if( maxIndex >= NUMBER_OF_MAC_GLYPHS )
             {
-                nameArray = new String[ maxIndex-258 +1 ];
-                for( int i=0; i<maxIndex-258+1; i++ )
+                nameArray = new String[ maxIndex-NUMBER_OF_MAC_GLYPHS +1 ];
+                for( int i=0; i<maxIndex-NUMBER_OF_MAC_GLYPHS+1; i++ )
                 {
                     int numberOfChars = data.read();
                     nameArray[i]=data.readString( numberOfChars );
@@ -111,13 +152,13 @@ public class PostScriptTable extends TTF
             for( int i=0; i<numGlyphs; i++ )
             {
                 int index = glyphNameIndex[i];
-                if( index < 258 )
+                if( index < NUMBER_OF_MAC_GLYPHS )
                 {
-                    glyphNames[i] = encoding.getName( index );
+                    glyphNames[i] = MAC_GLYPH_NAMES[index];
                 }
-                else if( index >= 258 && index <= 32767 )
+                else if( index >= NUMBER_OF_MAC_GLYPHS && index <= 32767 )
                 {
-                    glyphNames[i] = nameArray[index-258];
+                    glyphNames[i] = nameArray[index-NUMBER_OF_MAC_GLYPHS];
                 }
                 else
                 {
@@ -138,7 +179,7 @@ public class PostScriptTable extends TTF
             glyphNames = new String[glyphNameIndex.length];
             for( int i=0; i<glyphNames.length; i++)
             {
-                String name = encoding.getName( glyphNameIndex[i] );
+                String name = MAC_GLYPH_NAMES[glyphNameIndex[i]];
                 if( name != null )
                 {
                     glyphNames[i] = name;