You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2021/03/04 17:07:19 UTC

svn commit: r1887181 - in /pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/type1: Type1Lexer.java Type1Parser.java

Author: tilman
Date: Thu Mar  4 17:07:19 2021
New Revision: 1887181

URL: http://svn.apache.org/viewvc?rev=1887181&view=rev
Log:
PDFBOX-4892: performance improvements, as suggested by valerybokov

Modified:
    pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java
    pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java

Modified: pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java?rev=1887181&r1=1887180&r2=1887181&view=diff
==============================================================================
--- pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java (original)
+++ pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java Thu Mar  4 17:07:19 2021
@@ -366,12 +366,11 @@ class Type1Lexer
                 sb.append(c);
             }
         }
-        String regular = sb.toString();
-        if (regular.length() == 0)
+        if (sb.length() == 0)
         {
             return null;
         }
-        return regular;
+        return sb.toString();
     }
 
     /**

Modified: pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java?rev=1887181&r1=1887180&r2=1887181&view=diff
==============================================================================
--- pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java (original)
+++ pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java Thu Mar  4 17:07:19 2021
@@ -92,9 +92,9 @@ final class Type1Parser
             read(Token.LITERAL); // font name
             read(Token.NAME, "known");
             read(Token.START_PROC);
-            readProc();
+            readProcVoid();
             read(Token.START_PROC);
-            readProc();
+            readProcVoid();
             read(Token.NAME, "ifelse");
         }
 
@@ -433,10 +433,10 @@ final class Type1Parser
             read(Token.NAME, "known");
 
             read(Token.START_PROC);
-            readProc();
+            readProcVoid();
 
             read(Token.START_PROC);
-            readProc();
+            readProcVoid();
 
             read(Token.NAME, "ifelse");
 
@@ -488,6 +488,33 @@ final class Type1Parser
     }
 
     /**
+     * Reads a procedure but without returning anything.
+     */
+    private void readProcVoid() throws IOException
+    {
+        int openProc = 1;
+        while (true)
+        {
+            if (lexer.peekToken().getKind() == Token.START_PROC)
+            {
+                openProc++;
+            }
+
+            Token token = lexer.nextToken();
+
+            if (token.getKind() == Token.END_PROC)
+            {
+                openProc--;
+                if (openProc == 0)
+                {
+                    break;
+                }
+            }
+        }
+        readMaybe(Token.NAME, "executeonly");
+    }
+
+    /**
      * Parses the binary portion of a Type 1 font.
      */
     private void parseBinary(byte[] bytes) throws IOException
@@ -576,7 +603,7 @@ final class Type1Parser
             {
                 // /RD {string currentfile exch readstring pop} bind executeonly def
                 read(Token.START_PROC);
-                readProc();
+                readProcVoid();
                 readMaybe(Token.NAME, "bind");                
                 readMaybe(Token.NAME, "executeonly");                
                 read(Token.NAME, "def");