From 1b580f98aacb3ad89d6e7e5431c00c1fa7577b2a Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 18 Mar 2008 21:26:34 +0000 Subject: [PATCH] Modified "InsertTag" (HTML rewriter) to have an optional "OutermostTag" flag to 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). llvm-svn: 48506 --- clang/include/clang/Rewrite/HTMLRewrite.h | 3 ++- clang/lib/Rewrite/HTMLRewrite.cpp | 20 +++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/clang/include/clang/Rewrite/HTMLRewrite.h b/clang/include/clang/Rewrite/HTMLRewrite.h index 3270cddf595d..43923ae3328f 100644 --- a/clang/include/clang/Rewrite/HTMLRewrite.h +++ b/clang/include/clang/Rewrite/HTMLRewrite.h @@ -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 diff --git a/clang/lib/Rewrite/HTMLRewrite.cpp b/clang/lib/Rewrite/HTMLRewrite.cpp index 3beede869707..717f6cec812f 100644 --- a/clang/lib/Rewrite/HTMLRewrite.cpp +++ b/clang/lib/Rewrite/HTMLRewrite.cpp @@ -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 << "'; 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); } }