aboutsummaryrefslogtreecommitdiff
path: root/lib/Rewrite/HTMLRewrite.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-04-16 04:37:29 +0000
committerChris Lattner <sabre@nondot.org>2008-04-16 04:37:29 +0000
commit8570f0b0fde7ca812f8d37f52305f3df4dd2ce01 (patch)
tree961324ffe1911d64c1e152eef3cc13f2e8ba9c50 /lib/Rewrite/HTMLRewrite.cpp
parent735271479ac57c27f744806859efd5b001dea248 (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.cpp63
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 << "&nbsp;";
- else os << ' ';
+ default:
+ os << c; break;
+
+ case ' ':
+ if (EscapeSpaces) os << "&nbsp;";
+ else os << ' ';
+ break;
+
+ case '\t':
+ if (ReplaceTabs)
+ for (unsigned i = 0; i < 4; ++i)
+ os << "&nbsp;";
+ else
+ os << c;
+
break;
-
- case '\t':
- if (ReplaceTabs)
- for (unsigned i = 0; i < 4; ++i)
- os << "&nbsp;";
- else os << c;
-
- break;
-
- case '<': os << "&lt;"; break;
- case '>': os << "&gt;"; break;
- case '&': os << "&amp;"; 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) {
+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) {