diff options
author | Manuel Klimek <klimek@google.com> | 2013-12-03 09:46:06 +0000 |
---|---|---|
committer | Manuel Klimek <klimek@google.com> | 2013-12-03 09:46:06 +0000 |
commit | f54dcbc4e65a1d9d6a9c5731ed5ffd86a87c89ac (patch) | |
tree | ad18a6df51bb16957220074c63828a0be7d73392 | |
parent | 907eb5b630d40ecdbeeba7cba7801028b6aecb0e (diff) | |
download | bcm5719-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.cpp | 25 |
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() << " "; + break; + case '\r': + llvm::outs() << " "; + 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 { |