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");