Make tab insertion really right: the number of spaces inserted

depends on the column number of the start of the tab.

llvm-svn: 49891
This commit is contained in:
Chris Lattner 2008-04-18 04:54:20 +00:00
parent c88fb63da0
commit 4bbd164a7a
1 changed files with 17 additions and 7 deletions

View File

@ -107,37 +107,47 @@ void html::EscapeText(Rewriter& R, unsigned FileID,
assert (C <= FileEnd);
RewriteBuffer &RB = R.getEditBuffer(FileID);
unsigned ColNo = 0;
for (unsigned FilePos = 0; C != FileEnd ; ++C, ++FilePos) {
switch (*C) {
default: break;
default: ++ColNo; break;
case '\n':
case '\r':
ColNo = 0;
break;
case ' ':
if (EscapeSpaces)
RB.ReplaceText(FilePos, 1, "&nbsp;", 6);
++ColNo;
break;
case '\t':
case '\t': {
if (!ReplaceTabs)
break;
unsigned NumSpaces = 8-(ColNo&7);
if (EscapeSpaces)
RB.ReplaceText(FilePos, 1, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
"&nbsp;&nbsp;&nbsp;", 6*8);
"&nbsp;&nbsp;&nbsp;", 6*NumSpaces);
else
RB.ReplaceText(FilePos, 1, " ", 8);
RB.ReplaceText(FilePos, 1, " ", NumSpaces);
ColNo += NumSpaces;
break;
}
case '<':
RB.ReplaceText(FilePos, 1, "&lt;", 4);
++ColNo;
break;
case '>':
RB.ReplaceText(FilePos, 1, "&gt;", 4);
++ColNo;
break;
case '&':
RB.ReplaceText(FilePos, 1, "&amp;", 5);
++ColNo;
break;
}
}