Class DSCParser
java.lang.Object
org.apache.xmlgraphics.ps.dsc.DSCParser
- All Implemented Interfaces:
DSCParserConstants
Parser for DSC-compliant PostScript files (DSC = Document Structuring Conventions). The parser
is implemented as a pull parser but has the ability to act as a push parser through the
DSCHandler interface.
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate booleanprivate DSCEventprivate booleanprivate DSCListenerprivate InputStreamprivate Listprivate booleanprivate static final org.apache.commons.logging.Logprivate DSCListenerprivate DSCEventprivate BufferedReaderFields inherited from interface DSCParserConstants
COMMENT, DSC_COMMENT, EOF, HEADER_COMMENT, LINE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddListener(DSCListener listener) Adds a DSC event listener.private voidReturns the current event.Returns the InputStream the PostScript code is read from.getLine()Returns the current PostScript line.booleanhasNext()Indicates whether there are additional items.booleanIndicates whether the parser is configured to check for content after the EOF comment.booleanIndicates whether the listeners are currently disabled.private booleanisWhitespace(char c) intnext()Steps to the next item indicating the type of event.nextDSCComment(String name) Advances to the next DSC comment with the given name.nextDSCComment(String name, PSGenerator gen) Advances to the next DSC comment with the given name.Steps to the next item returning the new event.nextPSComment(String prefix, PSGenerator gen) Advances to the next PostScript comment with the given prefix.voidparse(DSCHandler handler) Starts the parser in push parsing mode sending events to the DSCHandler instance.private DSCCommentparseDSCComment(String name, String value) private DSCCommentparseDSCLine(String line) protected voidParses the next event.peek()Returns the next event without moving the cursor to the next event.private voidprotected StringreadLine()Reads one line from the input filevoidremoveListener(DSCListener listener) Removes a DSC event listener.voidsetCheckEOF(boolean value) Tells the parser whether to check for content after the EOF comment.voidSets a filter for DSC events.voidsetListenersDisabled(boolean value) Allows to disable all listeners.voidSets a NestedDocumentHandler which is used to skip nested documents like embedded EPS files.protected voidThis method is used to write out warning messages for the parsing process.
-
Field Details
-
LOG
private static final org.apache.commons.logging.Log LOG -
in
-
reader
-
eofFound
private boolean eofFound -
checkEOF
private boolean checkEOF -
currentEvent
-
nextEvent
-
nestedDocumentHandler
-
filterListener
-
listeners
-
listenersDisabled
private boolean listenersDisabled
-
-
Constructor Details
-
DSCParser
Creates a new DSC parser.- Parameters:
in- InputStream to read the PostScript file from (the stream is not closed by this class, the caller is responsible for that)- Throws:
IOException- In case of an I/O errorDSCException- In case of a violation of the DSC spec
-
-
Method Details
-
getInputStream
Returns the InputStream the PostScript code is read from.- Returns:
- the InputStream the PostScript code is read from
-
warn
This method is used to write out warning messages for the parsing process. Subclass to override this method. The default implementation writes to logger.- Parameters:
msg- the warning message
-
readLine
Reads one line from the input file- Returns:
- the line or null if there are no more lines
- Throws:
IOException- In case of an I/O errorDSCException- In case of a violation of the DSC spec
-
checkLine
- Throws:
DSCException
-
isWhitespace
private boolean isWhitespace(char c) -
parseDSCLine
- Throws:
IOExceptionDSCException
-
parseDSCComment
-
parse
Starts the parser in push parsing mode sending events to the DSCHandler instance.- Parameters:
handler- the DSCHandler instance to send the events to- Throws:
IOException- In case of an I/O errorDSCException- In case of a violation of the DSC spec
-
hasNext
public boolean hasNext()Indicates whether there are additional items.- Returns:
- true if there are additonal items, false if the end of the file has been reached
-
next
Steps to the next item indicating the type of event.- Returns:
- the type of event (See
DSCParserConstants) - Throws:
IOException- In case of an I/O errorDSCException- In case of a violation of the DSC specNoSuchElementException- If an attempt was made to advance beyond the end of the file
-
processListeners
- Throws:
IOExceptionDSCException
-
nextEvent
Steps to the next item returning the new event.- Returns:
- the new event
- Throws:
IOException- In case of an I/O errorDSCException- In case of a violation of the DSC spec
-
getCurrentEvent
-
peek
Returns the next event without moving the cursor to the next event.- Returns:
- the next event
-
parseNext
Parses the next event.- Throws:
IOException- In case of an I/O errorDSCException- In case of a violation of the DSC spec
-
getLine
Returns the current PostScript line.- Returns:
- the current PostScript line
- Throws:
IllegalStateException- if the current event is not a normal PostScript line
-
nextDSCComment
Advances to the next DSC comment with the given name.- Parameters:
name- the name of the DSC comment- Returns:
- the requested DSC comment or null if the end of the file is reached
- Throws:
IOException- In case of an I/O errorDSCException- In case of a violation of the DSC spec
-
nextDSCComment
Advances to the next DSC comment with the given name.- Parameters:
name- the name of the DSC commentgen- PSGenerator to pass the skipped events though to- Returns:
- the requested DSC comment or null if the end of the file is reached
- Throws:
IOException- In case of an I/O errorDSCException- In case of a violation of the DSC spec
-
nextPSComment
public PostScriptComment nextPSComment(String prefix, PSGenerator gen) throws IOException, DSCException Advances to the next PostScript comment with the given prefix. This is used to find comments following the DSC extension mechanism.Example: To find FOP's custom comments, pass in "FOP" as a prefix. This will find comments like "%FOPFontSetup".
- Parameters:
prefix- the prefix of the extension commentgen- PSGenerator to pass the skipped events though to- Returns:
- the requested PostScript comment or null if the end of the file is reached
- Throws:
IOException- In case of an I/O errorDSCException- In case of a violation of the DSC spec
-
setFilter
Sets a filter for DSC events.- Parameters:
filter- the filter to use or null to disable filtering
-
addListener
Adds a DSC event listener.- Parameters:
listener- the listener
-
removeListener
Removes a DSC event listener.- Parameters:
listener- the listener to remove
-
setListenersDisabled
public void setListenersDisabled(boolean value) Allows to disable all listeners. This can be used to disable any filtering, for example in nested documents.- Parameters:
value- true to disable all listeners, false to re-enable them
-
isListenersDisabled
public boolean isListenersDisabled()Indicates whether the listeners are currently disabled.- Returns:
- true if they are disabled
-
setNestedDocumentHandler
Sets a NestedDocumentHandler which is used to skip nested documents like embedded EPS files. You can also process those parts in a special way.It is suggested to use the more generally usable
addListener(DSCListener)andremoveListener(DSCListener)instead. NestedDocumentHandler is internally mapped onto aDSCListener.- Parameters:
handler- the NestedDocumentHandler instance or null to disable the feature
-
setCheckEOF
public void setCheckEOF(boolean value) Tells the parser whether to check for content after the EOF comment. This can be disabled to skip nested documents.- Parameters:
value- true if the check is enabled
-
isCheckEOF
public boolean isCheckEOF()Indicates whether the parser is configured to check for content after the EOF comment.- Returns:
- true if the check is enabled.
-