diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-03-27 17:15:29 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-03-27 17:15:29 +0000 |
commit | 053ef593fa9d2b890645a914eee203231fb34458 (patch) | |
tree | 2b56bcea2fbcc7cf8b09a677635e835fd13b1099 | |
parent | 1c33975b2192fa4536b1205a1809826ff6e03263 (diff) |
Add html::EscapeText for std::string; use this function to escape text in message bubbles.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48884 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | Driver/HTMLDiagnostics.cpp | 6 | ||||
-rw-r--r-- | include/clang/Rewrite/HTMLRewrite.h | 4 | ||||
-rw-r--r-- | lib/Rewrite/HTMLRewrite.cpp | 26 |
3 files changed, 32 insertions, 4 deletions
diff --git a/Driver/HTMLDiagnostics.cpp b/Driver/HTMLDiagnostics.cpp index 65dd17c7f8..93af22376d 100644 --- a/Driver/HTMLDiagnostics.cpp +++ b/Driver/HTMLDiagnostics.cpp @@ -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. diff --git a/include/clang/Rewrite/HTMLRewrite.h b/include/clang/Rewrite/HTMLRewrite.h index 1b0aa28a9d..b8f9b95913 100644 --- a/include/clang/Rewrite/HTMLRewrite.h +++ b/include/clang/Rewrite/HTMLRewrite.h @@ -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); diff --git a/lib/Rewrite/HTMLRewrite.cpp b/lib/Rewrite/HTMLRewrite.cpp index b886bec38b..bb4ae86261 100644 --- a/lib/Rewrite/HTMLRewrite.cpp +++ b/lib/Rewrite/HTMLRewrite.cpp @@ -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 << " "; + break; + + case '<': os << "<"; break; + case '>': os << ">"; break; + case '&': os << "&"; break; + } + } + + return os.str(); +} + static void AddLineNumber(Rewriter& R, unsigned LineNo, SourceLocation B, SourceLocation E) { |