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/17 22:02:20 UTC

svn commit: r1618516 [1/6] - in /pdfbox/no-awt: examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ fontbox/src/main/java/org/apache/fontbox/afm/ fontbox/src/main/java/org/apache/fontbox/cff/ fontbox/src/main/java/org/apache/fontbox/cff/charset/...

Author: jahewson
Date: Sun Aug 17 20:02:18 2014
New Revision: 1618516

URL: http://svn.apache.org/r1618516
Log:
PDFBOX-2262: Removed AWT font rendering

- split CFFFont into CFFType1Font (Type 1) and CFFCIDFont (CID-Keyed)
- Fixed major parsing/conceptual errors in CFFEncoding and CFFCharset
- Moved Type1 and Type1C handling code into seperate classes
- Replaced SystemFontManager with pluggable FileSystemFontProvider
- Replaced PDFFontManager with ExternalFonts
- Added Type1Equivalent interface for Type 1 fonts which may be substituted, e.g. standard 14.
- Moved all code for embedding fonts into new PDxxxFontEmbedder classes

Added:
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/afm/FontMetrics.java
      - copied, changed from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/afm/FontMetric.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java
      - copied, changed from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFontROS.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java
      - copied, changed from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/charset/CFFCharset.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFEncoding.java
      - copied, changed from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/encoding/CFFEncoding.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertCharset.java
      - copied, changed from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/charset/CFFExpertCharset.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertEncoding.java
      - copied, changed from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/encoding/CFFExpertEncoding.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertSubsetCharset.java
      - copied, changed from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/charset/CFFExpertSubsetCharset.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFISOAdobeCharset.java
      - copied, changed from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/charset/CFFISOAdobeCharset.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFStandardEncoding.java
      - copied, changed from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/encoding/CFFStandardEncoding.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CIDKeyedType2CharString.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/ttf/TTFSubsetter.java
      - copied, changed from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFSubFont.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/ttf/Type1Equivalent.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/ttf/WGL4Names.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontProvider.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java
      - copied, changed from r1615712, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0Font.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java
      - copied, changed from r1615712, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Font.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Equivalent.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1FontEmbedder.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/rendering/font/CIDGlyph2D.java
Removed:
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/afm/FontMetric.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFFontROS.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharStringFormatter.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/Type1FontFormatter.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/charset/
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/encoding/
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/ttf/TTFSubFont.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/type1/Type1Mapping.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/util/SystemFontManager.java
    pdfbox/no-awt/fontbox/src/test/java/org/apache/fontbox/cff/Type1CharStringTest.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/AFMEncoding.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0Font.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Font.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFFontManager.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1AfmPfbFont.java
    pdfbox/no-awt/pdfbox/src/main/resources/org/apache/pdfbox/resources/FontMapping.properties
Modified:
    pdfbox/no-awt/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java
    pdfbox/no-awt/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldType1AfmPfb.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/afm/AFMParser.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CIDKeyedFDSelect.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharStringParser.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/encoding/Encoding.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/ttf/NameRecord.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/ttf/NamingTable.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/ttf/PostScriptTable.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/type1/Type1Font.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/util/autodetect/FontDirFinder.java
    pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/util/autodetect/FontFileFinder.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/DictionaryEncoding.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/encoding/Type1Encoding.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontDescriptorAFM.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontDescriptorDictionary.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontFactory.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDMMType1Font.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/rendering/font/TTFGlyph2D.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/rendering/font/Type1Glyph2D.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
    pdfbox/no-awt/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStreamEngine.java
    pdfbox/no-awt/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java
    pdfbox/no-awt/pdfbox/src/test/java/org/apache/pdfbox/util/TestTextStripper.java
    pdfbox/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java
    pdfbox/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type0FontValidator.java
    pdfbox/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type3FontValidator.java
    pdfbox/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/CIDType0Container.java
    pdfbox/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/FontContainer.java
    pdfbox/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/Type1Container.java
    pdfbox/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1.java
    pdfbox/no-awt/tools/src/main/java/org/apache/pdfbox/tools/TextToPDF.java

Modified: pdfbox/no-awt/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java
URL: http://svn.apache.org/viewvc/pdfbox/no-awt/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java?rev=1618516&r1=1618515&r2=1618516&view=diff
==============================================================================
--- pdfbox/no-awt/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java (original)
+++ pdfbox/no-awt/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java Sun Aug 17 20:02:18 2014
@@ -28,7 +28,7 @@ import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.PDStream;
 import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial;
-import org.apache.pdfbox.pdmodel.font.PDCIDFontType2Font;
+import org.apache.pdfbox.pdmodel.font.PDCIDFontType2;
 import org.apache.pdfbox.pdmodel.font.PDFont;
 import org.apache.pdfbox.pdmodel.font.PDFontDescriptorDictionary;
 import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont;
