You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ca...@apache.org on 2009/02/23 23:08:18 UTC

svn commit: r747160 - /incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/encoding/Encoding.java

Author: carrier
Date: Mon Feb 23 22:08:12 2009
New Revision: 747160

URL: http://svn.apache.org/viewvc?rev=747160&view=rev
Log:
Patch to add support for external glyphlist files (PDFBOX-431).  By Justin LeFebvre (justinl at basistech dot com)

Modified:
    incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/encoding/Encoding.java

Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/encoding/Encoding.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/encoding/Encoding.java?rev=747160&r1=747159&r2=747160&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/encoding/Encoding.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/encoding/Encoding.java Mon Feb 23 22:08:12 2009
@@ -17,20 +17,18 @@
 package org.apache.pdfbox.encoding;
 
 import java.io.BufferedReader;
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.io.IOException;
-
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.StringTokenizer;
+import java.io.File;
 
 import org.apache.pdfbox.cos.COSName;
-
-import org.apache.pdfbox.util.ResourceLoader;
-
 import org.apache.pdfbox.pdmodel.common.COSObjectable;
+import org.apache.pdfbox.util.ResourceLoader;
 
 /**
  * This is an interface to a text encoder.
@@ -40,8 +38,6 @@
  */
 public abstract class Encoding implements COSObjectable
 {
-
-
     /**
      * This is a mapping from a character code to a character name.
      */
@@ -56,10 +52,44 @@
 
     static
     {
+        //Loads the official Adobe Glyph List
+        loadGlyphList("Resources/glyphlist.txt");
+
+        // Load an external glyph list file that user can give as JVM property
+        String location = System.getProperty("glyphlist_ext");
+        if(location != null){
+            File external = new File(location);
+            if(external.exists()){
+                loadGlyphList(location);
+            }
+        }
+
+        NAME_TO_CHARACTER.put( COSName.getPDFName( ".notdef" ), "" );
+        NAME_TO_CHARACTER.put( COSName.getPDFName( "fi" ), "fi" );
+        NAME_TO_CHARACTER.put( COSName.getPDFName( "fl" ), "fl" );
+        NAME_TO_CHARACTER.put( COSName.getPDFName( "ffi" ), "ffi" );
+        NAME_TO_CHARACTER.put( COSName.getPDFName( "ff" ), "ff" );
+        NAME_TO_CHARACTER.put( COSName.getPDFName( "pi" ), "pi" );
+
+        Iterator keys = NAME_TO_CHARACTER.keySet().iterator();
+        while( keys.hasNext() )
+        {
+            Object key = keys.next();
+            Object value = NAME_TO_CHARACTER.get( key );
+            CHARACTER_TO_NAME.put( value, key );
+        }
+    }
+    
+    /**
+     * Loads a glyph list from a given location and populates the NAME_TO_CHARACTER hashmap
+     * for character lookups
+     * @param location - The string location of the glyphlist file 
+     */
+    private static void loadGlyphList(String location){
         BufferedReader glyphStream = null;
         try
         {
-            InputStream resource = ResourceLoader.loadResource( "Resources/glyphlist.txt" );
+            InputStream resource = ResourceLoader.loadResource( location );
             glyphStream = new BufferedReader( new InputStreamReader( resource ) );
             String line = null;
             while( (line = glyphStream.readLine()) != null )
@@ -82,7 +112,6 @@
                                 int characterCode = Integer.parseInt( tokenizer.nextToken(), 16 );
                                 value += (char)characterCode;
                             }
-
                             NAME_TO_CHARACTER.put( COSName.getPDFName( characterName ), value );
                         }
                         catch( NumberFormatException nfe )
@@ -112,23 +141,8 @@
 
             }
         }
-
-
-        NAME_TO_CHARACTER.put( COSName.getPDFName( ".notdef" ), "" );
-        NAME_TO_CHARACTER.put( COSName.getPDFName( "fi" ), "fi" );
-        NAME_TO_CHARACTER.put( COSName.getPDFName( "fl" ), "fl" );
-        NAME_TO_CHARACTER.put( COSName.getPDFName( "ffi" ), "ffi" );
-        NAME_TO_CHARACTER.put( COSName.getPDFName( "ff" ), "ff" );
-        NAME_TO_CHARACTER.put( COSName.getPDFName( "pi" ), "pi" );
-
-        Iterator keys = NAME_TO_CHARACTER.keySet().iterator();
-        while( keys.hasNext() )
-        {
-            Object key = keys.next();
-            Object value = NAME_TO_CHARACTER.get( key );
-            CHARACTER_TO_NAME.put( value, key );
-        }
     }
+    
 
 
     /**