Package org.apache.fontbox.cmap
Class CMapParser
- java.lang.Object
-
- org.apache.fontbox.cmap.CMapParser
-
public class CMapParser extends java.lang.Object
Parses a CMap stream.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
CMapParser.LiteralName
Internal class.private static class
CMapParser.Operator
Internal class.
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.String
MARK_END_OF_ARRAY
private static java.lang.String
MARK_END_OF_DICTIONARY
private byte[]
tokenParserByteBuffer
-
Constructor Summary
Constructors Constructor Description CMapParser()
Creates a new instance of CMapParser.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
addMappingFrombfrange(CMap cmap, byte[] startCode, int values, byte[] tokenBytes)
private void
addMappingFrombfrange(CMap cmap, byte[] startCode, java.util.List<byte[]> tokenBytesList)
private int
createIntFromBytes(byte[] bytes)
private java.lang.String
createStringFromBytes(byte[] bytes)
protected java.io.InputStream
getExternalCMap(java.lang.String name)
Returns an input stream containing the given "use" CMap.private void
increment(byte[] data)
private void
increment(byte[] data, int position)
private boolean
isDelimiter(int aByte)
Is this a standard PDF delimiter character?private boolean
isWhitespaceOrEOF(int aByte)
CMap
parse(java.io.File file)
Parse a CMAP file on the file system.CMap
parse(java.io.InputStream input)
This will parse the stream and create a cmap object.private void
parseBeginbfchar(java.lang.Number cosCount, java.io.PushbackInputStream cmapStream, CMap result)
private void
parseBeginbfrange(java.lang.Number cosCount, java.io.PushbackInputStream cmapStream, CMap result)
private void
parseBegincidchar(java.lang.Number cosCount, java.io.PushbackInputStream cmapStream, CMap result)
private void
parseBegincidrange(int numberOfLines, java.io.PushbackInputStream cmapStream, CMap result)
private void
parseBegincodespacerange(java.lang.Number cosCount, java.io.PushbackInputStream cmapStream, CMap result)
private void
parseLiteralName(CMapParser.LiteralName literal, java.io.PushbackInputStream cmapStream, CMap result)
private java.lang.Object
parseNextToken(java.io.PushbackInputStream is)
CMap
parsePredefined(java.lang.String name)
Parses a predefined CMap.private void
parseUsecmap(CMapParser.LiteralName useCmapName, CMap result)
private void
readUntilEndOfLine(java.io.InputStream is, 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
-
-
Method Detail
-
parse
public CMap parse(java.io.File file) throws java.io.IOException
Parse a CMAP file on the file system.- Parameters:
file
- The file to parse.- Returns:
- A parsed CMAP file.
- Throws:
java.io.IOException
- If there is an issue while parsing the CMAP.
-
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(java.io.InputStream input) throws java.io.IOException
This will parse the stream and create a cmap object.- Parameters:
input
- The CMAP stream to parse.- Returns:
- The parsed stream as a java object, never null.
- Throws:
java.io.IOException
- If there is an error parsing the stream.
-
parseUsecmap
private void parseUsecmap(CMapParser.LiteralName useCmapName, CMap result) throws java.io.IOException
- Throws:
java.io.IOException
-
parseLiteralName
private void parseLiteralName(CMapParser.LiteralName literal, java.io.PushbackInputStream cmapStream, CMap result) throws java.io.IOException
- Throws:
java.io.IOException
-
parseBegincodespacerange
private void parseBegincodespacerange(java.lang.Number cosCount, java.io.PushbackInputStream cmapStream, CMap result) throws java.io.IOException
- Throws:
java.io.IOException
-
parseBeginbfchar
private void parseBeginbfchar(java.lang.Number cosCount, java.io.PushbackInputStream cmapStream, CMap result) throws java.io.IOException
- Throws:
java.io.IOException
-
parseBegincidrange
private void parseBegincidrange(int numberOfLines, java.io.PushbackInputStream cmapStream, CMap result) throws java.io.IOException
- Throws:
java.io.IOException
-
parseBegincidchar
private void parseBegincidchar(java.lang.Number cosCount, java.io.PushbackInputStream cmapStream, CMap result) throws java.io.IOException
- Throws:
java.io.IOException
-
parseBeginbfrange
private void parseBeginbfrange(java.lang.Number cosCount, java.io.PushbackInputStream cmapStream, 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
protected java.io.InputStream getExternalCMap(java.lang.String name) throws java.io.IOException
Returns an input stream 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 its stream.
-
parseNextToken
private java.lang.Object parseNextToken(java.io.PushbackInputStream is) throws java.io.IOException
- Throws:
java.io.IOException
-
readUntilEndOfLine
private void readUntilEndOfLine(java.io.InputStream is, java.lang.StringBuilder buf) throws java.io.IOException
- Throws:
java.io.IOException
-
isWhitespaceOrEOF
private boolean isWhitespaceOrEOF(int aByte)
-
isDelimiter
private boolean isDelimiter(int aByte)
Is this a standard PDF delimiter character?
-
increment
private void increment(byte[] data)
-
increment
private void increment(byte[] data, int position)
-
createIntFromBytes
private int createIntFromBytes(byte[] bytes)
-
createStringFromBytes
private java.lang.String createStringFromBytes(byte[] bytes)
-
-