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.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49406 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Rewrite/HTMLRewrite.cpp b/lib/Rewrite/HTMLRewrite.cpp
index 8bc44e3..3e0d71a 100644
--- a/lib/Rewrite/HTMLRewrite.cpp
+++ b/lib/Rewrite/HTMLRewrite.cpp
@@ -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 @@
         break;
 
       case '\t': {
+        if (!ReplaceTabs)
+          break;
+        
         SourceLocation Loc = SourceLocation::getFileLoc(FileID, FilePos);
         
         if (EscapeSpaces)
@@ -72,7 +76,8 @@
   }
 }
 
-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 @@
         else os << ' ';
         break;
         
-        case '\t': for (unsigned i = 0; i < 4; ++i) os << "&nbsp;"; break;
+        case '\t':
+          if (ReplaceTabs)
+            for (unsigned i = 0; i < 4; ++i) os << "&nbsp;";
+          else os << c;
+        
+          break;
+        
         case '<': os << "&lt;"; break;
         case '>': os << "&gt;"; break;
         case '&': os << "&amp;"; break;