зеркало из https://github.com/microsoft/clang-1.git
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:
Родитель
97b7f26a92
Коммит
735271479a
|
@ -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, " ", 6);
|
||||
}
|
||||
break;
|
||||
default: break;
|
||||
|
||||
case ' ':
|
||||
if (EscapeSpaces)
|
||||
RB.ReplaceText(FilePos, 1, " ", 6);
|
||||
break;
|
||||
|
||||
case '\t': {
|
||||
if (!ReplaceTabs)
|
||||
break;
|
||||
|
||||
SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos);
|
||||
|
||||
if (EscapeSpaces)
|
||||
R.ReplaceText(Loc, 1, " ", 6*4);
|
||||
else
|
||||
R.ReplaceText(Loc, 1, " ", 4);
|
||||
|
||||
case '\t':
|
||||
if (!ReplaceTabs)
|
||||
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;
|
||||
}
|
||||
if (EscapeSpaces)
|
||||
RB.ReplaceText(FilePos, 1, " ", 6*4);
|
||||
else
|
||||
RB.ReplaceText(FilePos, 1, " ", 4);
|
||||
break;
|
||||
|
||||
case '<':
|
||||
RB.ReplaceText(FilePos, 1, "<", 4);
|
||||
break;
|
||||
|
||||
case '>':
|
||||
RB.ReplaceText(FilePos, 1, ">", 4);
|
||||
break;
|
||||
|
||||
case '&':
|
||||
RB.ReplaceText(FilePos, 1, "&", 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 << " ";
|
||||
for (unsigned i = 0; i < 4; ++i)
|
||||
os << " ";
|
||||
else os << c;
|
||||
|
||||
break;
|
||||
|
|
Загрузка…
Ссылка в новой задаче