]> granicus.if.org Git - clang/commitdiff
Modified "InsertTag" (HTML rewriter) to have an optional "OutermostTag" flag to
authorTed Kremenek <kremenek@apple.com>
Tue, 18 Mar 2008 21:26:34 +0000 (21:26 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 18 Mar 2008 21:26:34 +0000 (21:26 +0000)
indicate whether or not the new tag should be the outermost tag at the specified
location (in the case that other tags have been inserted at the same spot).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48506 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Rewrite/HTMLRewrite.h
lib/Rewrite/HTMLRewrite.cpp

index 3270cddf595d553143b686ec77ec0d6902dab596..43923ae3328f03dd2049323f7c33609350af1557 100644 (file)
@@ -29,7 +29,8 @@ namespace html {
 
   void InsertTag(Rewriter& R, Tags tag,
                  SourceLocation OpenLoc, SourceLocation CloseLoc,
-                 bool NewlineOpen = false, bool NewlineClose = true);
+                 bool NewlineOpen = false, bool NewlineClose = true,
+                 bool OutermostTag = false);
 
 } // end html namespace
 } // end clang namespace
index 3beede869707b1ed033185da6297e3bc91fbfd51..717f6cec812f6a6cd7fbf381b3df457699514cde 100644 (file)
@@ -48,7 +48,7 @@ void html::EscapeText(Rewriter& R, unsigned FileID, bool EscapeSpaces) {
 
 void html::InsertTag(Rewriter& R, html::Tags tag,
                      SourceLocation B, SourceLocation E,
-                     bool NewlineOpen, bool NewlineClose) {
+                     bool NewlineOpen, bool NewlineClose, bool OutermostTag) {
   
   const char* TagStr = 0;
   
@@ -65,13 +65,27 @@ void html::InsertTag(Rewriter& R, html::Tags tag,
     std::ostringstream os;  
     os << '<' << TagStr << '>';
     if (NewlineOpen) os << '\n';
-    R.InsertTextAfter(B, os.str().c_str(), os.str().size());
+    
+    const char* s = os.str().c_str();
+    unsigned n = os.str().size();
+    
+    if (OutermostTag)
+      R.InsertTextBefore(B, s, n);
+    else
+      R.InsertTextAfter(B, s, n);
   }
   
   { // Generate the closing tag.
     std::ostringstream os;  
     os << "</" << TagStr << '>';
     if (NewlineClose) os << '\n';
-    R.InsertTextBefore(E, os.str().c_str(), os.str().size());
+    
+    const char* s = os.str().c_str();
+    unsigned n = os.str().size();
+    
+    if (OutermostTag)
+      R.InsertTextAfter(E, s, n);
+    else
+      R.InsertTextBefore(E, s, n);
   }
 }