More cleanups to HTML rewriter API: remove the InsertTag method; was too complicated
and clients can achieve a cleaner design just by inserting tags directly.  Reserve
the "html" namespace for meta-level operations (e.g., escaping text, etc.)


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48524 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Rewrite/HTMLRewrite.cpp b/lib/Rewrite/HTMLRewrite.cpp
index 79fff28..32d20df 100644
--- a/lib/Rewrite/HTMLRewrite.cpp
+++ b/lib/Rewrite/HTMLRewrite.cpp
@@ -20,10 +20,6 @@
 
 using namespace clang;
 
-//===----------------------------------------------------------------------===//
-// Basic operations.
-//===----------------------------------------------------------------------===//
-
 void html::EscapeText(Rewriter& R, unsigned FileID, bool EscapeSpaces) {
   
   const llvm::MemoryBuffer *Buf = R.getSourceMgr().getBuffer(FileID);
@@ -50,83 +46,19 @@
   }
 }
 
-
-static void TagOpen(Rewriter& R, const char* TagStr,
-                    const char* Attr, const char* Content,
-                    SourceLocation L, bool InsertBefore) {
-  
-  std::ostringstream os;
-  os << '<' << TagStr;
-  if (Attr) os << ' ' << Attr;
-  os << '>';
-  if (Content) os << Content;
-  
-  if (InsertBefore)
-    R.InsertTextBefore(L, os.str().c_str(), os.str().size());
-  else
-    R.InsertTextAfter(L, os.str().c_str(), os.str().size());
-}
-
-static void TagClose(Rewriter& R, const char* TagStr, SourceLocation L,
-                     bool Newline, bool InsertBefore) {
-  
-  std::ostringstream os;
-  os << "</" << TagStr << ">";
-  if (Newline) os << '\n';
-  
-  if (InsertBefore)
-    R.InsertTextBefore(L, os.str().c_str(), os.str().size());
-  else
-    R.InsertTextAfter(L, os.str().c_str(), os.str().size());
-}
-
-void html::InsertTag(Rewriter& R, html::Tags tag,
-                     SourceLocation B, SourceLocation E,
-                     const char* Attr, const char* Content, bool Newline,
-                     bool OpenInsertBefore, bool CloseInsertBefore) {
-  
-  const char* TagStr = 0;
-  
-  switch (tag) {
-    default: break;      
-    case BODY: TagStr = "body"; break;
-    case DIV:  TagStr = "div";  break;
-    case HEAD: TagStr = "head"; break;
-    case HTML: TagStr = "html"; break;
-    case PRE:  TagStr = "pre";  break;
-    case SPAN: TagStr = "span"; break;
-    case STYLE: TagStr = "style"; break;
-  }
-  
-  assert (TagStr && "Tag not supported.");
-
-  // Generate the opening tag.  We also generate the closing
-  // tag of the start and end SourceLocations are the same.
-
-  if (OpenInsertBefore) {    
-    TagClose(R, TagStr, E, Newline, CloseInsertBefore);
-    TagOpen(R, TagStr, Attr, Content, B, true);
-  }
-  else {
-    TagOpen(R, TagStr, Attr, Content, B, false);
-    TagClose(R, TagStr, E, Newline, true);
-  }
-}
-
-//===----------------------------------------------------------------------===//
-// High-level operations.
-//===----------------------------------------------------------------------===//
-
 static void AddLineNumber(Rewriter& R, unsigned LineNo,
                           SourceLocation B, SourceLocation E) {
+    
+  // Surround the line with a span tag.
   
-  // Add two "div" tags: one to contain the line number, and the other
-  // to contain the content of the line.
+  R.InsertTextBefore(E, "</span>", 7);
+  R.InsertTextBefore(B, "<span style=lines>", 18);
+  
+  // Insert a span tag for the line number.
 
   std::ostringstream os;
-  os << LineNo;
-  html::InsertTag(R, html::SPAN, B, E, "style=lines");  
-  html::InsertTag(R, html::SPAN, B, B, "style=nums", os.str().c_str());  
+  os << "<span style=nums>" << LineNo << "</span>";
+  R.InsertTextBefore(B, os.str().c_str(), os.str().size());
 }
 
 void html::AddLineNumbers(Rewriter& R, unsigned FileID) {