import std.d.lexer; import std.d.ast; import std.stdio; class XMLPrinter : ASTVisitor { override void visit(Module mod) { output.writeln(""); mod.accept(this); output.writeln(""); } override void visit(ModuleDeclaration modDec) { output.writeln(""); modDec.accept(this); output.writeln(""); } override void visit(IdentifierChain chain) { output.writeln(""); foreach (ident; chain.identifiers) { output.writeln("", ident.value, ""); } output.writeln(""); } override void visit(ClassDeclaration classDec) { output.writeln(""); output.writeln("", classDec.name.value, ""); output.writeln(""); } override void visit(StructDeclaration structDec) { output.writeln(""); output.writeln("", structDec.name.value, ""); output.writeln(""); } override void visit(FunctionDeclaration functionDec) { output.writeln(""); output.writeln("", functionDec.name.value, ""); output.writeln(""); } override void visit(EnumDeclaration enumDec) { output.writeln(""); if (enumDec.name.type == TokenType.identifier) output.writeln("", enumDec.name.value, ""); enumDec.accept(this); output.writeln(""); } override void visit(EnumMember enumMem) { output.writeln(""); output.writeln("", enumMem.name.value, ""); enumMem.accept(this); output.writeln(""); } alias ASTVisitor.visit visit; File output; }