diff options
author | Chris Lattner <sabre@nondot.org> | 2008-04-16 04:37:29 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-04-16 04:37:29 +0000 |
commit | 8570f0b0fde7ca812f8d37f52305f3df4dd2ce01 (patch) | |
tree | 961324ffe1911d64c1e152eef3cc13f2e8ba9c50 /lib/Rewrite/HTMLRewrite.cpp | |
parent | 735271479ac57c27f744806859efd5b001dea248 (diff) |
Switch AddLineNumbers to hack on a rewritebuffer instead of on a
rewriter, getting sourcelocations out of the picture.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49775 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Rewrite/HTMLRewrite.cpp')
-rw-r--r-- | lib/Rewrite/HTMLRewrite.cpp | 63 |
1 files changed, 30 insertions, 33 deletions
diff --git a/lib/Rewrite/HTMLRewrite.cpp b/lib/Rewrite/HTMLRewrite.cpp index b4dbb44431..9ed5953c60 100644 --- a/lib/Rewrite/HTMLRewrite.cpp +++ b/lib/Rewrite/HTMLRewrite.cpp @@ -75,35 +75,35 @@ std::string html::EscapeText(const std::string& s, bool EscapeSpaces, for (unsigned i = 0 ; i < len; ++i) { char c = s[i]; - switch (c) { - default: - os << c; break; - - case ' ': - if (EscapeSpaces) os << " "; - else os << ' '; + default: + os << c; break; + + case ' ': + if (EscapeSpaces) os << " "; + else os << ' '; + break; + + case '\t': + if (ReplaceTabs) + for (unsigned i = 0; i < 4; ++i) + os << " "; + else + os << c; + break; - - case '\t': - if (ReplaceTabs) - for (unsigned i = 0; i < 4; ++i) - os << " "; - else os << c; - - break; - - case '<': os << "<"; break; - case '>': os << ">"; break; - case '&': 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) { +static void AddLineNumber(RewriteBuffer &RB, unsigned LineNo, + unsigned B, unsigned E) { llvm::SmallString<100> Str; Str += "<tr><td class=\"num\" id=\"LN"; Str.append_uint(LineNo); @@ -113,10 +113,10 @@ static void AddLineNumber(Rewriter& R, unsigned LineNo, if (B == E) { // Handle empty lines. Str += " </td></tr>"; - R.InsertTextBefore(B, &Str[0], Str.size()); + RB.InsertTextBefore(B, &Str[0], Str.size()); } else { - R.InsertTextBefore(B, &Str[0], Str.size()); - R.InsertCStrBefore(E, "</td></tr>"); + RB.InsertTextBefore(B, &Str[0], Str.size()); + RB.InsertTextBefore(E, "</td></tr>", strlen("</td></tr>")); } } @@ -126,6 +126,7 @@ void html::AddLineNumbers(Rewriter& R, unsigned FileID) { const char* FileBeg = Buf->getBufferStart(); const char* FileEnd = Buf->getBufferEnd(); const char* C = FileBeg; + RewriteBuffer &RB = R.getEditBuffer(FileID); assert (C <= FileEnd); @@ -155,18 +156,14 @@ void html::AddLineNumbers(Rewriter& R, unsigned FileID) { ++FilePos; } - AddLineNumber(R, LineNo, - SourceLocation::getFileLoc(FileID, LineStartPos), - SourceLocation::getFileLoc(FileID, LineEndPos)); + AddLineNumber(RB, LineNo, LineStartPos, LineEndPos); } - // Add one big div tag that surrounds all of the code. - - R.InsertCStrBefore(SourceLocation::getFileLoc(FileID, 0), - "<table class=\"code\">\n"); + // Add one big table tag that surrounds all of the code. + RB.InsertTextBefore(0, "<table class=\"code\">\n", + strlen("<table class=\"code\">\n")); - R.InsertCStrAfter(SourceLocation::getFileLoc(FileID, FileEnd - FileBeg), - "</table>"); + RB.InsertTextAfter(FileEnd - FileBeg, "</table>", strlen("</table>")); } void html::AddHeaderFooterInternalBuiltinCSS(Rewriter& R, unsigned FileID) { |