Function pullParseFile
Parses an SDL document using StAX/Pull-style. Returns an InputRange with
element type ParserEvent.
The pullParseFile version reads a file and parses it, while pullParseSource
parses a string passed in. The optional 'filename' parameter in pullParseSource
can be included so that the SDL document's filename (if any) can be displayed
with any syntax error messages.
Warning! The FileStartEvent and FileEndEvent events *might* be removed later.
See https://github.com/Abscissa/SDLang-D/issues/17
Prototype
auto Tag pullParseFile( string filename );
Example
parent 12 attr="q" {
childA 34
childB 56
}
lastTag
The ParserEvent sequence emitted for that SDL document would be as
follows (indented for readability):
FileStartEvent TagStartEvent (parent) ValueEvent (12) AttributeEvent (attr, "q") TagStartEvent (childA) ValueEvent (34) TagEndEvent TagStartEvent (childB) ValueEvent (56) TagEndEvent TagEndEvent TagStartEvent (lastTag) TagEndEvent FileEndEvent
Example
foreach(event; pullParseFile("stuff.sdl"))
{
import std.stdio;
if(event.peek!FileStartEvent())
writeln("FileStartEvent, starting! ");
else if(event.peek!FileEndEvent())
writeln("FileEndEvent, done! ");
else if(auto e = event.peek!TagStartEvent())
writeln("TagStartEvent: ", e.namespace, ":", e.name, " @ ", e.location);
else if(event.peek!TagEndEvent())
writeln("TagEndEvent");
else if(auto e = event.peek!ValueEvent())
writeln("ValueEvent: ", e.value);
else if(auto e = event.peek!AttributeEvent())
writeln("AttributeEvent: ", e.namespace, ":", e.name, "=", e.value);
else // Shouldn't happen
throw new Exception("Received unknown parser event");
}