@@ -182,7 +182,7 @@ public class ExtractTTFFonts
                 else if (font instanceof PDType0Font)
                 {
                     PDFont descendantFont = ((PDType0Font) font).getDescendantFont();
-                    if (descendantFont instanceof PDCIDFontType2Font)
+                    if (descendantFont instanceof PDCIDFontType2)
                     {
                         String name = null;
                         if (addKey)

Modified: pdfbox/no-awt/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldType1AfmPfb.java
URL: http://svn.apache.org/viewvc/pdfbox/no-awt/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldType1AfmPfb.java?rev=1618516&r1=1618515&r2=1618516&view=diff
==============================================================================
--- pdfbox/no-awt/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldType1AfmPfb.java (original)
+++ pdfbox/no-awt/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldType1AfmPfb.java Sun Aug 17 20:02:18 2014
@@ -17,13 +17,15 @@
 
 package org.apache.pdfbox.examples.pdmodel;
 
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
 import java.io.IOException;
 
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
 import org.apache.pdfbox.pdmodel.font.PDFont;
-import org.apache.pdfbox.pdmodel.font.PDType1AfmPfbFont;
+import org.apache.pdfbox.pdmodel.font.PDType1Font;
 
 /**
  * This is an example that creates a simple document
@@ -56,7 +58,7 @@ public class HelloWorldType1AfmPfb
 
             PDPage page = new PDPage();
             doc.addPage(page);
-            PDFont font = new PDType1AfmPfbFont(doc,fontfile);
+            PDFont font = createPDType1AfmPfbFont(doc, fontfile);
 
             PDPageContentStream contentStream = new PDPageContentStream(doc,
                     page);
@@ -78,6 +80,14 @@ public class HelloWorldType1AfmPfb
         }
     }
 
+    private PDType1Font createPDType1AfmPfbFont(PDDocument doc, String afmName) throws IOException
+    {
+        return new PDType1Font(doc,
+                new BufferedInputStream(new FileInputStream(afmName)),
+                new BufferedInputStream(new FileInputStream(afmName.replaceAll(".AFM", "").
+                        replaceAll(".afm", "") + ".pfb")));
+    }
+
     /**
      * This will create a hello world PDF document
      * with a ttf-font.

Modified: pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/afm/AFMParser.java
URL: http://svn.apache.org/viewvc/pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/afm/AFMParser.java?rev=1618516&r1=1618515&r2=1618516&view=diff
==============================================================================
--- pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/afm/AFMParser.java (original)
+++ pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/afm/AFMParser.java Sun Aug 17 20:02:18 2014
@@ -334,7 +334,7 @@ public class AFMParser
      * 
      * @throws IOException If there is an IO error reading the document.
      */
-    public FontMetric parse() throws IOException
+    public FontMetrics parse() throws IOException
     {
     	return parseFontMetric();
     }
@@ -346,9 +346,9 @@ public class AFMParser
      *
      * @throws IOException If there is an error reading the AFM file.
      */
-    private FontMetric parseFontMetric() throws IOException
+    private FontMetrics parseFontMetric() throws IOException
     {
-        FontMetric fontMetrics = new FontMetric();
+        FontMetrics fontMetrics = new FontMetrics();
         String startFontMetrics = readString();
         if( !START_FONT_METRICS.equals( startFontMetrics ) )
         {
@@ -527,7 +527,7 @@ public class AFMParser
      *
      * @throws IOException If there is an error parsing the data.
      */
-    private void parseKernData( FontMetric fontMetrics ) throws IOException
+    private void parseKernData( FontMetrics fontMetrics ) throws IOException
     {
         String nextCommand;
         while( !(nextCommand = readString()).equals( END_KERN_DATA ) )

Copied: pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/afm/FontMetrics.java (from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/afm/FontMetric.java)
URL: http://svn.apache.org/viewvc/pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/afm/FontMetrics.java?p2=pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/afm/FontMetrics.java&p1=pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/afm/FontMetric.java&r1=1615712&r2=1618516&rev=1618516&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/afm/FontMetric.java (original)
+++ pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/afm/FontMetrics.java Sun Aug 17 20:02:18 2014
@@ -27,13 +27,11 @@ import java.util.Map;
 import org.apache.fontbox.util.BoundingBox;
 
 /**
- * This is the outermost AFM type.  This can be created by the afmparser with a valid
- * AFM document.
+ * This is the outermost AFM type.  This can be created by the afmparser with a valid AFM document.
  *
- * @author Ben Litchfield (ben@benlitchfield.com)
- * @version $Revision: 1.3 $
+ * @author Ben Litchfield
  */
-public class FontMetric
+public class FontMetrics
 {
     /**
      * This is the version of the FontMetrics.
@@ -80,7 +78,7 @@ public class FontMetric
     /**
      * Constructor.
      */
-    public FontMetric()
+    public FontMetrics()
     {
     }
 
@@ -90,10 +88,8 @@ public class FontMetric
      * @param name The character to get the width for.
      *
      * @return The width of the character.
-     *
-     * @throws IOException If this AFM file does not handle the character.
      */
-    public float getCharacterWidth( String name ) throws IOException
+    public float getCharacterWidth( String name )
     {
         float result = 0;
         CharMetric metric = charMetricsMap.get( name );
@@ -114,12 +110,9 @@ public class FontMetric
      * This will get the width of a character.
      *
      * @param name The character to get the width for.
-     *
      * @return The width of the character.
-     *
-     * @throws IOException If this AFM file does not handle the character.
      */
-    public float getCharacterHeight( String name ) throws IOException
+    public float getCharacterHeight( String name )
     {
         float result = 0;
         CharMetric metric = charMetricsMap.get( name );
@@ -151,7 +144,7 @@ public class FontMetric
      *
      * @throws IOException If this AFM file does not handle the character.
      */
-    public float getAverageCharacterWidth() throws IOException
+    public float getAverageCharacterWidth()
     {
         float average = 0;
         float totalWidths = 0;

Copied: pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java (from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFontROS.java)
URL: http://svn.apache.org/viewvc/pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java?p2=pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java&p1=pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFontROS.java&r1=1615712&r2=1618516&rev=1618516&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFontROS.java (original)
+++ pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java Sun Aug 17 20:02:18 2014
@@ -17,18 +17,21 @@
 
 package org.apache.fontbox.cff;
 
+import org.apache.fontbox.type1.Type1CharStringReader;
+
 import java.io.IOException;
+import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
 /**
- * This class represents a CID-Keyed CFF/Type2 Font.
+ * A Type 0 CIDFont represented in a CFF file.
  *
  * @author Villu Ruusmann
  * @author John Hewson
  */
-public class CFFFontROS extends CFFFont
+public class CFFCIDFont extends CFFFont
 {
     private String registry;
     private String ordering;
@@ -36,7 +39,12 @@ public class CFFFontROS extends CFFFont
 
     private List<Map<String, Object>> fontDictionaries = new LinkedList<Map<String,Object>>();
     private List<Map<String, Object>> privateDictionaries = new LinkedList<Map<String,Object>>();
-    private CIDKeyedFDSelect fdSelect = null;
+    private CIDKeyedFDSelect fdSelect;
+
+    private final Map<Integer, CIDKeyedType2CharString> charStringCache =
+            new HashMap<Integer, CIDKeyedType2CharString>();
+
+    private final PrivateType1CharStringReader reader = new PrivateType1CharStringReader();
 
     /**
      * Returns the registry value.
@@ -52,7 +60,7 @@ public class CFFFontROS extends CFFFont
      *
      * @param registry the registry to set
      */
-    public void setRegistry(String registry) 
+    void setRegistry(String registry)
     {
         this.registry = registry;
     }
@@ -72,7 +80,7 @@ public class CFFFontROS extends CFFFont
      *
      * @param ordering the ordering to set
      */
-    public void setOrdering(String ordering) 
+    void setOrdering(String ordering)
     {
         this.ordering = ordering;
     }
@@ -92,7 +100,7 @@ public class CFFFontROS extends CFFFont
      *
      * @param supplement the supplement to set
      */
-    public void setSupplement(int supplement) 
+    void setSupplement(int supplement)
     {
         this.supplement = supplement;
     }
@@ -112,7 +120,7 @@ public class CFFFontROS extends CFFFont
      *
      * @param fontDict the fontDict to set
      */
-    public void setFontDict(List<Map<String, Object>> fontDict)
+    void setFontDict(List<Map<String, Object>> fontDict)
     {
         this.fontDictionaries = fontDict;
     }
@@ -132,7 +140,7 @@ public class CFFFontROS extends CFFFont
      *
      * @param privDict the privDict to set
      */
-    public void setPrivDict(List<Map<String, Object>> privDict) 
+    void setPrivDict(List<Map<String, Object>> privDict)
     {
         this.privateDictionaries = privDict;
     }
@@ -152,68 +160,18 @@ public class CFFFontROS extends CFFFont
      *
      * @param fdSelect the fdSelect to set
      */
-    public void setFdSelect(CIDKeyedFDSelect fdSelect) 
+    void setFdSelect(CIDKeyedFDSelect fdSelect)
     {
         this.fdSelect = fdSelect;
     }
 
     /**
-     * {@inheritDoc}
-     */
-    protected Mapping createMapping(int code, int sid, String name, byte[] bytes)
-    {
-        Mapping mapping = new Mapping();
-        mapping.setCode(sid); // code = sid
-        mapping.setSID(sid);
-        mapping.setName(name);
-        mapping.setBytes(bytes);
-        return  mapping;
-    }
-
-    /**
-     * Returns the Width value of the given Glyph identifier
-     *
-     * @param cid CID
-     * @return -1 if the CID is missing from the Font.
-     * @throws IOException
-     */
-    public int getWidth(int cid) throws IOException
-    {
-        // search the right FDArray index in the FDSelect according to the Character identifier
-        // this index will be used to access the private dictionary which contains useful values
-        // to compute width.
-        int fdArrayIndex = this.fdSelect.getFd(cid);
-        if (fdArrayIndex == -1 && cid == 0 ) // notdef char
-        {
-            return super.getWidth(cid);
-        }
-        else if (fdArrayIndex == -1)
-        {
-            return 1000;
-        }
-
-        for (Mapping m : getMappings())
-        {
-            if (m.getSID() == cid)
-            {
-                Type1CharString charstring = m.getType1CharString();
-                return charstring.getWidth();
-            }
-        }
-        
-        // CID not found, return the notdef width
-        int nominalWidth = getNominalWidthX(cid);
-        int defaultWidth = getDefaultWidthX(cid);
-        return getNotDefWidth(defaultWidth, nominalWidth);
-    }
-
-    /**
      * Returns the defaultWidthX for the given CID.
      *
      * @param cid CID
      * @return defaultWidthX
      */
-    protected int getDefaultWidthX(int cid)
+    private int getDefaultWidthX(int cid)
     {
         int fdArrayIndex = this.fdSelect.getFd(cid);
         if (fdArrayIndex == -1)
@@ -230,7 +188,7 @@ public class CFFFontROS extends CFFFont
      * @param cid CID
      * @return defaultWidthX
      */
-    protected int getNominalWidthX(int cid)
+    private int getNominalWidthX(int cid)
     {
         int fdArrayIndex = this.fdSelect.getFd(cid);
         if (fdArrayIndex == -1)
@@ -241,8 +199,7 @@ public class CFFFontROS extends CFFFont
         return privDict.containsKey("nominalWidthX") ? ((Number)privDict.get("nominalWidthX")).intValue() : 0;
     }
 
-    @Override
-    protected IndexData getLocalSubrIndex(int cid)
+    private IndexData getLocalSubrIndex(int cid)
     {
         int fdArrayIndex = this.fdSelect.getFd(cid);
         if (fdArrayIndex == -1)
@@ -252,4 +209,43 @@ public class CFFFontROS extends CFFFont
         Map<String, Object> privDict = this.privateDictionaries.get(fdArrayIndex);
         return (IndexData)privDict.get("Subrs");
     }
+
+    /**
+     * Returns the Type 2 charstring for the given CID.
+     *
+     * @param cid CID
+     * @throws IOException if the charstring could not be read
+     */
+    public CIDKeyedType2CharString getType2CharString(int cid) throws IOException
+    {
+        CIDKeyedType2CharString type2 = charStringCache.get(cid);
+        if (type2 == null)
+        {
+            int gid = charset.getGIDForCID(cid);
+
+            byte[] bytes = charStrings.get(gid);
+            if (bytes == null)
+            {
+                bytes = charStrings.get(0); // .notdef
+            }
+            Type2CharStringParser parser = new Type2CharStringParser(fontName, cid);
+            List<Object> type2seq = parser.parse(bytes, globalSubrIndex, getLocalSubrIndex(cid));
+            type2 = new CIDKeyedType2CharString(reader, fontName, cid, gid, type2seq, getDefaultWidthX(cid), getNominalWidthX(cid));
+            charStringCache.put(cid, type2);
+        }
+        return type2;
+    }
+
+    /**
+     * Private implementation of Type1CharStringReader, because only CFFType1Font can
+     * expose this publicly, as CIDFonts only support this for legacy 'seac' commands.
+     */
+    private class PrivateType1CharStringReader implements Type1CharStringReader
+    {
+        @Override
+        public Type1CharString getType1CharString(String name) throws IOException
+        {
+            return CFFCIDFont.this.getType2CharString(0); // .notdef
+        }
+    }
 }

Copied: pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java (from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/charset/CFFCharset.java)
URL: http://svn.apache.org/viewvc/pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java?p2=pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java&p1=pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/charset/CFFCharset.java&r1=1615712&r2=1618516&rev=1618516&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/charset/CFFCharset.java (original)
+++ pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java Sun Aug 17 20:02:18 2014
@@ -14,136 +14,145 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.fontbox.cff.charset;
+package org.apache.fontbox.cff;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
- * This is the superclass for all CFFFont charsets.
- * 
- * @author Villu Ruusmann
- * @version $Revision$
+ * A CFF charset. A charset is an array of SIDs/CIDs for all glyphs in the font.
+ *
+ * todo: split this into two? CFFCharsetType1 and CFFCharsetCID ?
+ *
+ * @author John Hewson
  */
 public abstract class CFFCharset
 {
-    private List<Entry> entries = new ArrayList<Entry>();
+    private final boolean isCIDFont;
+    private final Map<Integer, Integer> sidOrCidToGid = new HashMap<Integer, Integer>();
+    private final Map<Integer, Integer> gidToSid = new HashMap<Integer, Integer>();
+    private final Map<String, Integer> nameToSid = new HashMap<String, Integer>();
 
     /**
-     * Determines if the charset is font specific or not.
-     * @return if the charset is font specific
+     * Package-private constructor for use by subclasses.
+     *
+     * @param isCIDFont true if the parent font is a CIDFont
      */
-    public boolean isFontSpecific()
+    CFFCharset(boolean isCIDFont)
     {
-        return false;
+        this.isCIDFont = isCIDFont;
     }
 
     /**
-     * Returns the SID corresponding to the given name.
-     * @param name the given SID
-     * @return the corresponding SID
+     * Adds a new GID/SID/name combination to the charset.
+     *
+     * @param gid GID
+     * @param sid SID
      */
-    public int getSID(String name)
+    public void addSID(int gid, int sid, String name)
     {
-        for(Entry entry : this.entries)
+        if (isCIDFont)
         {
-            if((entry.entryName).equals(name))
-            {
-                return entry.entrySID;
-            }
+            throw new IllegalStateException("Not a Type 1-equivalent font");
         }
-        return -1;
+        sidOrCidToGid.put(sid, gid);
+        gidToSid.put(gid, sid);
+        nameToSid.put(name, sid);
     }
 
     /**
-     * Returns the name corresponding to the given SID.
-     * @param sid the given SID
-     * @return the corresponding name
+     * Adds a new GID/CID combination to the charset.
+     *
+     * @param gid GID
+     * @param cid CID
      */
-    public String getName(int sid)
+    public void addCID(int gid, int cid)
     {
-        for(Entry entry : this.entries)
+        if (!isCIDFont)
         {
-            if(entry.entrySID == sid)
-            {
-                return entry.entryName;
-            }
+            throw new IllegalStateException("Not a CIDFont");
         }
-        return null;
+        sidOrCidToGid.put(cid, gid);
     }
 
     /**
-     * Adds a new SID/name combination to the charset.
-     * @param sid the given SID
-     * @param name the given name
-     */
-    public void register(int sid, String name)
-    {
-        entries.add(new Entry(sid,name));
-    }
-
-    /**
-     * Add a single entry.
-     * @param entry the entry to be added
+     * Returns the SID for a given GID. SIDs are internal to the font and are not public.
+     *
+     * @param sid SID
+     * @return GID
      */
-    public void addEntry(Entry entry)
+    int getSIDForGID(int sid)
     {
-        entries.add(entry);
+        if (isCIDFont)
+        {
+            throw new IllegalStateException("Not a Type 1-equivalent font");
+        }
+        Integer gid = gidToSid.get(sid);
+        if (gid == null)
+        {
+            return 0;
+        }
+        return gid;
     }
 
     /**
-     * A list of all entries within this charset.
-     * @return a list of all entries
+     * Returns the GID for the given SID. SIDs are internal to the font and are not public.
+     *
+     * @param sid SID
+     * @return GID
      */
-    public List<Entry> getEntries()
+    int getGIDForSID(int sid)
     {
-        return entries;
+        if (isCIDFont)
+        {
+            throw new IllegalStateException("Not a Type 1-equivalent font");
+        }
+        Integer gid = sidOrCidToGid.get(sid);
+        if (gid == null)
+        {
+            return 0;
+        }
+        return gid;
     }
 
     /**
-     * This class represents a single SID/name mapping of the charset.
+     * Returns the GID for a given CID. Returns 0 if the CID is missing.
      *
+     * @param cid CID
+     * @return GID
      */
-    public static class Entry
+    public int getGIDForCID(int cid)
     {
-        private int entrySID;
-        private String entryName;
-
-        /**
-         * Create a new instance of Entry with the given values.
-         * @param sid the SID
-         * @param name the Name
-         */
-        protected Entry(int sid, String name) 
+        if (!isCIDFont)
         {
-            this.entrySID = sid;
-            this.entryName = name;
+            throw new IllegalStateException("Not a CIDFont");
         }
-
-        /**
-         * The SID of this entry.
-         * @return the SID
-         */
-        public int getSID()
+        Integer gid = sidOrCidToGid.get(cid);
+        if (gid == null)
         {
-            return entrySID;
+            return 0;
         }
+        return gid;
+    }
 
-        /**
-         * The Name of this entry.
-         * @return the name
-         */
-        public String getName()
+    /**
+     * Returns the SID for a given PostScript name, you would think this is not needed,
+     * but some fonts have glyphs beyond their encoding with charset SID names.
+     *
+     * @param name PostScript glyph name
+     * @return SID
+     */
+    int getSID(String name)
+    {
+        if (isCIDFont)
         {
-            return entryName;
+            throw new IllegalStateException("Not a Type 1-equivalent font");
         }
-        
-        /**
-         * {@inheritDoc}
-         */
-        public String toString()
+        Integer sid = nameToSid.get(name);
+        if (sid == null)
         {
-            return "[sid=" + entrySID + ", name=" + entryName + "]";
+            return 0;
         }
+        return sid;
     }
-}
\ No newline at end of file
+}

Copied: pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFEncoding.java (from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/encoding/CFFEncoding.java)
URL: http://svn.apache.org/viewvc/pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFEncoding.java?p2=pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFEncoding.java&p1=pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/encoding/CFFEncoding.java&r1=1615712&r2=1618516&rev=1618516&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/encoding/CFFEncoding.java (original)
+++ pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFEncoding.java Sun Aug 17 20:02:18 2014
@@ -14,63 +14,44 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.fontbox.cff.encoding;
+package org.apache.fontbox.cff;
 
-import java.util.ArrayList;
-import java.util.List;
+import org.apache.fontbox.encoding.Encoding;
+
+import java.util.HashMap;
+import java.util.Map;
 
 /**
- * This is the superclass for all CFFFont encodings.
- * 
- * @author Villu Ruusmann
- * @version $Revision$
+ * A CFF Type 1-equivalent Encoding. An encoding is an array of codes associated with some or all
+ * glyphs in a font
+ *
+ * @author John Hewson
  */
-public abstract class CFFEncoding
+public abstract class CFFEncoding extends Encoding
 {
-
-    private List<Entry> entries = new ArrayList<Entry>();
+    private final Map<Integer, String> codeToName = new HashMap<Integer, String>();
 
     /**
-     * Determines if the encoding is font specific or not.
-     * @return if the encoding is font specific
+     * Package-private constructor for subclasses.
      */
-    public boolean isFontSpecific()
+    CFFEncoding()
     {
-        return false;
-    }
-
-    /**
-     * Returns the code corresponding to the given SID.
-     * @param sid the given SID
-     * @return the corresponding code
-     */
-    public int getCode(int sid)
-    {
-        for(Entry entry : entries)
-        {
-            if(entry.entrySID == sid)
-            {
-                return entry.entryCode;
-            }
-        }
-        return -1;
     }
 
     /**
-     * Returns the SID corresponding to the given code.
-     * @param code the given code
-     * @return the corresponding SID
+     * Returns the name of the glyph for the given character code.
+     *
+     * @param code character code
+     * @return PostScript glyph name
      */
-    public int getSID(int code)
+    public String getName(int code)
     {
-        for(Entry entry : entries)
+        String name = codeToName.get(code);
+        if (name == null)
         {
-            if(entry.entryCode == code)
-            {
-                return entry.entrySID;
-            }
+            return ".notdef";
         }
-        return -1;
+        return name;
     }
 
     /**
@@ -78,73 +59,19 @@ public abstract class CFFEncoding
      * @param code the given code
      * @param sid the given SID
      */
-    public void register(int code, int sid)
+    public void add(int code, int sid, String name)
     {
-        entries.add(new Entry(code, sid));
+        codeToName.put(code, name);
+        addCharacterEncoding(code, name);
     }
 
     /**
-     * Add a single entry.
-     * @param entry the entry to be added
+     * For use by subclasses only.
      */
-    public void addEntry(Entry entry)
+    protected void add(int code, int sid)
     {
-        entries.add(entry);
-    }
-
-    /**
-     * A list of all entries within this encoding.
-     * @return a list of all entries
-     */
-    public List<Entry> getEntries()
-    {
-        return entries;
-    }
-
-    /**
-     * This class represents a single code/SID mapping of the encoding.
-     *
-     */
-    public static class Entry
-    {
-        private int entryCode;
-        private int entrySID;
-
-        /**
-         * Create a new instance of Entry with the given values.
-         * @param code the code
-         * @param sid the SID
-         */
-        protected Entry(int code, int sid)
-        {
-            this.entryCode = code;
-            this.entrySID = sid;
-        }
-
-        /**
-         * The code of the entry.
-         * @return the code
-         */
-        public int getCode()
-        {
-            return this.entryCode;
-        }
-
-        /**
-         * The SID of the entry.
-         * @return the SID
-         */
-        public int getSID()
-        {
-            return this.entrySID;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        public String toString()
-        {
-            return "[code=" + entryCode + ", sid=" + entrySID + "]";
-        }
+        String name = CFFStandardString.getName(sid);
+        codeToName.put(code, name);
+        addCharacterEncoding(code, name);
     }
-}
\ No newline at end of file
+}

Copied: pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertCharset.java (from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/charset/CFFExpertCharset.java)
URL: http://svn.apache.org/viewvc/pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertCharset.java?p2=pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertCharset.java&p1=pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/charset/CFFExpertCharset.java&r1=1615712&r2=1618516&rev=1618516&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/charset/CFFExpertCharset.java (original)
+++ pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertCharset.java Sun Aug 17 20:02:18 2014
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.fontbox.cff.charset;
+package org.apache.fontbox.cff;
 
 /**
  * This is specialized CFFCharset. It's used if the CharsetId of a font is set to 1.
@@ -27,6 +27,7 @@ public class CFFExpertCharset extends CF
 
     private CFFExpertCharset()
     {
+        super(false);
     }
 
     /**
@@ -42,170 +43,172 @@ public class CFFExpertCharset extends CF
 
     static
     {
-        INSTANCE.register(1, "space");
-        INSTANCE.register(13, "comma");
-        INSTANCE.register(14, "hyphen");
-        INSTANCE.register(15, "period");
-        INSTANCE.register(27, "colon");
-        INSTANCE.register(28, "semicolon");
-        INSTANCE.register(99, "fraction");
-        INSTANCE.register(109, "fi");
-        INSTANCE.register(110, "fl");
-        INSTANCE.register(150, "onesuperior");
-        INSTANCE.register(155, "onehalf");
-        INSTANCE.register(158, "onequarter");
-        INSTANCE.register(163, "threequarters");
-        INSTANCE.register(164, "twosuperior");
-        INSTANCE.register(169, "threesuperior");
-        INSTANCE.register(229, "exclamsmall");
-        INSTANCE.register(230, "Hungarumlautsmall");
-        INSTANCE.register(231, "dollaroldstyle");
-        INSTANCE.register(232, "dollarsuperior");
-        INSTANCE.register(233, "ampersandsmall");
-        INSTANCE.register(234, "Acutesmall");
-        INSTANCE.register(235, "parenleftsuperior");
-        INSTANCE.register(236, "parenrightsuperior");
-        INSTANCE.register(237, "twodotenleader");
-        INSTANCE.register(238, "onedotenleader");
-        INSTANCE.register(239, "zerooldstyle");
-        INSTANCE.register(240, "oneoldstyle");
-        INSTANCE.register(241, "twooldstyle");
-        INSTANCE.register(242, "threeoldstyle");
-        INSTANCE.register(243, "fouroldstyle");
-        INSTANCE.register(244, "fiveoldstyle");
-        INSTANCE.register(245, "sixoldstyle");
-        INSTANCE.register(246, "sevenoldstyle");
-        INSTANCE.register(247, "eightoldstyle");
-        INSTANCE.register(248, "nineoldstyle");
-        INSTANCE.register(249, "commasuperior");
-        INSTANCE.register(250, "threequartersemdash");
-        INSTANCE.register(251, "periodsuperior");
-        INSTANCE.register(252, "questionsmall");
-        INSTANCE.register(253, "asuperior");
-        INSTANCE.register(254, "bsuperior");
-        INSTANCE.register(255, "centsuperior");
-        INSTANCE.register(256, "dsuperior");
-        INSTANCE.register(257, "esuperior");
-        INSTANCE.register(258, "isuperior");
-        INSTANCE.register(259, "lsuperior");
-        INSTANCE.register(260, "msuperior");
-        INSTANCE.register(261, "nsuperior");
-        INSTANCE.register(262, "osuperior");
-        INSTANCE.register(263, "rsuperior");
-        INSTANCE.register(264, "ssuperior");
-        INSTANCE.register(265, "tsuperior");
-        INSTANCE.register(266, "ff");
-        INSTANCE.register(267, "ffi");
-        INSTANCE.register(268, "ffl");
-        INSTANCE.register(269, "parenleftinferior");
-        INSTANCE.register(270, "parenrightinferior");
-        INSTANCE.register(271, "Circumflexsmall");
-        INSTANCE.register(272, "hyphensuperior");
-        INSTANCE.register(273, "Gravesmall");
-        INSTANCE.register(274, "Asmall");
-        INSTANCE.register(275, "Bsmall");
-        INSTANCE.register(276, "Csmall");
-        INSTANCE.register(277, "Dsmall");
-        INSTANCE.register(278, "Esmall");
-        INSTANCE.register(279, "Fsmall");
-        INSTANCE.register(280, "Gsmall");
-        INSTANCE.register(281, "Hsmall");
-        INSTANCE.register(282, "Ismall");
-        INSTANCE.register(283, "Jsmall");
-        INSTANCE.register(284, "Ksmall");
-        INSTANCE.register(285, "Lsmall");
-        INSTANCE.register(286, "Msmall");
-        INSTANCE.register(287, "Nsmall");
-        INSTANCE.register(288, "Osmall");
-        INSTANCE.register(289, "Psmall");
-        INSTANCE.register(290, "Qsmall");
-        INSTANCE.register(291, "Rsmall");
-        INSTANCE.register(292, "Ssmall");
-        INSTANCE.register(293, "Tsmall");
-        INSTANCE.register(294, "Usmall");
-        INSTANCE.register(295, "Vsmall");
-        INSTANCE.register(296, "Wsmall");
-        INSTANCE.register(297, "Xsmall");
-        INSTANCE.register(298, "Ysmall");
-        INSTANCE.register(299, "Zsmall");
-        INSTANCE.register(300, "colonmonetary");
-        INSTANCE.register(301, "onefitted");
-        INSTANCE.register(302, "rupiah");
-        INSTANCE.register(303, "Tildesmall");
-        INSTANCE.register(304, "exclamdownsmall");
-        INSTANCE.register(305, "centoldstyle");
-        INSTANCE.register(306, "Lslashsmall");
-        INSTANCE.register(307, "Scaronsmall");
-        INSTANCE.register(308, "Zcaronsmall");
-        INSTANCE.register(309, "Dieresissmall");
-        INSTANCE.register(310, "Brevesmall");
-        INSTANCE.register(311, "Caronsmall");
-        INSTANCE.register(312, "Dotaccentsmall");
-        INSTANCE.register(313, "Macronsmall");
-        INSTANCE.register(314, "figuredash");
-        INSTANCE.register(315, "hypheninferior");
-        INSTANCE.register(316, "Ogoneksmall");
-        INSTANCE.register(317, "Ringsmall");
-        INSTANCE.register(318, "Cedillasmall");
-        INSTANCE.register(319, "questiondownsmall");
-        INSTANCE.register(320, "oneeighth");
-        INSTANCE.register(321, "threeeighths");
-        INSTANCE.register(322, "fiveeighths");
-        INSTANCE.register(323, "seveneighths");
-        INSTANCE.register(324, "onethird");
-        INSTANCE.register(325, "twothirds");
-        INSTANCE.register(326, "zerosuperior");
-        INSTANCE.register(327, "foursuperior");
-        INSTANCE.register(328, "fivesuperior");
-        INSTANCE.register(329, "sixsuperior");
-        INSTANCE.register(330, "sevensuperior");
-        INSTANCE.register(331, "eightsuperior");
-        INSTANCE.register(332, "ninesuperior");
-        INSTANCE.register(333, "zeroinferior");
-        INSTANCE.register(334, "oneinferior");
-        INSTANCE.register(335, "twoinferior");
-        INSTANCE.register(336, "threeinferior");
-        INSTANCE.register(337, "fourinferior");
-        INSTANCE.register(338, "fiveinferior");
-        INSTANCE.register(339, "sixinferior");
-        INSTANCE.register(340, "seveninferior");
-        INSTANCE.register(341, "eightinferior");
-        INSTANCE.register(342, "nineinferior");
-        INSTANCE.register(343, "centinferior");
-        INSTANCE.register(344, "dollarinferior");
-        INSTANCE.register(345, "periodinferior");
-        INSTANCE.register(346, "commainferior");
-        INSTANCE.register(347, "Agravesmall");
-        INSTANCE.register(348, "Aacutesmall");
-        INSTANCE.register(349, "Acircumflexsmall");
-        INSTANCE.register(350, "Atildesmall");
-        INSTANCE.register(351, "Adieresissmall");
-        INSTANCE.register(352, "Aringsmall");
-        INSTANCE.register(353, "AEsmall");
-        INSTANCE.register(354, "Ccedillasmall");
-        INSTANCE.register(355, "Egravesmall");
-        INSTANCE.register(356, "Eacutesmall");
-        INSTANCE.register(357, "Ecircumflexsmall");
-        INSTANCE.register(358, "Edieresissmall");
-        INSTANCE.register(359, "Igravesmall");
-        INSTANCE.register(360, "Iacutesmall");
-        INSTANCE.register(361, "Icircumflexsmall");
-        INSTANCE.register(362, "Idieresissmall");
-        INSTANCE.register(363, "Ethsmall");
-        INSTANCE.register(364, "Ntildesmall");
-        INSTANCE.register(365, "Ogravesmall");
-        INSTANCE.register(366, "Oacutesmall");
-        INSTANCE.register(367, "Ocircumflexsmall");
-        INSTANCE.register(368, "Otildesmall");
-        INSTANCE.register(369, "Odieresissmall");
-        INSTANCE.register(370, "OEsmall");
-        INSTANCE.register(371, "Oslashsmall");
-        INSTANCE.register(372, "Ugravesmall");
-        INSTANCE.register(373, "Uacutesmall");
-        INSTANCE.register(374, "Ucircumflexsmall");
-        INSTANCE.register(375, "Udieresissmall");
-        INSTANCE.register(376, "Yacutesmall");
-        INSTANCE.register(377, "Thornsmall");
-        INSTANCE.register(378, "Ydieresissmall");
+        int gid = 0;
+        INSTANCE.addSID(gid++, 0, ".notdef");
+        INSTANCE.addSID(gid++, 1, "space");
+        INSTANCE.addSID(gid++, 229, "exclamsmall");
+        INSTANCE.addSID(gid++, 230, "Hungarumlautsmall");
+        INSTANCE.addSID(gid++, 231, "dollaroldstyle");
+        INSTANCE.addSID(gid++, 232, "dollarsuperior");
+        INSTANCE.addSID(gid++, 233, "ampersandsmall");
+        INSTANCE.addSID(gid++, 234, "Acutesmall");
+        INSTANCE.addSID(gid++, 235, "parenleftsuperior");
+        INSTANCE.addSID(gid++, 236, "parenrightsuperior");
+        INSTANCE.addSID(gid++, 237, "twodotenleader");
+        INSTANCE.addSID(gid++, 238, "onedotenleader");
+        INSTANCE.addSID(gid++, 13, "comma");
+        INSTANCE.addSID(gid++, 14, "hyphen");
+        INSTANCE.addSID(gid++, 15, "period");
+        INSTANCE.addSID(gid++, 99, "fraction");
+        INSTANCE.addSID(gid++, 239, "zerooldstyle");
+        INSTANCE.addSID(gid++, 240, "oneoldstyle");
+        INSTANCE.addSID(gid++, 241, "twooldstyle");
+        INSTANCE.addSID(gid++, 242, "threeoldstyle");
+        INSTANCE.addSID(gid++, 243, "fouroldstyle");
+        INSTANCE.addSID(gid++, 244, "fiveoldstyle");
+        INSTANCE.addSID(gid++, 245, "sixoldstyle");
+        INSTANCE.addSID(gid++, 246, "sevenoldstyle");
+        INSTANCE.addSID(gid++, 247, "eightoldstyle");
+        INSTANCE.addSID(gid++, 248, "nineoldstyle");
+        INSTANCE.addSID(gid++, 27, "colon");
+        INSTANCE.addSID(gid++, 28, "semicolon");
+        INSTANCE.addSID(gid++, 249, "commasuperior");
+        INSTANCE.addSID(gid++, 250, "threequartersemdash");
+        INSTANCE.addSID(gid++, 251, "periodsuperior");
+        INSTANCE.addSID(gid++, 252, "questionsmall");
+        INSTANCE.addSID(gid++, 253, "asuperior");
+        INSTANCE.addSID(gid++, 254, "bsuperior");
+        INSTANCE.addSID(gid++, 255, "centsuperior");
+        INSTANCE.addSID(gid++, 256, "dsuperior");
+        INSTANCE.addSID(gid++, 257, "esuperior");
+        INSTANCE.addSID(gid++, 258, "isuperior");
+        INSTANCE.addSID(gid++, 259, "lsuperior");
+        INSTANCE.addSID(gid++, 260, "msuperior");
+        INSTANCE.addSID(gid++, 261, "nsuperior");
+        INSTANCE.addSID(gid++, 262, "osuperior");
+        INSTANCE.addSID(gid++, 263, "rsuperior");
+        INSTANCE.addSID(gid++, 264, "ssuperior");
+        INSTANCE.addSID(gid++, 265, "tsuperior");
+        INSTANCE.addSID(gid++, 266, "ff");
+        INSTANCE.addSID(gid++, 109, "fi");
+        INSTANCE.addSID(gid++, 110, "fl");
+        INSTANCE.addSID(gid++, 267, "ffi");
+        INSTANCE.addSID(gid++, 268, "ffl");
+        INSTANCE.addSID(gid++, 269, "parenleftinferior");
+        INSTANCE.addSID(gid++, 270, "parenrightinferior");
+        INSTANCE.addSID(gid++, 271, "Circumflexsmall");
+        INSTANCE.addSID(gid++, 272, "hyphensuperior");
+        INSTANCE.addSID(gid++, 273, "Gravesmall");
+        INSTANCE.addSID(gid++, 274, "Asmall");
+        INSTANCE.addSID(gid++, 275, "Bsmall");
+        INSTANCE.addSID(gid++, 276, "Csmall");
+        INSTANCE.addSID(gid++, 277, "Dsmall");
+        INSTANCE.addSID(gid++, 278, "Esmall");
+        INSTANCE.addSID(gid++, 279, "Fsmall");
+        INSTANCE.addSID(gid++, 280, "Gsmall");
+        INSTANCE.addSID(gid++, 281, "Hsmall");
+        INSTANCE.addSID(gid++, 282, "Ismall");
+        INSTANCE.addSID(gid++, 283, "Jsmall");
+        INSTANCE.addSID(gid++, 284, "Ksmall");
+        INSTANCE.addSID(gid++, 285, "Lsmall");
+        INSTANCE.addSID(gid++, 286, "Msmall");
+        INSTANCE.addSID(gid++, 287, "Nsmall");
+        INSTANCE.addSID(gid++, 288, "Osmall");
+        INSTANCE.addSID(gid++, 289, "Psmall");
+        INSTANCE.addSID(gid++, 290, "Qsmall");
+        INSTANCE.addSID(gid++, 291, "Rsmall");
+        INSTANCE.addSID(gid++, 292, "Ssmall");
+        INSTANCE.addSID(gid++, 293, "Tsmall");
+        INSTANCE.addSID(gid++, 294, "Usmall");
+        INSTANCE.addSID(gid++, 295, "Vsmall");
+        INSTANCE.addSID(gid++, 296, "Wsmall");
+        INSTANCE.addSID(gid++, 297, "Xsmall");
+        INSTANCE.addSID(gid++, 298, "Ysmall");
+        INSTANCE.addSID(gid++, 299, "Zsmall");
+        INSTANCE.addSID(gid++, 300, "colonmonetary");
+        INSTANCE.addSID(gid++, 301, "onefitted");
+        INSTANCE.addSID(gid++, 302, "rupiah");
+        INSTANCE.addSID(gid++, 303, "Tildesmall");
+        INSTANCE.addSID(gid++, 304, "exclamdownsmall");
+        INSTANCE.addSID(gid++, 305, "centoldstyle");
+        INSTANCE.addSID(gid++, 306, "Lslashsmall");
+        INSTANCE.addSID(gid++, 307, "Scaronsmall");
+        INSTANCE.addSID(gid++, 308, "Zcaronsmall");
+        INSTANCE.addSID(gid++, 309, "Dieresissmall");
+        INSTANCE.addSID(gid++, 310, "Brevesmall");
+        INSTANCE.addSID(gid++, 311, "Caronsmall");
+        INSTANCE.addSID(gid++, 312, "Dotaccentsmall");
+        INSTANCE.addSID(gid++, 313, "Macronsmall");
+        INSTANCE.addSID(gid++, 314, "figuredash");
+        INSTANCE.addSID(gid++, 315, "hypheninferior");
+        INSTANCE.addSID(gid++, 316, "Ogoneksmall");
+        INSTANCE.addSID(gid++, 317, "Ringsmall");
+        INSTANCE.addSID(gid++, 318, "Cedillasmall");
+        INSTANCE.addSID(gid++, 158, "onequarter");
+        INSTANCE.addSID(gid++, 155, "onehalf");
+        INSTANCE.addSID(gid++, 163, "threequarters");
+        INSTANCE.addSID(gid++, 319, "questiondownsmall");
+        INSTANCE.addSID(gid++, 320, "oneeighth");
+        INSTANCE.addSID(gid++, 321, "threeeighths");
+        INSTANCE.addSID(gid++, 322, "fiveeighths");
+        INSTANCE.addSID(gid++, 323, "seveneighths");
+        INSTANCE.addSID(gid++, 324, "onethird");
+        INSTANCE.addSID(gid++, 325, "twothirds");
+        INSTANCE.addSID(gid++, 326, "zerosuperior");
+        INSTANCE.addSID(gid++, 150, "onesuperior");
+        INSTANCE.addSID(gid++, 164, "twosuperior");
+        INSTANCE.addSID(gid++, 169, "threesuperior");
+        INSTANCE.addSID(gid++, 327, "foursuperior");
+        INSTANCE.addSID(gid++, 328, "fivesuperior");
+        INSTANCE.addSID(gid++, 329, "sixsuperior");
+        INSTANCE.addSID(gid++, 330, "sevensuperior");
+        INSTANCE.addSID(gid++, 331, "eightsuperior");
+        INSTANCE.addSID(gid++, 332, "ninesuperior");
+        INSTANCE.addSID(gid++, 333, "zeroinferior");
+        INSTANCE.addSID(gid++, 334, "oneinferior");
+        INSTANCE.addSID(gid++, 335, "twoinferior");
+        INSTANCE.addSID(gid++, 336, "threeinferior");
+        INSTANCE.addSID(gid++, 337, "fourinferior");
+        INSTANCE.addSID(gid++, 338, "fiveinferior");
+        INSTANCE.addSID(gid++, 339, "sixinferior");
+        INSTANCE.addSID(gid++, 340, "seveninferior");
+        INSTANCE.addSID(gid++, 341, "eightinferior");
+        INSTANCE.addSID(gid++, 342, "nineinferior");
+        INSTANCE.addSID(gid++, 343, "centinferior");
+        INSTANCE.addSID(gid++, 344, "dollarinferior");
+        INSTANCE.addSID(gid++, 345, "periodinferior");
+        INSTANCE.addSID(gid++, 346, "commainferior");
+        INSTANCE.addSID(gid++, 347, "Agravesmall");
+        INSTANCE.addSID(gid++, 348, "Aacutesmall");
+        INSTANCE.addSID(gid++, 349, "Acircumflexsmall");
+        INSTANCE.addSID(gid++, 350, "Atildesmall");
+        INSTANCE.addSID(gid++, 351, "Adieresissmall");
+        INSTANCE.addSID(gid++, 352, "Aringsmall");
+        INSTANCE.addSID(gid++, 353, "AEsmall");
+        INSTANCE.addSID(gid++, 354, "Ccedillasmall");
+        INSTANCE.addSID(gid++, 355, "Egravesmall");
+        INSTANCE.addSID(gid++, 356, "Eacutesmall");
+        INSTANCE.addSID(gid++, 357, "Ecircumflexsmall");
+        INSTANCE.addSID(gid++, 358, "Edieresissmall");
+        INSTANCE.addSID(gid++, 359, "Igravesmall");
+        INSTANCE.addSID(gid++, 360, "Iacutesmall");
+        INSTANCE.addSID(gid++, 361, "Icircumflexsmall");
+        INSTANCE.addSID(gid++, 362, "Idieresissmall");
+        INSTANCE.addSID(gid++, 363, "Ethsmall");
+        INSTANCE.addSID(gid++, 364, "Ntildesmall");
+        INSTANCE.addSID(gid++, 365, "Ogravesmall");
+        INSTANCE.addSID(gid++, 366, "Oacutesmall");
+        INSTANCE.addSID(gid++, 367, "Ocircumflexsmall");
+        INSTANCE.addSID(gid++, 368, "Otildesmall");
+        INSTANCE.addSID(gid++, 369, "Odieresissmall");
+        INSTANCE.addSID(gid++, 370, "OEsmall");
+        INSTANCE.addSID(gid++, 371, "Oslashsmall");
+        INSTANCE.addSID(gid++, 372, "Ugravesmall");
+        INSTANCE.addSID(gid++, 373, "Uacutesmall");
+        INSTANCE.addSID(gid++, 374, "Ucircumflexsmall");
+        INSTANCE.addSID(gid++, 375, "Udieresissmall");
+        INSTANCE.addSID(gid++, 376, "Yacutesmall");
+        INSTANCE.addSID(gid++, 377, "Thornsmall");
+        INSTANCE.addSID(gid++, 378, "Ydieresissmall");
     }
 }
\ No newline at end of file

Copied: pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertEncoding.java (from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/encoding/CFFExpertEncoding.java)
URL: http://svn.apache.org/viewvc/pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertEncoding.java?p2=pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertEncoding.java&p1=pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/encoding/CFFExpertEncoding.java&r1=1615712&r2=1618516&rev=1618516&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/encoding/CFFExpertEncoding.java (original)
+++ pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertEncoding.java Sun Aug 17 20:02:18 2014
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.fontbox.cff.encoding;
+package org.apache.fontbox.cff;
 
 /**
  * This is specialized CFFEncoding. It's used if the EncodingId of a font is set to 1.
@@ -42,261 +42,261 @@ public class CFFExpertEncoding extends C
 
     static
     {
-        INSTANCE.register(0, 0);
-        INSTANCE.register(1, 0);
-        INSTANCE.register(2, 0);
-        INSTANCE.register(3, 0);
-        INSTANCE.register(4, 0);
-        INSTANCE.register(5, 0);
-        INSTANCE.register(6, 0);
-        INSTANCE.register(7, 0);
-        INSTANCE.register(8, 0);
-        INSTANCE.register(9, 0);
-        INSTANCE.register(10, 0);
-        INSTANCE.register(11, 0);
-        INSTANCE.register(12, 0);
-        INSTANCE.register(13, 0);
-        INSTANCE.register(14, 0);
-        INSTANCE.register(15, 0);
-        INSTANCE.register(16, 0);
-        INSTANCE.register(17, 0);
-        INSTANCE.register(18, 0);
-        INSTANCE.register(19, 0);
-        INSTANCE.register(20, 0);
-        INSTANCE.register(21, 0);
-        INSTANCE.register(22, 0);
-        INSTANCE.register(23, 0);
-        INSTANCE.register(24, 0);
-        INSTANCE.register(25, 0);
-        INSTANCE.register(26, 0);
-        INSTANCE.register(27, 0);
-        INSTANCE.register(28, 0);
-        INSTANCE.register(29, 0);
-        INSTANCE.register(30, 0);
-        INSTANCE.register(31, 0);
-        INSTANCE.register(32, 1);
-        INSTANCE.register(33, 229);
-        INSTANCE.register(34, 230);
-        INSTANCE.register(35, 0);
-        INSTANCE.register(36, 231);
-        INSTANCE.register(37, 232);
-        INSTANCE.register(38, 233);
-        INSTANCE.register(39, 234);
-        INSTANCE.register(40, 235);
-        INSTANCE.register(41, 236);
-        INSTANCE.register(42, 237);
-        INSTANCE.register(43, 238);
-        INSTANCE.register(44, 13);
-        INSTANCE.register(45, 14);
-        INSTANCE.register(46, 15);
-        INSTANCE.register(47, 99);
-        INSTANCE.register(48, 239);
-        INSTANCE.register(49, 240);
-        INSTANCE.register(50, 241);
-        INSTANCE.register(51, 242);
-        INSTANCE.register(52, 243);
-        INSTANCE.register(53, 244);
-        INSTANCE.register(54, 245);
-        INSTANCE.register(55, 246);
-        INSTANCE.register(56, 247);
-        INSTANCE.register(57, 248);
-        INSTANCE.register(58, 27);
-        INSTANCE.register(59, 28);
-        INSTANCE.register(60, 249);
-        INSTANCE.register(61, 250);
-        INSTANCE.register(62, 251);
-        INSTANCE.register(63, 252);
-        INSTANCE.register(64, 0);
-        INSTANCE.register(65, 253);
-        INSTANCE.register(66, 254);
-        INSTANCE.register(67, 255);
-        INSTANCE.register(68, 256);
-        INSTANCE.register(69, 257);
-        INSTANCE.register(70, 0);
-        INSTANCE.register(71, 0);
-        INSTANCE.register(72, 0);
-        INSTANCE.register(73, 258);
-        INSTANCE.register(74, 0);
-        INSTANCE.register(75, 0);
-        INSTANCE.register(76, 259);
-        INSTANCE.register(77, 260);
-        INSTANCE.register(78, 261);
-        INSTANCE.register(79, 262);
-        INSTANCE.register(80, 0);
-        INSTANCE.register(81, 0);
-        INSTANCE.register(82, 263);
-        INSTANCE.register(83, 264);
-        INSTANCE.register(84, 265);
-        INSTANCE.register(85, 0);
-        INSTANCE.register(86, 266);
-        INSTANCE.register(87, 109);
-        INSTANCE.register(88, 110);
-        INSTANCE.register(89, 267);
-        INSTANCE.register(90, 268);
-        INSTANCE.register(91, 269);
-        INSTANCE.register(92, 0);
-        INSTANCE.register(93, 270);
-        INSTANCE.register(94, 271);
-        INSTANCE.register(95, 272);
-        INSTANCE.register(96, 273);
-        INSTANCE.register(97, 274);
-        INSTANCE.register(98, 275);
-        INSTANCE.register(99, 276);
-        INSTANCE.register(100, 277);
-        INSTANCE.register(101, 278);
-        INSTANCE.register(102, 279);
-        INSTANCE.register(103, 280);
-        INSTANCE.register(104, 281);
-        INSTANCE.register(105, 282);
-        INSTANCE.register(106, 283);
-        INSTANCE.register(107, 284);
-        INSTANCE.register(108, 285);
-        INSTANCE.register(109, 286);
-        INSTANCE.register(110, 287);
-        INSTANCE.register(111, 288);
-        INSTANCE.register(112, 289);
-        INSTANCE.register(113, 290);
-        INSTANCE.register(114, 291);
-        INSTANCE.register(115, 292);
-        INSTANCE.register(116, 293);
-        INSTANCE.register(117, 294);
-        INSTANCE.register(118, 295);
-        INSTANCE.register(119, 296);
-        INSTANCE.register(120, 297);
-        INSTANCE.register(121, 298);
-        INSTANCE.register(122, 299);
-        INSTANCE.register(123, 300);
-        INSTANCE.register(124, 301);
-        INSTANCE.register(125, 302);
-        INSTANCE.register(126, 303);
-        INSTANCE.register(127, 0);
-        INSTANCE.register(128, 0);
-        INSTANCE.register(129, 0);
-        INSTANCE.register(130, 0);
-        INSTANCE.register(131, 0);
-        INSTANCE.register(132, 0);
-        INSTANCE.register(133, 0);
-        INSTANCE.register(134, 0);
-        INSTANCE.register(135, 0);
-        INSTANCE.register(136, 0);
-        INSTANCE.register(137, 0);
-        INSTANCE.register(138, 0);
-        INSTANCE.register(139, 0);
-        INSTANCE.register(140, 0);
-        INSTANCE.register(141, 0);
-        INSTANCE.register(142, 0);
-        INSTANCE.register(143, 0);
-        INSTANCE.register(144, 0);
-        INSTANCE.register(145, 0);
-        INSTANCE.register(146, 0);
-        INSTANCE.register(147, 0);
-        INSTANCE.register(148, 0);
-        INSTANCE.register(149, 0);
-        INSTANCE.register(150, 0);
-        INSTANCE.register(151, 0);
-        INSTANCE.register(152, 0);
-        INSTANCE.register(153, 0);
-        INSTANCE.register(154, 0);
-        INSTANCE.register(155, 0);
-        INSTANCE.register(156, 0);
-        INSTANCE.register(157, 0);
-        INSTANCE.register(158, 0);
-        INSTANCE.register(159, 0);
-        INSTANCE.register(160, 0);
-        INSTANCE.register(161, 304);
-        INSTANCE.register(162, 305);
-        INSTANCE.register(163, 306);
-        INSTANCE.register(164, 0);
-        INSTANCE.register(165, 0);
-        INSTANCE.register(166, 307);
-        INSTANCE.register(167, 308);
-        INSTANCE.register(168, 309);
-        INSTANCE.register(169, 310);
-        INSTANCE.register(170, 311);
-        INSTANCE.register(171, 0);
-        INSTANCE.register(172, 312);
-        INSTANCE.register(173, 0);
-        INSTANCE.register(174, 0);
-        INSTANCE.register(175, 313);
-        INSTANCE.register(176, 0);
-        INSTANCE.register(177, 0);
-        INSTANCE.register(178, 314);
-        INSTANCE.register(179, 315);
-        INSTANCE.register(180, 0);
-        INSTANCE.register(181, 0);
-        INSTANCE.register(182, 316);
-        INSTANCE.register(183, 317);
-        INSTANCE.register(184, 318);
-        INSTANCE.register(185, 0);
-        INSTANCE.register(186, 0);
-        INSTANCE.register(187, 0);
-        INSTANCE.register(188, 158);
-        INSTANCE.register(189, 155);
-        INSTANCE.register(190, 163);
-        INSTANCE.register(191, 319);
-        INSTANCE.register(192, 320);
-        INSTANCE.register(193, 321);
-        INSTANCE.register(194, 322);
-        INSTANCE.register(195, 323);
-        INSTANCE.register(196, 324);
-        INSTANCE.register(197, 325);
-        INSTANCE.register(198, 0);
-        INSTANCE.register(199, 0);
-        INSTANCE.register(200, 326);
-        INSTANCE.register(201, 150);
-        INSTANCE.register(202, 164);
-        INSTANCE.register(203, 169);
-        INSTANCE.register(204, 327);
-        INSTANCE.register(205, 328);
-        INSTANCE.register(206, 329);
-        INSTANCE.register(207, 330);
-        INSTANCE.register(208, 331);
-        INSTANCE.register(209, 332);
-        INSTANCE.register(210, 333);
-        INSTANCE.register(211, 334);
-        INSTANCE.register(212, 335);
-        INSTANCE.register(213, 336);
-        INSTANCE.register(214, 337);
-        INSTANCE.register(215, 338);
-        INSTANCE.register(216, 339);
-        INSTANCE.register(217, 340);
-        INSTANCE.register(218, 341);
-        INSTANCE.register(219, 342);
-        INSTANCE.register(220, 343);
-        INSTANCE.register(221, 344);
-        INSTANCE.register(222, 345);
-        INSTANCE.register(223, 346);
-        INSTANCE.register(224, 347);
-        INSTANCE.register(225, 348);
-        INSTANCE.register(226, 349);
-        INSTANCE.register(227, 350);
-        INSTANCE.register(228, 351);
-        INSTANCE.register(229, 352);
-        INSTANCE.register(230, 353);
-        INSTANCE.register(231, 354);
-        INSTANCE.register(232, 355);
-        INSTANCE.register(233, 356);
-        INSTANCE.register(234, 357);
-        INSTANCE.register(235, 358);
-        INSTANCE.register(236, 359);
-        INSTANCE.register(237, 360);
-        INSTANCE.register(238, 361);
-        INSTANCE.register(239, 362);
-        INSTANCE.register(240, 363);
-        INSTANCE.register(241, 364);
-        INSTANCE.register(242, 365);
-        INSTANCE.register(243, 366);
-        INSTANCE.register(244, 367);
-        INSTANCE.register(245, 368);
-        INSTANCE.register(246, 369);
-        INSTANCE.register(247, 370);
-        INSTANCE.register(248, 371);
-        INSTANCE.register(249, 372);
-        INSTANCE.register(250, 373);
-        INSTANCE.register(251, 374);
-        INSTANCE.register(252, 375);
-        INSTANCE.register(253, 376);
-        INSTANCE.register(254, 377);
-        INSTANCE.register(255, 378);
+        INSTANCE.add(0, 0);
+        INSTANCE.add(1, 0);
+        INSTANCE.add(2, 0);
+        INSTANCE.add(3, 0);
+        INSTANCE.add(4, 0);
+        INSTANCE.add(5, 0);
+        INSTANCE.add(6, 0);
+        INSTANCE.add(7, 0);
+        INSTANCE.add(8, 0);
+        INSTANCE.add(9, 0);
+        INSTANCE.add(10, 0);
+        INSTANCE.add(11, 0);
+        INSTANCE.add(12, 0);
+        INSTANCE.add(13, 0);
+        INSTANCE.add(14, 0);
+        INSTANCE.add(15, 0);
+        INSTANCE.add(16, 0);
+        INSTANCE.add(17, 0);
+        INSTANCE.add(18, 0);
+        INSTANCE.add(19, 0);
+        INSTANCE.add(20, 0);
+        INSTANCE.add(21, 0);
+        INSTANCE.add(22, 0);
+        INSTANCE.add(23, 0);
+        INSTANCE.add(24, 0);
+        INSTANCE.add(25, 0);
+        INSTANCE.add(26, 0);
+        INSTANCE.add(27, 0);
+        INSTANCE.add(28, 0);
+        INSTANCE.add(29, 0);
+        INSTANCE.add(30, 0);
+        INSTANCE.add(31, 0);
+        INSTANCE.add(32, 1);
+        INSTANCE.add(33, 229);
+        INSTANCE.add(34, 230);
+        INSTANCE.add(35, 0);
+        INSTANCE.add(36, 231);
+        INSTANCE.add(37, 232);
+        INSTANCE.add(38, 233);
+        INSTANCE.add(39, 234);
+        INSTANCE.add(40, 235);
+        INSTANCE.add(41, 236);
+        INSTANCE.add(42, 237);
+        INSTANCE.add(43, 238);
+        INSTANCE.add(44, 13);
+        INSTANCE.add(45, 14);
+        INSTANCE.add(46, 15);
+        INSTANCE.add(47, 99);
+        INSTANCE.add(48, 239);
+        INSTANCE.add(49, 240);
+        INSTANCE.add(50, 241);
+        INSTANCE.add(51, 242);
+        INSTANCE.add(52, 243);
+        INSTANCE.add(53, 244);
+        INSTANCE.add(54, 245);
+        INSTANCE.add(55, 246);
+        INSTANCE.add(56, 247);
+        INSTANCE.add(57, 248);
+        INSTANCE.add(58, 27);
+        INSTANCE.add(59, 28);
+        INSTANCE.add(60, 249);
+        INSTANCE.add(61, 250);
+        INSTANCE.add(62, 251);
+        INSTANCE.add(63, 252);
+        INSTANCE.add(64, 0);
+        INSTANCE.add(65, 253);
+        INSTANCE.add(66, 254);
+        INSTANCE.add(67, 255);
+        INSTANCE.add(68, 256);
+        INSTANCE.add(69, 257);
+        INSTANCE.add(70, 0);
+        INSTANCE.add(71, 0);
+        INSTANCE.add(72, 0);
+        INSTANCE.add(73, 258);
+        INSTANCE.add(74, 0);
+        INSTANCE.add(75, 0);
+        INSTANCE.add(76, 259);
+        INSTANCE.add(77, 260);
+        INSTANCE.add(78, 261);
+        INSTANCE.add(79, 262);
+        INSTANCE.add(80, 0);
+        INSTANCE.add(81, 0);
+        INSTANCE.add(82, 263);
+        INSTANCE.add(83, 264);
+        INSTANCE.add(84, 265);
+        INSTANCE.add(85, 0);
+        INSTANCE.add(86, 266);
+        INSTANCE.add(87, 109);
+        INSTANCE.add(88, 110);
+        INSTANCE.add(89, 267);
+        INSTANCE.add(90, 268);
+        INSTANCE.add(91, 269);
+        INSTANCE.add(92, 0);
+        INSTANCE.add(93, 270);
+        INSTANCE.add(94, 271);
+        INSTANCE.add(95, 272);
+        INSTANCE.add(96, 273);
+        INSTANCE.add(97, 274);
+        INSTANCE.add(98, 275);
+        INSTANCE.add(99, 276);
+        INSTANCE.add(100, 277);
+        INSTANCE.add(101, 278);
+        INSTANCE.add(102, 279);
+        INSTANCE.add(103, 280);
+        INSTANCE.add(104, 281);
+        INSTANCE.add(105, 282);
+        INSTANCE.add(106, 283);
+        INSTANCE.add(107, 284);
+        INSTANCE.add(108, 285);
+        INSTANCE.add(109, 286);
+        INSTANCE.add(110, 287);
+        INSTANCE.add(111, 288);
+        INSTANCE.add(112, 289);
+        INSTANCE.add(113, 290);
+        INSTANCE.add(114, 291);
+        INSTANCE.add(115, 292);
+        INSTANCE.add(116, 293);
+        INSTANCE.add(117, 294);
+        INSTANCE.add(118, 295);
+        INSTANCE.add(119, 296);
+        INSTANCE.add(120, 297);
+        INSTANCE.add(121, 298);
+        INSTANCE.add(122, 299);
+        INSTANCE.add(123, 300);
+        INSTANCE.add(124, 301);
+        INSTANCE.add(125, 302);
+        INSTANCE.add(126, 303);
+        INSTANCE.add(127, 0);
+        INSTANCE.add(128, 0);
+        INSTANCE.add(129, 0);
+        INSTANCE.add(130, 0);
+        INSTANCE.add(131, 0);
+        INSTANCE.add(132, 0);
+        INSTANCE.add(133, 0);
+        INSTANCE.add(134, 0);
+        INSTANCE.add(135, 0);
+        INSTANCE.add(136, 0);
+        INSTANCE.add(137, 0);
+        INSTANCE.add(138, 0);
+        INSTANCE.add(139, 0);
+        INSTANCE.add(140, 0);
+        INSTANCE.add(141, 0);
+        INSTANCE.add(142, 0);
+        INSTANCE.add(143, 0);
+        INSTANCE.add(144, 0);
+        INSTANCE.add(145, 0);
+        INSTANCE.add(146, 0);
+        INSTANCE.add(147, 0);
+        INSTANCE.add(148, 0);
+        INSTANCE.add(149, 0);
+        INSTANCE.add(150, 0);
+        INSTANCE.add(151, 0);
+        INSTANCE.add(152, 0);
+        INSTANCE.add(153, 0);
+        INSTANCE.add(154, 0);
+        INSTANCE.add(155, 0);
+        INSTANCE.add(156, 0);
+        INSTANCE.add(157, 0);
+        INSTANCE.add(158, 0);
+        INSTANCE.add(159, 0);
+        INSTANCE.add(160, 0);
+        INSTANCE.add(161, 304);
+        INSTANCE.add(162, 305);
+        INSTANCE.add(163, 306);
+        INSTANCE.add(164, 0);
+        INSTANCE.add(165, 0);
+        INSTANCE.add(166, 307);
+        INSTANCE.add(167, 308);
+        INSTANCE.add(168, 309);
+        INSTANCE.add(169, 310);
+        INSTANCE.add(170, 311);
+        INSTANCE.add(171, 0);
+        INSTANCE.add(172, 312);
+        INSTANCE.add(173, 0);
+        INSTANCE.add(174, 0);
+        INSTANCE.add(175, 313);
+        INSTANCE.add(176, 0);
+        INSTANCE.add(177, 0);
+        INSTANCE.add(178, 314);
+        INSTANCE.add(179, 315);
+        INSTANCE.add(180, 0);
+        INSTANCE.add(181, 0);
+        INSTANCE.add(182, 316);
+        INSTANCE.add(183, 317);
+        INSTANCE.add(184, 318);
+        INSTANCE.add(185, 0);
+        INSTANCE.add(186, 0);
+        INSTANCE.add(187, 0);
+        INSTANCE.add(188, 158);
+        INSTANCE.add(189, 155);
+        INSTANCE.add(190, 163);
+        INSTANCE.add(191, 319);
+        INSTANCE.add(192, 320);
+        INSTANCE.add(193, 321);
+        INSTANCE.add(194, 322);
+        INSTANCE.add(195, 323);
+        INSTANCE.add(196, 324);
+        INSTANCE.add(197, 325);
+        INSTANCE.add(198, 0);
+        INSTANCE.add(199, 0);
+        INSTANCE.add(200, 326);
+        INSTANCE.add(201, 150);
+        INSTANCE.add(202, 164);
+        INSTANCE.add(203, 169);
+        INSTANCE.add(204, 327);
+        INSTANCE.add(205, 328);
+        INSTANCE.add(206, 329);
+        INSTANCE.add(207, 330);
+        INSTANCE.add(208, 331);
+        INSTANCE.add(209, 332);
+        INSTANCE.add(210, 333);
+        INSTANCE.add(211, 334);
+        INSTANCE.add(212, 335);
+        INSTANCE.add(213, 336);
+        INSTANCE.add(214, 337);
+        INSTANCE.add(215, 338);
+        INSTANCE.add(216, 339);
+        INSTANCE.add(217, 340);
+        INSTANCE.add(218, 341);
+        INSTANCE.add(219, 342);
+        INSTANCE.add(220, 343);
+        INSTANCE.add(221, 344);
+        INSTANCE.add(222, 345);
+        INSTANCE.add(223, 346);
+        INSTANCE.add(224, 347);
+        INSTANCE.add(225, 348);
+        INSTANCE.add(226, 349);
+        INSTANCE.add(227, 350);
+        INSTANCE.add(228, 351);
+        INSTANCE.add(229, 352);
+        INSTANCE.add(230, 353);
+        INSTANCE.add(231, 354);
+        INSTANCE.add(232, 355);
+        INSTANCE.add(233, 356);
+        INSTANCE.add(234, 357);
+        INSTANCE.add(235, 358);
+        INSTANCE.add(236, 359);
+        INSTANCE.add(237, 360);
+        INSTANCE.add(238, 361);
+        INSTANCE.add(239, 362);
+        INSTANCE.add(240, 363);
+        INSTANCE.add(241, 364);
+        INSTANCE.add(242, 365);
+        INSTANCE.add(243, 366);
+        INSTANCE.add(244, 367);
+        INSTANCE.add(245, 368);
+        INSTANCE.add(246, 369);
+        INSTANCE.add(247, 370);
+        INSTANCE.add(248, 371);
+        INSTANCE.add(249, 372);
+        INSTANCE.add(250, 373);
+        INSTANCE.add(251, 374);
+        INSTANCE.add(252, 375);
+        INSTANCE.add(253, 376);
+        INSTANCE.add(254, 377);
+        INSTANCE.add(255, 378);
     }
 }
\ No newline at end of file

Copied: pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertSubsetCharset.java (from r1615712, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/charset/CFFExpertSubsetCharset.java)
URL: http://svn.apache.org/viewvc/pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertSubsetCharset.java?p2=pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertSubsetCharset.java&p1=pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/charset/CFFExpertSubsetCharset.java&r1=1615712&r2=1618516&rev=1618516&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/charset/CFFExpertSubsetCharset.java (original)
+++ pdfbox/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertSubsetCharset.java Sun Aug 17 20:02:18 2014
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.fontbox.cff.charset;
+package org.apache.fontbox.cff;
 
 
 /**
@@ -28,6 +28,7 @@ public class CFFExpertSubsetCharset exte
 
     private CFFExpertSubsetCharset()
     {
+        super(false);
     }
 
     /**
@@ -43,91 +44,93 @@ public class CFFExpertSubsetCharset exte
 
     static
     {
-        INSTANCE.register(1, "space");
-        INSTANCE.register(13, "comma");
-        INSTANCE.register(14, "hyphen");
-        INSTANCE.register(15, "period");
-        INSTANCE.register(27, "colon");
-        INSTANCE.register(28, "semicolon");
-        INSTANCE.register(99, "fraction");
-        INSTANCE.register(109, "fi");
-        INSTANCE.register(110, "fl");
-        INSTANCE.register(150, "onesuperior");
-        INSTANCE.register(155, "onehalf");
-        INSTANCE.register(158, "onequarter");
-        INSTANCE.register(163, "threequarters");
-        INSTANCE.register(164, "twosuperior");
-        INSTANCE.register(169, "threesuperior");
-        INSTANCE.register(231, "dollaroldstyle");
-        INSTANCE.register(232, "dollarsuperior");
-        INSTANCE.register(235, "parenleftsuperior");
-        INSTANCE.register(236, "parenrightsuperior");
-        INSTANCE.register(237, "twodotenleader");
-        INSTANCE.register(238, "onedotenleader");
-        INSTANCE.register(239, "zerooldstyle");
-        INSTANCE.register(240, "oneoldstyle");
-        INSTANCE.register(241, "twooldstyle");
-        INSTANCE.register(242, "threeoldstyle");
-        INSTANCE.register(243, "fouroldstyle");
-        INSTANCE.register(244, "fiveoldstyle");
-        INSTANCE.register(245, "sixoldstyle");
-        INSTANCE.register(246, "sevenoldstyle");
-        INSTANCE.register(247, "eightoldstyle");
-        INSTANCE.register(248, "nineoldstyle");
-        INSTANCE.register(249, "commasuperior");
-        INSTANCE.register(250, "threequartersemdash");
-        INSTANCE.register(251, "periodsuperior");
-        INSTANCE.register(253, "asuperior");
-        INSTANCE.register(254, "bsuperior");
-        INSTANCE.register(255, "centsuperior");
-        INSTANCE.register(256, "dsuperior");
-        INSTANCE.register(257, "esuperior");
-        INSTANCE.register(258, "isuperior");
-        INSTANCE.register(259, "lsuperior");
-        INSTANCE.register(260, "msuperior");
-        INSTANCE.register(261, "nsuperior");
-        INSTANCE.register(262, "osuperior");
-        INSTANCE.register(263, "rsuperior");
-        INSTANCE.register(264, "ssuperior");
-        INSTANCE.register(265, "tsuperior");
-        INSTANCE.register(266, "ff");
-        INSTANCE.register(267, "ffi");
-        INSTANCE.register(268, "ffl");
-        INSTANCE.register(269, "parenleftinferior");
-        INSTANCE.register(270, "parenrightinferior");
-        INSTANCE.register(272, "hyphensuperior");
-        INSTANCE.register(300, "colonmonetary");
-        INSTANCE.register(301, "onefitted");
-        INSTANCE.register(302, "rupiah");
-        INSTANCE.register(305, "centoldstyle");
-        INSTANCE.register(314, "figuredash");
-        INSTANCE.register(315, "hypheninferior");
-        INSTANCE.register(320, "oneeighth");
-        INSTANCE.register(321, "threeeighths");
-        INSTANCE.register(322, "fiveeighths");
-        INSTANCE.register(323, "seveneighths");
-        INSTANCE.register(324, "onethird");
-        INSTANCE.register(325, "twothirds");
-        INSTANCE.register(326, "zerosuperior");
-        INSTANCE.register(327, "foursuperior");
-        INSTANCE.register(328, "fivesuperior");
-        INSTANCE.register(329, "sixsuperior");
-        INSTANCE.register(330, "sevensuperior");
-        INSTANCE.register(331, "eightsuperior");
-        INSTANCE.register(332, "ninesuperior");
-        INSTANCE.register(333, "zeroinferior");
-        INSTANCE.register(334, "oneinferior");
-        INSTANCE.register(335, "twoinferior");
-        INSTANCE.register(336, "threeinferior");
-        INSTANCE.register(337, "fourinferior");
-        INSTANCE.register(338, "fiveinferior");
-        INSTANCE.register(339, "sixinferior");
-        INSTANCE.register(340, "seveninferior");
-        INSTANCE.register(341, "eightinferior");
-        INSTANCE.register(342, "nineinferior");
-        INSTANCE.register(343, "centinferior");
-        INSTANCE.register(344, "dollarinferior");
-        INSTANCE.register(345, "periodinferior");
-        INSTANCE.register(346, "commainferior");
+        int gid = 0;
+        INSTANCE.addSID(gid++, 0, ".notdef");
+        INSTANCE.addSID(gid++, 1, "space");
+        INSTANCE.addSID(gid++, 231, "dollaroldstyle");
+        INSTANCE.addSID(gid++, 232, "dollarsuperior");
+        INSTANCE.addSID(gid++, 235, "parenleftsuperior");
+        INSTANCE.addSID(gid++, 236, "parenrightsuperior");
+        INSTANCE.addSID(gid++, 237, "twodotenleader");
+        INSTANCE.addSID(gid++, 238, "onedotenleader");
+        INSTANCE.addSID(gid++, 13, "comma");
+        INSTANCE.addSID(gid++, 14, "hyphen");
+        INSTANCE.addSID(gid++, 15, "period");
+        INSTANCE.addSID(gid++, 99, "fraction");
+        INSTANCE.addSID(gid++, 239, "zerooldstyle");
+        INSTANCE.addSID(gid++, 240, "oneoldstyle");
+        INSTANCE.addSID(gid++, 241, "twooldstyle");
+        INSTANCE.addSID(gid++, 242, "threeoldstyle");
+        INSTANCE.addSID(gid++, 243, "fouroldstyle");
+        INSTANCE.addSID(gid++, 244, "fiveoldstyle");
+        INSTANCE.addSID(gid++, 245, "sixoldstyle");
+        INSTANCE.addSID(gid++, 246, "sevenoldstyle");
+        INSTANCE.addSID(gid++, 247, "eightoldstyle");
+        INSTANCE.addSID(gid++, 248, "nineoldstyle");
+        INSTANCE.addSID(gid++, 27, "colon");
+        INSTANCE.addSID(gid++, 28, "semicolon");
+        INSTANCE.addSID(gid++, 249, "commasuperior");
+        INSTANCE.addSID(gid++, 250, "threequartersemdash");
+        INSTANCE.addSID(gid++, 251, "periodsuperior");
+        INSTANCE.addSID(gid++, 253, "asuperior");
+        INSTANCE.addSID(gid++, 254, "bsuperior");
+        INSTANCE.addSID(gid++, 255, "centsuperior");
+        INSTANCE.addSID(gid++, 256, "dsuperior");
+        INSTANCE.addSID(gid++, 257, "esuperior");
+        INSTANCE.addSID(gid++, 258, "isuperior");
+        INSTANCE.addSID(gid++, 259, "lsuperior");
+        INSTANCE.addSID(gid++, 260, "msuperior");
+        INSTANCE.addSID(gid++, 261, "nsuperior");
+        INSTANCE.addSID(gid++, 262, "osuperior");
+        INSTANCE.addSID(gid++, 263, "rsuperior");
+        INSTANCE.addSID(gid++, 264, "ssuperior");
+        INSTANCE.addSID(gid++, 265, "tsuperior");
+        INSTANCE.addSID(gid++, 266, "ff");
+        INSTANCE.addSID(gid++, 109, "fi");
+        INSTANCE.addSID(gid++, 110, "fl");
+        INSTANCE.addSID(gid++, 267, "ffi");
+        INSTANCE.addSID(gid++, 268, "ffl");
+        INSTANCE.addSID(gid++, 269, "parenleftinferior");
+        INSTANCE.addSID(gid++, 270, "parenrightinferior");
+        INSTANCE.addSID(gid++, 272, "hyphensuperior");
+        INSTANCE.addSID(gid++, 300, "colonmonetary");
+        INSTANCE.addSID(gid++, 301, "onefitted");
+        INSTANCE.addSID(gid++, 302, "rupiah");
+        INSTANCE.addSID(gid++, 305, "centoldstyle");
+        INSTANCE.addSID(gid++, 314, "figuredash");
+        INSTANCE.addSID(gid++, 315, "hypheninferior");
+        INSTANCE.addSID(gid++, 158, "onequarter");
+        INSTANCE.addSID(gid++, 155, "onehalf");
+        INSTANCE.addSID(gid++, 163, "threequarters");
+        INSTANCE.addSID(gid++, 320, "oneeighth");
+        INSTANCE.addSID(gid++, 321, "threeeighths");
+        INSTANCE.addSID(gid++, 322, "fiveeighths");
+        INSTANCE.addSID(gid++, 323, "seveneighths");
+        INSTANCE.addSID(gid++, 324, "onethird");
+        INSTANCE.addSID(gid++, 325, "twothirds");
+        INSTANCE.addSID(gid++, 326, "zerosuperior");
+        INSTANCE.addSID(gid++, 150, "onesuperior");
+        INSTANCE.addSID(gid++, 164, "twosuperior");
+        INSTANCE.addSID(gid++, 169, "threesuperior");
+        INSTANCE.addSID(gid++, 327, "foursuperior");
+        INSTANCE.addSID(gid++, 328, "fivesuperior");
+        INSTANCE.addSID(gid++, 329, "sixsuperior");
+        INSTANCE.addSID(gid++, 330, "sevensuperior");
+        INSTANCE.addSID(gid++, 331, "eightsuperior");
+        INSTANCE.addSID(gid++, 332, "ninesuperior");
+        INSTANCE.addSID(gid++, 333, "zeroinferior");
+        INSTANCE.addSID(gid++, 334, "oneinferior");
+        INSTANCE.addSID(gid++, 335, "twoinferior");
+        INSTANCE.addSID(gid++, 336, "threeinferior");
+        INSTANCE.addSID(gid++, 337, "fourinferior");
+        INSTANCE.addSID(gid++, 338, "fiveinferior");
+        INSTANCE.addSID(gid++, 339, "sixinferior");
+        INSTANCE.addSID(gid++, 340, "seveninferior");
+        INSTANCE.addSID(gid++, 341, "eightinferior");
+        INSTANCE.addSID(gid++, 342, "nineinferior");
+        INSTANCE.addSID(gid++, 343, "centinferior");
+        INSTANCE.addSID(gid++, 344, "dollarinferior");
+        INSTANCE.addSID(gid++, 345, "periodinferior");
+        INSTANCE.addSID(gid++, 346, "commainferior");
     }
 }
\ No newline at end of file