From 59063565acd173b2c4197648c8e90ed9cd67929b Mon Sep 17 00:00:00 2001 From: sinkuu Date: Sun, 6 Jul 2014 11:12:39 +0900 Subject: [PATCH] Fix XML attribute escaping --- astprinter.d | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/astprinter.d b/astprinter.d index 49726db..1db3d3f 100644 --- a/astprinter.d +++ b/astprinter.d @@ -133,7 +133,7 @@ class XMLPrinter : ASTVisitor output.writeln(""); else output.writeln(""); + xmlAttributeEscape(str(assignExpression.operator)), "\">"); assignExpression.accept(this); output.writeln(""); } @@ -995,7 +995,7 @@ class XMLPrinter : ASTVisitor override void visit(const RelExpression relExpression) { output.writeln(""); + xmlAttributeEscape(str(relExpression.operator)), "\">"); output.writeln(""); relExpression.left.accept(this); output.writeln(""); @@ -1035,7 +1035,7 @@ class XMLPrinter : ASTVisitor override void visit(const ShiftExpression shiftExpression) { output.writeln(""); + xmlAttributeEscape(str(shiftExpression.operator)), "\">"); output.writeln(""); shiftExpression.left.accept(this); output.writeln(""); @@ -1340,7 +1340,7 @@ class XMLPrinter : ASTVisitor auto app = appender!string(); auto formatter = new Formatter!(typeof(app))(app); formatter.format(type); - output.writeln(""); + output.writeln(""); type.accept(this); output.writeln(""); } @@ -1513,6 +1513,12 @@ class XMLPrinter : ASTVisitor return s.translate(['<' : "<", '>' : ">", '&' : "&"]); } + private static string xmlAttributeEscape(string s) + { + return s.translate(['<' : "<", '>' : ">", '&' : "&", + '\"' : """, '\'' : "'"]); + } + private void writeDdoc(string comment) { if (comment is null) return;