]> granicus.if.org Git - clang/commitdiff
Add html::EscapeText for std::string; use this function to escape text in message...
authorTed Kremenek <kremenek@apple.com>
Thu, 27 Mar 2008 17:15:29 +0000 (17:15 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 27 Mar 2008 17:15:29 +0000 (17:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48884 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/HTMLDiagnostics.cpp
include/clang/Rewrite/HTMLRewrite.h
lib/Rewrite/HTMLRewrite.cpp

index 65dd17c7f8a31759f7942e6f7659a7cac4ac121b..93af22376d424385eca26fc50e0460e4bafdd5f4 100644 (file)
@@ -117,8 +117,8 @@ void HTMLDiagnostics::HandlePathDiagnostic(const PathDiagnostic& D) {
     std::ostringstream os;
     const FileEntry* Entry = SMgr.getFileEntryForID(FileID);
     
-    os << "<h1>" << Entry->getDir()->getName() << "/"
-       << Entry->getName() << "</h1>\n";
+    os << "<h1>" << html::EscapeText(Entry->getDir()->getName())
+       << "/" << html::EscapeText(Entry->getName()) << "</h1>\n";
 
     R.InsertStrBefore(SourceLocation::getFileLoc(FileID, 0), os.str());
   }  
@@ -200,7 +200,7 @@ void HTMLDiagnostics::HandlePiece(Rewriter& R,
      << "<div class=\"msg\" style=\"margin-left:"
      << ColNo << "ex\">";
   
-  os << P.getString() << "</div></td></tr>";
+  os << html::EscapeText(P.getString()) << "</div></td></tr>";
   
   // Insert the new html.
   
index 1b0aa28a9d80a87456ecb2b28ed31c2fcd414b20..b8f9b95913a561b91d8ed10b0ac4c6acb957094f 100644 (file)
@@ -16,6 +16,7 @@
 #define LLVM_CLANG_HTMLREWRITER_H
 
 #include "clang/Basic/SourceLocation.h"
+#include <string>
 
 namespace clang {
   
@@ -24,7 +25,8 @@ class Rewriter;
 namespace html {
 
   void EscapeText(Rewriter& R, unsigned FileID, bool EscapeSpaces = false);
-  
+  std::string EscapeText(const std::string& s, bool EscapeSpaces = false);
+
   void AddLineNumbers(Rewriter& R, unsigned FileID);  
   
   void AddHeaderFooterInternalBuiltinCSS(Rewriter& R, unsigned FileID);
index b886bec38bac0e89761540e90018079e2fb70d92..bb4ae862615f8aa906082179844002a908b5d678 100644 (file)
@@ -46,6 +46,32 @@ void html::EscapeText(Rewriter& R, unsigned FileID, bool EscapeSpaces) {
   }
 }
 
+std::string html::EscapeText(const std::string& s, bool EscapeSpaces) {
+  
+  unsigned len = s.size();
+  std::ostringstream os;
+  
+  for (unsigned i = 0 ; i < len; ++i) {
+    
+    char c = s[i];
+    
+    switch (c) {
+      default:
+        os << c; break;
+        
+      case ' ':
+        if (EscapeSpaces) os << "&#32;";
+        break;
+        
+        case '<': os << "&lt;"; break;
+        case '>': os << "&gt;"; break;
+        case '&': os << "&amp;"; break;
+    }
+  }
+  
+  return os.str();
+}
+
 static void AddLineNumber(Rewriter& R, unsigned LineNo,
                           SourceLocation B, SourceLocation E) {