Package org.apache.fontbox.type1
Class Type1Parser
- java.lang.Object
-
- org.apache.fontbox.type1.Type1Parser
-
final class Type1Parser extends java.lang.ObjectParses an Adobe Type 1 (.pfb) font. It is used exclusively by Type1Font. The Type 1 font format is a free-text format which is somewhat difficult to parse. This is made worse by the fact that many Type 1 font files do not conform to the specification, especially those embedded in PDFs. This parser therefore tries to be as forgiving as possible.- See Also:
- "Adobe Type 1 Font Format, Adobe Systems (1999)"
-
-
Field Summary
Fields Modifier and Type Field Description private static intCHARSTRING_KEYprivate static intEEXEC_KEYprivate Type1Fontfontprivate Type1Lexerlexer
-
Constructor Summary
Constructors Constructor Description Type1Parser()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private java.util.List<java.lang.Number>arrayToNumbers(java.util.List<Token> value)Extracts values from an array as numbers.private byte[]decrypt(byte[] cipherBytes, int r, int n)Type 1 Decryption (eexec, charstring).private byte[]hexToBinary(byte[] bytes)private booleanisBinary(byte[] bytes)Type1Fontparse(byte[] segment1, byte[] segment2)Parses a Type 1 font and returns a Type1Font class which represents it.private voidparseASCII(byte[] bytes)Parses the ASCII portion of a Type 1 font.private voidparseBinary(byte[] bytes)Parses the binary portion of a Type 1 font.private Tokenread(Token.Kind kind)Reads the next token and throws an exception if it is not of the given kind.private voidread(Token.Kind kind, java.lang.String name)Reads the next token and throws an exception if it is not of the given kind and does not have the given value.private voidreadCharStrings(int lenIV)Reads the /CharStrings dictionary.private voidreadDef()Reads the sequence "noaccess def" or equivalent.private java.util.List<Token>readDictValue()Reads a simple value from a dictionary.private voidreadEncoding()private voidreadFontInfo(java.util.Map<java.lang.String,java.util.List<Token>> fontInfo)Extracts values from the /FontInfo dictionary.private TokenreadMaybe(Token.Kind kind, java.lang.String name)Reads the next token if and only if it is of the given kind and has the given value.private voidreadOtherSubrs()private voidreadPostScriptWrapper(java.util.List<Token> value)private voidreadPrivate(java.lang.String key, java.util.List<Token> value)Extracts values from the /Private dictionary.private java.util.List<Token>readProc()Reads a procedure.private voidreadProcVoid()Reads a procedure but without returning anything.private voidreadPut()Reads the sequence "noaccess put" or equivalent.private java.util.Map<java.lang.String,java.util.List<Token>>readSimpleDict()Reads a dictionary whose values are simple, i.e., do not contain nested dictionaries.private voidreadSimpleValue(java.lang.String key)private voidreadSubrs(int lenIV)Reads the /Subrs array.private java.util.List<Token>readValue()Reads a simple value.
-
-
-
Field Detail
-
EEXEC_KEY
private static final int EEXEC_KEY
- See Also:
- Constant Field Values
-
CHARSTRING_KEY
private static final int CHARSTRING_KEY
- See Also:
- Constant Field Values
-
lexer
private Type1Lexer lexer
-
font
private Type1Font font
-
-
Method Detail
-
parse
public Type1Font parse(byte[] segment1, byte[] segment2) throws java.io.IOException
Parses a Type 1 font and returns a Type1Font class which represents it.- Parameters:
segment1- Segment 1: ASCIIsegment2- Segment 2: Binary- Throws:
java.io.IOException
-
parseASCII
private void parseASCII(byte[] bytes) throws java.io.IOExceptionParses the ASCII portion of a Type 1 font.- Throws:
java.io.IOException
-
readSimpleValue
private void readSimpleValue(java.lang.String key) throws java.io.IOException- Throws:
java.io.IOException
-
readEncoding
private void readEncoding() throws java.io.IOException- Throws:
java.io.IOException
-
arrayToNumbers
private java.util.List<java.lang.Number> arrayToNumbers(java.util.List<Token> value) throws java.io.IOException
Extracts values from an array as numbers.- Throws:
java.io.IOException
-
readFontInfo
private void readFontInfo(java.util.Map<java.lang.String,java.util.List<Token>> fontInfo)
Extracts values from the /FontInfo dictionary.
-
readSimpleDict
private java.util.Map<java.lang.String,java.util.List<Token>> readSimpleDict() throws java.io.IOException
Reads a dictionary whose values are simple, i.e., do not contain nested dictionaries.- Throws:
java.io.IOException
-
readDictValue
private java.util.List<Token> readDictValue() throws java.io.IOException
Reads a simple value from a dictionary.- Throws:
java.io.IOException
-
readValue
private java.util.List<Token> readValue() throws java.io.IOException
Reads a simple value. This is either a number, a string, a name, a literal name, an array, a procedure, or a charstring. This method does not support reading nested dictionaries unless they're empty.- Throws:
java.io.IOException
-
readPostScriptWrapper
private void readPostScriptWrapper(java.util.List<Token> value) throws java.io.IOException
- Throws:
java.io.IOException
-
readProc
private java.util.List<Token> readProc() throws java.io.IOException
Reads a procedure.- Throws:
java.io.IOException
-
readProcVoid
private void readProcVoid() throws java.io.IOExceptionReads a procedure but without returning anything.- Throws:
java.io.IOException
-
parseBinary
private void parseBinary(byte[] bytes) throws java.io.IOExceptionParses the binary portion of a Type 1 font.- Throws:
java.io.IOException
-
readPrivate
private void readPrivate(java.lang.String key, java.util.List<Token> value) throws java.io.IOExceptionExtracts values from the /Private dictionary.- Throws:
java.io.IOException
-
readSubrs
private void readSubrs(int lenIV) throws java.io.IOExceptionReads the /Subrs array.- Parameters:
lenIV- The number of random bytes used in charstring encryption.- Throws:
java.io.IOException
-
readOtherSubrs
private void readOtherSubrs() throws java.io.IOException- Throws:
java.io.IOException
-
readCharStrings
private void readCharStrings(int lenIV) throws java.io.IOExceptionReads the /CharStrings dictionary.- Parameters:
lenIV- The number of random bytes used in charstring encryption.- Throws:
java.io.IOException
-
readDef
private void readDef() throws java.io.IOExceptionReads the sequence "noaccess def" or equivalent.- Throws:
java.io.IOException
-
readPut
private void readPut() throws java.io.IOExceptionReads the sequence "noaccess put" or equivalent.- Throws:
java.io.IOException
-
read
private Token read(Token.Kind kind) throws java.io.IOException
Reads the next token and throws an exception if it is not of the given kind.- Returns:
- token, never null
- Throws:
java.io.IOException
-
read
private void read(Token.Kind kind, java.lang.String name) throws java.io.IOException
Reads the next token and throws an exception if it is not of the given kind and does not have the given value.- Throws:
java.io.IOException
-
readMaybe
private Token readMaybe(Token.Kind kind, java.lang.String name) throws java.io.IOException
Reads the next token if and only if it is of the given kind and has the given value.- Returns:
- token or null if not the expected one
- Throws:
java.io.IOException
-
decrypt
private byte[] decrypt(byte[] cipherBytes, int r, int n)Type 1 Decryption (eexec, charstring).- Parameters:
cipherBytes- cipher textr- keyn- number of random bytes (lenIV)- Returns:
- plain text
-
isBinary
private boolean isBinary(byte[] bytes)
-
hexToBinary
private byte[] hexToBinary(byte[] bytes)
-
-