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 ~= "&lt;";  break;
+      case '>': result ~= "&gt;";  break;
+      case '&': result ~= "&amp;"; 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