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 randomAcccessRead)This will parse the stream and create a cmap object.private voidparseBeginbfchar(java.lang.Number cosCount, RandomAccessRead randomAcccessRead, CMap result)private voidparseBeginbfrange(java.lang.Number cosCount, RandomAccessRead randomAcccessRead, CMap result)private voidparseBegincidchar(java.lang.Number cosCount, RandomAccessRead randomAcccessRead, CMap result)private voidparseBegincidrange(int numberOfLines, RandomAccessRead randomAcccessRead, CMap result)private voidparseBegincodespacerange(java.lang.Number cosCount, RandomAccessRead randomAcccessRead, CMap result)private byte[]parseByteArray(RandomAccessRead randomAcccessRead)private java.lang.IntegerparseInteger(RandomAccessRead randomAcccessRead)private voidparseLiteralName(CMapParser.LiteralName literal, RandomAccessRead randomAcccessRead, CMap result)private java.lang.ObjectparseNextToken(RandomAccessRead randomAcccessRead)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 randomAcccessRead)private java.lang.ObjectreadDictionary(RandomAccessRead randomAcccessRead)private java.lang.StringreadLine(RandomAccessRead randomAcccessRead, int firstByte)private CMapParser.LiteralNamereadLiteralName(RandomAccessRead randomAcccessRead)private java.lang.NumberreadNumber(RandomAccessRead randomAcccessRead, int firstByte)private CMapParser.OperatorreadOperator(RandomAccessRead randomAcccessRead, int firstByte)private java.lang.StringreadString(RandomAccessRead randomAcccessRead)private voidreadUntilEndOfLine(RandomAccessRead randomAcccessRead, 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 randomAcccessRead) throws java.io.IOException
This will parse the stream and create a cmap object.- Parameters:
randomAcccessRead- 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 randomAcccessRead, 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 randomAcccessRead, CMap result) throws java.io.IOException- Throws:
java.io.IOException
-
parseBeginbfchar
private void parseBeginbfchar(java.lang.Number cosCount, RandomAccessRead randomAcccessRead, CMap result) throws java.io.IOException- Throws:
java.io.IOException
-
parseBegincidrange
private void parseBegincidrange(int numberOfLines, RandomAccessRead randomAcccessRead, CMap result) throws java.io.IOException- Throws:
java.io.IOException
-
parseBegincidchar
private void parseBegincidchar(java.lang.Number cosCount, RandomAccessRead randomAcccessRead, CMap result) throws java.io.IOException- Throws:
java.io.IOException
-
parseBeginbfrange
private void parseBeginbfrange(java.lang.Number cosCount, RandomAccessRead randomAcccessRead, 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 randomAcccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
parseInteger
private java.lang.Integer parseInteger(RandomAccessRead randomAcccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
parseByteArray
private byte[] parseByteArray(RandomAccessRead randomAcccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
readArray
private java.util.List<java.lang.Object> readArray(RandomAccessRead randomAcccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
readString
private java.lang.String readString(RandomAccessRead randomAcccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
readLine
private java.lang.String readLine(RandomAccessRead randomAcccessRead, int firstByte) throws java.io.IOException
- Throws:
java.io.IOException
-
readLiteralName
private CMapParser.LiteralName readLiteralName(RandomAccessRead randomAcccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
readOperator
private CMapParser.Operator readOperator(RandomAccessRead randomAcccessRead, int firstByte) throws java.io.IOException
- Throws:
java.io.IOException
-
readNumber
private java.lang.Number readNumber(RandomAccessRead randomAcccessRead, int firstByte) throws java.io.IOException
- Throws:
java.io.IOException
-
readDictionary
private java.lang.Object readDictionary(RandomAccessRead randomAcccessRead) throws java.io.IOException
- Throws:
java.io.IOException
-
readUntilEndOfLine
private void readUntilEndOfLine(RandomAccessRead randomAcccessRead, 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)
-
-