Package org.apache.fontbox.cmap
Class CMapParser
- java.lang.Object
-
- org.apache.fontbox.cmap.CMapParser
-
public class CMapParser extends java.lang.ObjectParses a CMap stream.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classCMapParser.LiteralNameInternal class.private static classCMapParser.OperatorInternal class.
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.StringMARK_END_OF_ARRAYprivate static java.lang.StringMARK_END_OF_DICTIONARYprivate booleanstrictModeprivate byte[]tokenParserByteBuffer
-
Constructor Summary
Constructors Constructor Description CMapParser()Creates a new instance of CMapParser.CMapParser(boolean strictMode)Creates a new instance of CMapParser.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidaddMappingFrombfrange(CMap cmap, byte[] startCode, int values, byte[] tokenBytes)private voidaddMappingFrombfrange(CMap cmap, byte[] startCode, java.util.List<byte[]> tokenBytesList)private voidcheckExpectedOperator(CMapParser.Operator operator, java.lang.String expectedOperatorName, java.lang.String rangeName)Throws an IOException if expectedOperatorName not equals operator.opprivate static java.lang.StringcreateStringFromBytes(byte[] bytes)private RandomAccessReadgetExternalCMap(java.lang.String name)Returns a RandomAccessRead containing the given "use" CMap.private static booleanincrement(byte[] data, int position, boolean useStrictMode)private static booleanisDelimiter(int aByte)Is this a standard PDF delimiter character?private static booleanisWhitespaceOrEOF(int aByte)CMapparse(RandomAccessRead randomAccessRead)This will parse the stream and create a cmap object.private voidparseBeginbfchar(java.lang.Number cosCount, RandomAccessRead randomAccessRead, CMap result)private voidparseBeginbfrange(java.lang.Number cosCount, RandomAccessRead randomAccessRead, CMap result)private voidparseBegincidchar(java.lang.Number cosCount, RandomAccessRead randomAccessRead, CMap result)private voidparseBegincidrange(int numberOfLines, RandomAccessRead randomAccessRead, CMap result)private voidparseBegincodespacerange(java.lang.Number cosCount, RandomAccessRead randomAccessRead, CMap result)private byte[]parseByteArray(RandomAccessRead randomAccessRead)private java.lang.IntegerparseInteger(RandomAccessRead randomAccessRead)private voidparseLiteralName(CMapParser.LiteralName literal, RandomAccessRead randomAccessRead, CMap result)private java.lang.ObjectparseNextToken(RandomAccessRead randomAccessRead)CMapparsePredefined(java.lang.String name)Parses a predefined CMap.private voidparseUsecmap(CMapParser.LiteralName useCmapName, CMap result)private java.util.List<java.lang.Object>readArray(RandomAccessRead randomAccessRead)private java.lang.ObjectreadDictionary(RandomAccessRead randomAccessRead)private java.lang.StringreadLine(RandomAccessRead randomAccessRead, int firstByte)private CMapParser.LiteralNamereadLiteralName(RandomAccessRead randomAccessRead)private java.lang.NumberreadNumber(RandomAccessRead randomAccessRead, int firstByte)private CMapParser.OperatorreadOperator(RandomAccessRead randomAccessRead, int firstByte)private java.lang.StringreadString(RandomAccessRead randomAccessRead)private voidreadUntilEndOfLine(RandomAccessRead randomAccessRead, java.lang.StringBuilder buf)
-
-
-
Field Detail
-
MARK_END_OF_DICTIONARY
private static final java.lang.String MARK_END_OF_DICTIONARY
- See Also:
- Constant Field Values
-
MARK_END_OF_ARRAY
private static final java.lang.String MARK_END_OF_ARRAY
- See Also:
- Constant Field Values
-
tokenParserByteBuffer
private final byte[] tokenParserByteBuffer
-
strictMode
private boolean strictMode
-
-
Method Detail
-
parsePredefined
public CMap parsePredefined(java.lang.String name) throws java.io.IOException
Parses a predefined CMap.- Parameters:
name- CMap name.- Returns:
- The parsed predefined CMap as a java object, never null.
- Throws:
java.io.IOException- If the CMap could not be parsed.
-
parse
public CMap parse(RandomAccessRead randomAccessRead) throws java.io.IOException
This will parse the stream and create a cmap object.- Parameters:
randomAccessRead- the source of the CMap to be parsed.- Returns:
- The parsed source as a java object, never null.
- Throws:
java.io.IOException- If there is an error parsing the data.
-
parseUsecmap
private void parseUsecmap(CMapParser.LiteralName useCmapName, CMap result) throws java.io.IOException
- Throws:
java.io.IOException
-
parseLiteralName
private void parseLiteralName(CMapParser.LiteralName literal, RandomAccessRead randomAccessRead, CMap result) throws java.io.IOException
- Throws:
java.io.IOException
-
checkExpectedOperator
private void checkExpectedOperator(CMapParser.Operator operator, java.lang.String expectedOperatorName, java.lang.String rangeName) throws java.io.IOException
Throws an IOException if expectedOperatorName not equals operator.op- Parameters:
operator- Instance of operatorexpectedOperatorName- Expected name of operatorrangeName- The name of the range in which the operator is expected (without a tilde character), to be used in the exception message.- Throws:
java.io.IOException- if expectedOperatorName not equals operator.op
-
parseBegincodespacerange
private void parseBegincodespacerange(java.lang.Number cosCount, RandomAccessRead randomAccessRead, CMap result) throws java.io.IOException- Throws:
java.io.IOException
-
parseBeginbfchar
private void parseBeginbfchar(java.lang.Number cosCount, RandomAccessRead randomAccessRead, CMap result) throws java.io.IOException- Throws:
java.io.IOException
-
parseBegincidrange
private void parseBegincidrange(int numberOfLines, RandomAccessRead randomAccessRead, CMap result) throws java.io.IOException- Throws:
java.io.IOException
-
parseBegincidchar
private void parseBegincidchar(java.lang.Number cosCount, RandomAccessRead randomAccessRead, CMap result) throws java.io.IOException- Throws:
java.io.IOException
-
parseBeginbfrange
private void parseBeginbfrange(java.lang.Number cosCount, RandomAccessRead randomAccessRead, CMap result) throws java.io.IOException- Throws:
java.io.IOException
-
addMappingFrombfrange
private void addMappingFrombfrange(CMap cmap, byte[] startCode, java.util.List<byte[]> tokenBytesList)
-
addMappingFrombfrange
private void addMappingFrombfrange(CMap cmap, byte[] startCode, int values, byte[] tokenBytes)
-
getExternalCMap
private RandomAccessRead getExternalCMap(java.lang.String name) throws java.io.IOException
Returns a RandomAccessRead containing the given "use" CMap.- Parameters:
name- Name of the given "use" CMap resource.- Throws:
java.io.IOException- if the CMap resource doesn't exist or if there is an error opening it.
-
parseNextToken
private java.lang.Object parseNextToken(RandomAccessRead randomAccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
parseInteger
private java.lang.Integer parseInteger(RandomAccessRead randomAccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
parseByteArray
private byte[] parseByteArray(RandomAccessRead randomAccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
readArray
private java.util.List<java.lang.Object> readArray(RandomAccessRead randomAccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
readString
private java.lang.String readString(RandomAccessRead randomAccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
readLine
private java.lang.String readLine(RandomAccessRead randomAccessRead, int firstByte) throws java.io.IOException
- Throws:
java.io.IOException
-
readLiteralName
private CMapParser.LiteralName readLiteralName(RandomAccessRead randomAccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
readOperator
private CMapParser.Operator readOperator(RandomAccessRead randomAccessRead, int firstByte) throws java.io.IOException
- Throws:
java.io.IOException
-
readNumber
private java.lang.Number readNumber(RandomAccessRead randomAccessRead, int firstByte) throws java.io.IOException
- Throws:
java.io.IOException
-
readDictionary
private java.lang.Object readDictionary(RandomAccessRead randomAccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
readUntilEndOfLine
private void readUntilEndOfLine(RandomAccessRead randomAccessRead, java.lang.StringBuilder buf) throws java.io.IOException
- Throws:
java.io.IOException
-
isWhitespaceOrEOF
private static boolean isWhitespaceOrEOF(int aByte)
-
isDelimiter
private static boolean isDelimiter(int aByte)
Is this a standard PDF delimiter character?
-
increment
private static boolean increment(byte[] data, int position, boolean useStrictMode)
-
createStringFromBytes
private static java.lang.String createStringFromBytes(byte[] bytes)
-
-