You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/08/28 22:50:19 UTC

svn commit: r1621202 - in /pdfbox/branches/no-awt: fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java pdfbox/src/main/java/org/apache/pdfbox/encoding/DictionaryEncoding.java

Author: jahewson
Date: Thu Aug 28 20:50:18 2014
New Revision: 1621202

URL: http://svn.apache.org/r1621202
Log:
PDFBOX-2262: Expose encoding details for debugging

Modified:
    pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java
    pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/DictionaryEncoding.java

Modified: pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java?rev=1621202&r1=1621201&r2=1621202&view=diff
==============================================================================
--- pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java (original)
+++ pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java Thu Aug 28 20:50:18 2014
@@ -33,6 +33,10 @@ public abstract class CFFCharset
     private final Map<Integer, Integer> gidToSid = new HashMap<Integer, Integer>();
     private final Map<String, Integer> nameToSid = new HashMap<String, Integer>();
 
+    // inverse
+    private final Map<Integer, Integer> gidToCid = new HashMap<Integer, Integer>();
+    private final Map<Integer, String> gidToName = new HashMap<Integer, String>();
+
     /**
      * Package-private constructor for use by subclasses.
      *
@@ -58,6 +62,7 @@ public abstract class CFFCharset
         sidOrCidToGid.put(sid, gid);
         gidToSid.put(gid, sid);
         nameToSid.put(name, sid);
+        gidToName.put(gid, name);
     }
 
     /**
@@ -73,6 +78,7 @@ public abstract class CFFCharset
             throw new IllegalStateException("Not a CIDFont");
         }
         sidOrCidToGid.put(cid, gid);
+        gidToCid.put(gid, cid);
     }
 
     /**
@@ -155,4 +161,34 @@ public abstract class CFFCharset
         }
         return sid;
     }
+
+    /**
+     * Returns the PostScript glyph name for the given GID.
+     *
+     * @param gid GID
+     * @return PostScript glyph name
+     */
+    public String getNameForGID(int gid)
+    {
+        if (isCIDFont)
+        {
+            throw new IllegalStateException("Not a Type 1-equivalent font");
+        }
+        return gidToName.get(gid);
+    }
+
+    /**
+     * Returns the CID for the given GID.
+     *
+     * @param gid GID
+     * @return CID
+     */
+    public int getCIDForGID(int gid)
+    {
+        if (!isCIDFont)
+        {
+            throw new IllegalStateException("Not a CIDFont");
+        }
+        return gidToCid.get(gid);
+    }
 }

Modified: pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/DictionaryEncoding.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/DictionaryEncoding.java?rev=1621202&r1=1621201&r2=1621202&view=diff
==============================================================================
--- pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/DictionaryEncoding.java (original)
+++ pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/DictionaryEncoding.java Thu Aug 28 20:50:18 2014
@@ -1,4 +1,5 @@
 /*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -33,7 +34,7 @@ import org.apache.pdfbox.cos.COSNumber;
 public class DictionaryEncoding extends Encoding
 {
     private final COSDictionary encoding;
-    private final String baseEncoding;
+    private final Encoding baseEncoding;
     private final Map<Integer, String> differences = new HashMap<Integer, String>();
 
     /**
@@ -47,11 +48,11 @@ public class DictionaryEncoding extends 
         if (baseEncoding != COSName.STANDARD_ENCODING)
         {
             encoding.setItem(COSName.BASE_ENCODING, baseEncoding);
-            this.baseEncoding = COSName.BASE_ENCODING.getName();
+            this.baseEncoding = Encoding.getInstance(baseEncoding);
         }
         else
         {
-            this.baseEncoding = baseEncoding.getName();
+            this.baseEncoding = Encoding.getInstance(baseEncoding);
         }
     }
 
@@ -64,18 +65,15 @@ public class DictionaryEncoding extends 
     {
         encoding = fontEncoding;
 
-        Encoding baseEncoding;
         if (encoding.containsKey(COSName.BASE_ENCODING))
         {
             COSName name = encoding.getCOSName(COSName.BASE_ENCODING);
             baseEncoding = Encoding.getInstance(name);
-            this.baseEncoding = name.getName();
         }
         else if (isNonSymbolic)
         {
             // Otherwise, for a nonsymbolic font, it is StandardEncoding
             baseEncoding = StandardEncoding.INSTANCE;
-            this.baseEncoding = COSName.STANDARD_ENCODING.getName();
         }
         else
         {
@@ -85,7 +83,6 @@ public class DictionaryEncoding extends 
             {
                 throw new IllegalArgumentException("Built-in Encoding required for symbolic font");
             }
-            this.baseEncoding = null;
         }
 
         codeToName.putAll( baseEncoding.codeToName );
@@ -112,9 +109,9 @@ public class DictionaryEncoding extends 
     }
 
     /**
-     * Returns the name of the base encoding, or null if using the font's built-in encoding.
+     * Returns the base encoding.
      */
-    public String getBaseEncoding()
+    public Encoding getBaseEncoding()
     {
         return baseEncoding;
     }