"Escape" certain characters

Added EscapeString() to convert certain characters into XML escape (&xxx;) sequences

BUG=708705

Review-Url: https://codereview.chromium.org/2803613003
Cr-Original-Commit-Position: refs/heads/master@{#462966}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 7dbbea4c0d8e6f34a12ab7ce3b4a92d36e25d2f8
diff --git a/tools/gn/visual_studio_writer.cc b/tools/gn/visual_studio_writer.cc
index 8a8cf52..76ebc56 100644
--- a/tools/gn/visual_studio_writer.cc
+++ b/tools/gn/visual_studio_writer.cc
@@ -37,9 +37,41 @@
 
 namespace {
 
+std::string EscapeString(const std::string& value) {
+  std::string result;
+  for (char c : value) {
+    switch (c) {
+      case '\n':
+        result += "
";
+        break;
+      case '\r':
+        result += "
";
+        break;
+      case '\t':
+        result += "	";
+        break;
+      case '"':
+        result += """;
+        break;
+      case '<':
+        result += "&lt;";
+        break;
+      case '>':
+        result += "&gt;";
+        break;
+      case '&':
+        result += "&amp;";
+        break;
+      default:
+        result += c;
+    }
+  }
+  return result;
+}
+
 struct SemicolonSeparatedWriter {
   void operator()(const std::string& value, std::ostream& out) const {
-    out << value + ';';
+    out << EscapeString(value) + ';';
   }
 };