control structure
do markup-parse markup-source-expression local-declaration* action* done
You can use do markup-parse
to process a markup source
, which may be produced either by one of
OmniMark's internal parsers, or an external parser. do markup-parse
provides a general
interface for processing of markup streams.
The markup source
argument for do markup-parse
can be generated by external parsers of all kinds,
and is not limited to parsed XML or SGML. There are two external parser libraries shipped with
OmniMark: Xerces from the
Apache project, and the RTF external parser.
do markup-parse
operates in the same way as do sgml-parse
and do xml-parse
, except that it
takes an already parsed markup source
argument instead of the normal parameters of a do xml-parse
or do sgml-parse
invocation. In the example below, the markup source
is the result of the
external parser function xerces.xml
and scan
is a parameter of that function. Consult the
OMXERCES library
documentation for complete details on the parameters of the xerces.xml
function.
import "omxerces.xmd" prefixed by xerces. process do markup-parse xerces.xml scan file "my.xml" output "%c" done element #implied output "%c"
Following the invocation of do markup-parse
, OmniMark markup rules are fired, as when using an
internal parser like do sgml-parse
. Since string source
data type is a subtype of markup
source
, a string source
value can also be used as the argument of do markup-parse
. In this
case, only a single data-content
rule is fired. If the argument is a more general markup source
that contains markup events as well as data content, do markup-parse
will fire the corresponding markup
rule for each event.
The markup rule fired by a markup event will only have the information made available by the parser that originally produced the markup event, so you may not get the same information that you would have received from the internal parser. Note in particular that the XML and SGML error numbers reported by OmniMark's internal parsers are a product of those parsers, and will not be returned by an external parser. The error number reported by a markup error rule fired by an external parser will always be "0297". You will need to parse the error text to discover the specific error reported by the parser.