diff options
author | Ralph Amissah <ralph@amissah.com> | 2016-06-16 01:49:06 -0400 |
---|---|---|
committer | Ralph Amissah <ralph@amissah.com> | 2019-04-04 14:48:18 -0400 |
commit | 8ab7e935913c102fb039110e20b71f698a68c6ee (patch) | |
tree | 3472debd16ce656a57150399ce666e248565f011 /src/sdlang/package.d | |
parent | step4.1 as step4 but extract header meta & make on first reading in document (diff) |
step5 sdlang used for config files and doc headers
Diffstat (limited to 'src/sdlang/package.d')
-rw-r--r-- | src/sdlang/package.d | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/src/sdlang/package.d b/src/sdlang/package.d new file mode 100644 index 0000000..d990e64 --- /dev/null +++ b/src/sdlang/package.d @@ -0,0 +1,132 @@ +// SDLang-D +// Written in the D programming language. + +/++ +$(H2 SDLang-D v0.9.3) + +Library for parsing and generating SDL (Simple Declarative Language). + +Import this module to use SDLang-D as a library. + +For the list of officially supported compiler versions, see the +$(LINK2 https://github.com/Abscissa/SDLang-D/blob/master/.travis.yml, .travis.yml) +file included with your version of SDLang-D. + +Links: +$(UL + $(LI $(LINK2 https://github.com/Abscissa/SDLang-D, SDLang-D Homepage) ) + $(LI $(LINK2 http://semitwist.com/sdlang-d, SDLang-D API Reference (latest version) ) ) + $(LI $(LINK2 http://semitwist.com/sdlang-d-docs, SDLang-D API Reference (earlier versions) ) ) + $(LI $(LINK2 http://sdl.ikayzo.org/display/SDL/Language+Guide, Official SDL Site) [$(LINK2 http://semitwist.com/sdl-mirror/Language+Guide.html, mirror)] ) +) + +Authors: Nick Sabalausky ("Abscissa") http://semitwist.com/contact +Copyright: +Copyright (C) 2012-2015 Nick Sabalausky. + +License: $(LINK2 https://github.com/Abscissa/SDLang-D/blob/master/LICENSE.txt, zlib/libpng) ++/ + +module sdlang; + +import std.array; +import std.datetime; +import std.file; +import std.stdio; + +import sdlang.ast; +import sdlang.exception; +import sdlang.lexer; +import sdlang.parser; +import sdlang.symbol; +import sdlang.token; +import sdlang.util; + +// Expose main public API +public import sdlang.ast : Attribute, Tag; +public import sdlang.exception; +public import sdlang.parser : parseFile, parseSource; +public import sdlang.token : Value, Token, DateTimeFrac, DateTimeFracUnknownZone; +public import sdlang.util : sdlangVersion, Location; + +version(sdlangUnittest) + void main() {} + +version(sdlangTestApp) +{ + int main(string[] args) + { + if( + args.length != 3 || + (args[1] != "lex" && args[1] != "parse" && args[1] != "to-sdl") + ) + { + stderr.writeln("SDLang-D v", sdlangVersion); + stderr.writeln("Usage: sdlang [lex|parse|to-sdl] filename.sdl"); + return 1; + } + + auto filename = args[2]; + + try + { + if(args[1] == "lex") + doLex(filename); + else if(args[1] == "parse") + doParse(filename); + else + doToSDL(filename); + } + catch(SDLangParseException e) + { + stderr.writeln(e.msg); + return 1; + } + + return 0; + } + + void doLex(string filename) + { + auto source = cast(string)read(filename); + auto lexer = new Lexer(source, filename); + + foreach(tok; lexer) + { + // Value + string value; + if(tok.symbol == symbol!"Value") + value = tok.value.hasValue? toString(tok.value.type) : "{null}"; + + value = value==""? "\t" : "("~value~":"~tok.value.toString()~") "; + + // Data + auto data = tok.data.replace("\n", "").replace("\r", ""); + if(data != "") + data = "\t|"~tok.data~"|"; + + // Display + writeln( + tok.location.toString, ":\t", + tok.symbol.name, value, + data + ); + + if(tok.symbol.name == "Error") + break; + } + } + + void doParse(string filename) + { + auto root = parseFile(filename); + stdout.rawWrite(root.toDebugString()); + writeln(); + } + + void doToSDL(string filename) + { + auto root = parseFile(filename); + stdout.rawWrite(root.toSDLDocument()); + } +} |