diff --git a/lib/Rewrite/HTMLRewrite.cpp b/lib/Rewrite/HTMLRewrite.cpp index 7fea7fa18f..c832eff46d 100644 --- a/lib/Rewrite/HTMLRewrite.cpp +++ b/lib/Rewrite/HTMLRewrite.cpp @@ -29,20 +29,40 @@ void html::EscapeText(Rewriter& R, unsigned FileID, bool EscapeSpaces) { assert (C <= FileEnd); for (unsigned FilePos = 0; C != FileEnd ; ++C, ++FilePos) { - - SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos); - + switch (*C) { default: break; case ' ': - if (EscapeSpaces) R.ReplaceText(Loc, 1, " ", 6); + if (EscapeSpaces) { + SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos); + R.ReplaceText(Loc, 1, " ", 6); + } break; - case '\t': R.ReplaceText(Loc, 1, "    ", 6*4); break; - case '<': R.ReplaceText(Loc, 1, "<", 4); break; - case '>': R.ReplaceText(Loc, 1, ">", 4); break; - case '&': R.ReplaceText(Loc, 1, "&", 5); break; + case '\t': { + SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos); + R.ReplaceText(Loc, 1, "    ", 6*4); + break; + } + + case '<': { + SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos); + R.ReplaceText(Loc, 1, "<", 4); + break; + } + + case '>': { + SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos); + R.ReplaceText(Loc, 1, ">", 4); + break; + } + + case '&': { + SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos); + R.ReplaceText(Loc, 1, "&", 5); + break; + } } } } @@ -78,28 +98,17 @@ std::string html::EscapeText(const std::string& s, bool EscapeSpaces) { static void AddLineNumber(Rewriter& R, unsigned LineNo, SourceLocation B, SourceLocation E) { - // Put the closing first. - - R.InsertCStrBefore(E, ""); - - if (B == E) // Handle empty lines. - R.InsertCStrBefore(B, " "); - else { - R.InsertCStrBefore(E, ""); - R.InsertCStrBefore(B, ""); - } - - // Insert a div tag for the line number. - std::ostringstream os; - os << "" << LineNo << ""; - - R.InsertStrBefore(B, os.str()); - - // Now prepend the . - - R.InsertCStrBefore(B, ""); + os << "" << LineNo << ""; + if (B == E) { // Handle empty lines. + os << " "; + R.InsertStrBefore(B, os.str()); + } + else { + R.InsertStrBefore(B, os.str()); + R.InsertCStrBefore(E, ""); + } } void html::AddLineNumbers(Rewriter& R, unsigned FileID) { @@ -125,20 +134,21 @@ void html::AddLineNumbers(Rewriter& R, unsigned FileID) { // Scan until the newline (or end-of-file). - for ( ; C != FileEnd ; ++C, ++FilePos) - if (*C == '\n') { - LineEndPos = FilePos; + while (C != FileEnd) { + char c = *C; + ++C; + + if (c == '\n') { + LineEndPos = FilePos++; break; } + + ++FilePos; + } AddLineNumber(R, LineNo, SourceLocation::getFileLoc(FileID, LineStartPos), - SourceLocation::getFileLoc(FileID, LineEndPos)); - - if (C != FileEnd) { - ++C; - ++FilePos; - } + SourceLocation::getFileLoc(FileID, LineEndPos)); } // Add one big div tag that surrounds all of the code.