summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Klimek <klimek@google.com>2013-12-03 09:46:06 +0000
committerManuel Klimek <klimek@google.com>2013-12-03 09:46:06 +0000
commitf54dcbc4e65a1d9d6a9c5731ed5ffd86a87c89ac (patch)
treead18a6df51bb16957220074c63828a0be7d73392
parent907eb5b630d40ecdbeeba7cba7801028b6aecb0e (diff)
downloadbcm5719-llvm-f54dcbc4e65a1d9d6a9c5731ed5ffd86a87c89ac.tar.gz
bcm5719-llvm-f54dcbc4e65a1d9d6a9c5731ed5ffd86a87c89ac.zip
Preserve carriage return when using clang-format's XML interface.
Patch by James Park. llvm-svn: 196265
-rw-r--r--clang/tools/clang-format/ClangFormat.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/clang/tools/clang-format/ClangFormat.cpp b/clang/tools/clang-format/ClangFormat.cpp
index 513439649d2..d8c0b51ee1c 100644
--- a/clang/tools/clang-format/ClangFormat.cpp
+++ b/clang/tools/clang-format/ClangFormat.cpp
@@ -179,6 +179,26 @@ static bool fillRanges(SourceManager &Sources, FileID ID,
return false;
}
+static void outputReplacementXML(StringRef Text) {
+ size_t From = 0;
+ size_t Index;
+ while ((Index = Text.find_first_of("\n\r", From)) != StringRef::npos) {
+ llvm::outs() << Text.substr(From, Index - From);
+ switch (Text[Index]) {
+ case '\n':
+ llvm::outs() << "&#10;";
+ break;
+ case '\r':
+ llvm::outs() << "&#13;";
+ break;
+ default:
+ llvm_unreachable("Unexpected character encountered!");
+ }
+ From = Index + 1;
+ }
+ llvm::outs() << Text.substr(From);
+}
+
// Returns true on error.
static bool format(StringRef FileName) {
FileManager Files((FileSystemOptions()));
@@ -211,8 +231,9 @@ static bool format(StringRef FileName) {
I != E; ++I) {
llvm::outs() << "<replacement "
<< "offset='" << I->getOffset() << "' "
- << "length='" << I->getLength() << "'>"
- << I->getReplacementText() << "</replacement>\n";
+ << "length='" << I->getLength() << "'>";
+ outputReplacementXML(I->getReplacementText());
+ llvm::outs() << "</replacement>\n";
}
llvm::outs() << "</replacements>\n";
} else {
OpenPOWER on IntegriCloud