Parser interface
From LMNLWiki
This is a proposal by John Cowan. It has some Javaisms in it, though the syntax is not Java.
Parsers in general:
interface Parser {
String method getFeature(String name)
method setFeature(String name, bool value)
String method getProperty(String name)
method setProperty(String name, Object value)
method parse(File f)
method parse(InputStream i)
method parse(InputStream i, String baseURI)
method parse(Reader r)
method parse(Reader r, String baseURI)
method parse(String sourceURI)
method parse(String document, String baseURI)
readonly integer property line
readonly integer property column
}
Types of events returned by a pull parser:
enum EventType {
DOCUMENT_OPEN
DOCUMENT_CLOSE
START_TAG_OPEN
START_TAG_CLOSE
END_TAG_OPEN
END_TAG_CLOSE
START_ANNOTATION_OPEN
START_ANNOTATION_CLOSE
END_ANNOTATION_OPEN
END_ANNOTATION_CLOSE
ATOM_OPEN
ATOM_CLOSE
TEXT
COMMENT
ERROR
}
Pull parsers (invoke get(), then inspect properties):
interface PullParser : Parser {
EventType method get()
# If the current event is TEXT:
readonly char[] property characters
readonly integer property start
readonly integer property end
readonly boolean property whitespace
# Else if the current event is COMMENT:
readonly String property content
# Else if the current event is ERROR:
readonly String property expected
readonly String property found
readonly String property message
# Else if the current event is DOCUMENT_*:
# then nothing
# Else
readonly String property namespaceName
readonly String property localpart
readonly String property id
# End if
}
Push parsers (invoke document handler methods):
interface PushParser : Parser {
ContentHandler property contentHandler
}
Content handlers (methods are called by push parsers):
interface ContentHandler {
method documentOpen()
method documentClose()
method startTagOpen(String namespaceName, String localpart, String id)
method startTagClose(String namespaceName, String localpart, String id)
method endTagOpen(String namespaceName, String localpart, String id)
method endTagClose(String namespaceName, String localpart, String id)
method startAnnotationOpen(String namespaceName, String localpart, String id)
method startAnnotationClose(String namespaceName, String localpart, String id)
method endAnnotationOpen(String namespaceName, String localpart, String id)
method endAnnotationClose(String namespaceName, String localpart, String id)
method atomOpen(String namespaceName, String localpart, String id)
method atomClose(String namespaceName, String localpart, String id)
method text(char[] characters, int start, int end, bool whitespace)
method comment(String content)
method error(String expected, String found, String message)
}
