In html::EscapeText, instead of going through the rewriter with

a SourceLocation to get a RewriteBuffer, poke the RewriteBuffer
with an offset directly.  THis is no faster, but results in 
cleaner code.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49774 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2008-04-16 04:33:23 +00:00
Родитель 97b7f26a92
Коммит 735271479a
2 изменённых файлов: 52 добавлений и 63 удалений

Просмотреть файл

@ -51,30 +51,6 @@ public:
iterator end() const { return Buffer.end(); }
unsigned size() const { return Buffer.size(); }
private: // Methods only usable by Rewriter.
/// Initialize - Start this rewrite buffer out with a copy of the unmodified
/// input buffer.
void Initialize(const char *BufStart, const char *BufEnd) {
Buffer.assign(BufStart, BufEnd);
}
/// getMappedOffset - Given an offset into the original SourceBuffer that this
/// RewriteBuffer is based on, map it into the offset space of the
/// RewriteBuffer. If AfterInserts is true and if the OrigOffset indicates a
/// position where text is inserted, the location returned will be after any
/// inserted text at the position.
unsigned getMappedOffset(unsigned OrigOffset,
bool AfterInserts = false) const{
return Deltas.getDeltaAt(OrigOffset+AfterInserts)+OrigOffset;
}
/// AddDelta - When a change is made that shifts around the text buffer, this
/// method is used to record that info.
void AddDelta(unsigned OrigOffset, int Change) {
return Deltas.AddDelta(OrigOffset, Change);
}
/// RemoveText - Remove the specified text.
void RemoveText(unsigned OrigOffset, unsigned Size);
@ -110,6 +86,29 @@ private: // Methods only usable by Rewriter.
void ReplaceText(unsigned OrigOffset, unsigned OrigLength,
const char *NewStr, unsigned NewLength);
private: // Methods only usable by Rewriter.
/// Initialize - Start this rewrite buffer out with a copy of the unmodified
/// input buffer.
void Initialize(const char *BufStart, const char *BufEnd) {
Buffer.assign(BufStart, BufEnd);
}
/// getMappedOffset - Given an offset into the original SourceBuffer that this
/// RewriteBuffer is based on, map it into the offset space of the
/// RewriteBuffer. If AfterInserts is true and if the OrigOffset indicates a
/// position where text is inserted, the location returned will be after any
/// inserted text at the position.
unsigned getMappedOffset(unsigned OrigOffset,
bool AfterInserts = false) const{
return Deltas.getDeltaAt(OrigOffset+AfterInserts)+OrigOffset;
}
/// AddDelta - When a change is made that shifts around the text buffer, this
/// method is used to record that info.
void AddDelta(unsigned OrigOffset, int Change) {
return Deltas.AddDelta(OrigOffset, Change);
}
};

Просмотреть файл

@ -30,49 +30,38 @@ void html::EscapeText(Rewriter& R, unsigned FileID,
assert (C <= FileEnd);
RewriteBuffer &RB = R.getEditBuffer(FileID);
for (unsigned FilePos = 0; C != FileEnd ; ++C, ++FilePos) {
switch (*C) {
default: break;
case ' ':
if (EscapeSpaces) {
SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos);
R.ReplaceText(Loc, 1, "&nbsp;", 6);
}
break;
default: break;
case ' ':
if (EscapeSpaces)
RB.ReplaceText(FilePos, 1, "&nbsp;", 6);
break;
case '\t': {
if (!ReplaceTabs)
break;
SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos);
if (EscapeSpaces)
R.ReplaceText(Loc, 1, "&nbsp;&nbsp;&nbsp;&nbsp;", 6*4);
else
R.ReplaceText(Loc, 1, " ", 4);
case '\t':
if (!ReplaceTabs)
break;
}
case '<': {
SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos);
R.ReplaceText(Loc, 1, "&lt;", 4);
break;
}
case '>': {
SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos);
R.ReplaceText(Loc, 1, "&gt;", 4);
break;
}
case '&': {
SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos);
R.ReplaceText(Loc, 1, "&amp;", 5);
break;
}
if (EscapeSpaces)
RB.ReplaceText(FilePos, 1, "&nbsp;&nbsp;&nbsp;&nbsp;", 6*4);
else
RB.ReplaceText(FilePos, 1, " ", 4);
break;
case '<':
RB.ReplaceText(FilePos, 1, "&lt;", 4);
break;
case '>':
RB.ReplaceText(FilePos, 1, "&gt;", 4);
break;
case '&':
RB.ReplaceText(FilePos, 1, "&amp;", 5);
break;
}
}
}
@ -98,7 +87,8 @@ std::string html::EscapeText(const std::string& s, bool EscapeSpaces,
case '\t':
if (ReplaceTabs)
for (unsigned i = 0; i < 4; ++i) os << "&nbsp;";
for (unsigned i = 0; i < 4; ++i)
os << "&nbsp;";
else os << c;
break;