forked from OSchip/llvm-project
Don't expand tabs in EscapeText, but rather expand them when writing out
the HTML file. This should reduce the amount of memory pressure on the rewriter for files that have a lot of tabs. llvm-svn: 49406
This commit is contained in:
parent
5d1647daf9
commit
5f7ece0bff
|
@ -199,8 +199,13 @@ void HTMLDiagnostics::HandlePathDiagnostic(const PathDiagnostic& D) {
|
|||
|
||||
// Emit the HTML to disk.
|
||||
|
||||
for (RewriteBuffer::iterator I = Buf->begin(), E = Buf->end(); I!=E; ++I)
|
||||
os << *I;
|
||||
for (RewriteBuffer::iterator I = Buf->begin(), E = Buf->end(); I!=E; ++I) {
|
||||
// Expand tabs.
|
||||
if (*I == '\t')
|
||||
os << " ";
|
||||
else
|
||||
os << *I;
|
||||
}
|
||||
}
|
||||
|
||||
void HTMLDiagnostics::HandlePiece(Rewriter& R,
|
||||
|
|
|
@ -24,8 +24,20 @@ class Rewriter;
|
|||
|
||||
namespace html {
|
||||
|
||||
void EscapeText(Rewriter& R, unsigned FileID, bool EscapeSpaces = false);
|
||||
std::string EscapeText(const std::string& s, bool EscapeSpaces = false);
|
||||
/// EscapeText - HTMLize a specified file so that special characters are
|
||||
/// are translated so that they are not interpreted as HTML tags. In this
|
||||
/// version tabs are not replaced with spaces by default, as this can
|
||||
/// introduce a serious performance overhead as the amount of replaced
|
||||
/// text can be very large.
|
||||
void EscapeText(Rewriter& R, unsigned FileID,
|
||||
bool EscapeSpaces = false, bool ReplacesTabs = false);
|
||||
|
||||
/// EscapeText - HTMLized the provided string so that special characters
|
||||
/// in 's' are not interpreted as HTML tags. Unlike the version of
|
||||
/// EscapeText that rewrites a file, this version by default replaces tabs
|
||||
/// with spaces.
|
||||
std::string EscapeText(const std::string& s,
|
||||
bool EscapeSpaces = false, bool ReplaceTabs = true);
|
||||
|
||||
void AddLineNumbers(Rewriter& R, unsigned FileID);
|
||||
|
||||
|
|
|
@ -20,7 +20,8 @@
|
|||
|
||||
using namespace clang;
|
||||
|
||||
void html::EscapeText(Rewriter& R, unsigned FileID, bool EscapeSpaces) {
|
||||
void html::EscapeText(Rewriter& R, unsigned FileID,
|
||||
bool EscapeSpaces, bool ReplaceTabs) {
|
||||
|
||||
const llvm::MemoryBuffer *Buf = R.getSourceMgr().getBuffer(FileID);
|
||||
const char* C = Buf->getBufferStart();
|
||||
|
@ -41,6 +42,9 @@ void html::EscapeText(Rewriter& R, unsigned FileID, bool EscapeSpaces) {
|
|||
break;
|
||||
|
||||
case '\t': {
|
||||
if (!ReplaceTabs)
|
||||
break;
|
||||
|
||||
SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos);
|
||||
|
||||
if (EscapeSpaces)
|
||||
|
@ -72,7 +76,8 @@ void html::EscapeText(Rewriter& R, unsigned FileID, bool EscapeSpaces) {
|
|||
}
|
||||
}
|
||||
|
||||
std::string html::EscapeText(const std::string& s, bool EscapeSpaces) {
|
||||
std::string html::EscapeText(const std::string& s, bool EscapeSpaces,
|
||||
bool ReplaceTabs) {
|
||||
|
||||
unsigned len = s.size();
|
||||
std::ostringstream os;
|
||||
|
@ -90,7 +95,13 @@ std::string html::EscapeText(const std::string& s, bool EscapeSpaces) {
|
|||
else os << ' ';
|
||||
break;
|
||||
|
||||
case '\t': for (unsigned i = 0; i < 4; ++i) os << " "; 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;
|
||||
|
|
Loading…
Reference in New Issue