Mercurial > projects > dil
diff trunk/src/main.d @ 5:79b4e8848794
- Started writing XML generator.
- /+ +/ comments are parsed now.
author | aziz |
---|---|
date | Fri, 22 Jun 2007 19:33:02 +0000 |
parents | 92df59b1ec4a |
children | 5d6968cc751e |
line wrap: on
line diff
--- a/trunk/src/main.d Fri Jun 22 14:12:02 2007 +0000 +++ b/trunk/src/main.d Fri Jun 22 19:33:02 2007 +0000 @@ -8,14 +8,50 @@ import std.stdio; import std.file; +char[] xmlescape(char[] text) +{ + char[] result; + foreach(c; text) + switch(c) + { + case '<': result ~= "<"; break; + case '>': result ~= ">"; break; + case '&': result ~= "&"; break; + default: result ~= c; + } + return result; +} + void main(char[][] args) { auto srctext = cast(char[]) std.file.read(args[1]); auto lx = new Lexer(srctext); - foreach(token; lx.getTokens()) + auto tokens = lx.getTokens(); + char* end = lx.text.ptr; + + writef(`<?xml version="1.0"?> +<?xml-stylesheet href="format.css" type="text/css"?> +<sourcetext>`); + foreach(ref token; tokens) { - if (token.type == TOK.Whitespace) - writefln("%s", token.start[0..token.end-token.start]); + if (end != token.start) + writef("%s", xmlescape(end[0 .. token.start - end])); + char[] span = xmlescape(token.start[0 .. token.end-token.start]); + switch(token.type) + { + case TOK.Identifier: + writef("<i>%s</i>", span); + break; + case TOK.Whitespace: + writef(span); + break; + case TOK.Comment: + writef("<c>%s</c>", span); + break; + default: + } + end = token.end; } + writef("</sourcetext>"); } \ No newline at end of file