Function pullParseSource

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 SDLang document's filename (if any) can be displayed with any syntax error messages.

Prototype

auto libInputVisitor.InputVisitor!(sdlang.parser.PullParser,taggedalgebraic.TaggedAlgebraic!(sdlang.parser.ParserEventUnion).TaggedAlgebraic) pullParseSource(
  string source,
  string filename = null
);

Note

The old FileStartEvent and FileEndEvent events were deemed unnessecary and removed as of SDLang-D v0.10.0.

Note

Previously, in SDLang-D v0.9.x, ParserEvent was a std.variant.Algebraic. As of SDLang-D v0.10.0, it is now a TaggedAlgebraic, so usage has changed somewhat.

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):

TagStartEvent (parent)
	ValueEvent (12)
	AttributeEvent (attr, "q")
	TagStartEvent (childA)
		ValueEvent (34)
	TagEndEvent
	TagStartEvent (childB)
		ValueEvent (56)
	TagEndEvent
TagEndEvent
TagStartEvent (lastTag)
TagEndEvent

Example

// stuff.sdl
immutable stuffSdl = `
	name "sdlang-d"
	description "An SDL (Simple Declarative Language) library for D."
	homepage "http://github.com/Abscissa/SDLang-D"
	
	configuration "library" {
		targetType "library"
	}
`;

import std.stdio;

foreach(event; pullParseSource(stuffSdl))
final switch(event.kind)
{
case ParserEvent.Kind.tagStart:
	auto e = cast(TagStartEvent) event;
	writeln("TagStartEvent: ", e.namespace, ":", e.name, " @ ", e.location);
	break;

case ParserEvent.Kind.tagEnd:
	auto e = cast(TagEndEvent) event;
	writeln("TagEndEvent");
	break;

case ParserEvent.Kind.value:
	auto e = cast(ValueEvent) event;
	writeln("ValueEvent: ", e.value);
	break;

case ParserEvent.Kind.attribute:
	auto e = cast(AttributeEvent) event;
	writeln("AttributeEvent: ", e.namespace, ":", e.name, "=", e.value);
	break;
}

Authors

Copyright

License