<div dir="ltr"><div>Index: tools/clang-format/ClangFormat.cpp</div><div>===================================================================</div><div>--- tools/clang-format/ClangFormat.cpp  (revision 195826)</div><div>+++ tools/clang-format/ClangFormat.cpp  (working copy)</div>
<div>@@ -173,6 +173,27 @@</div><div>   return false;</div><div> }</div><div> </div><div>+static void outputReplacementXML(StringRef Text) {</div><div>+  const char *Data = Text.data();</div><div><br></div><div>There's usually no need to go back to raw char *'s when you have StringRef's (they kinda replace raw char *s).</div>
<div><br></div><div>+  size_t From = 0;</div><div><br></div><div>Any reason to have different types for From and Index?</div><div><br></div><div>+  StringRef::size_type Index;</div><div>+  while ((Index = Text.find_first_of("\n\r", From)) != StringRef::npos) {</div>
<div>+    llvm::outs().write(Data + From, Index - From);</div><div><br></div><div>llvm::outs() << Text.substr(From, Index - From);</div><div><br></div><div>+    switch (Data[Index]) {</div><div>+    case '\n':</div>
<div>+      llvm::outs() << "&#10;";</div><div>+      break;</div><div>+    case '\r':</div><div>+      llvm::outs() << "&#13;";</div><div>+      break;</div><div>+    default:</div>
<div>+      llvm::errs() << "error: unexpected character encountered\n";</div><div><br></div><div>As this would be a logic error, I'd use llvm_unreachable(...);</div><div><br></div><div>+    }</div><div>
+    From = Index + 1;</div><div>+  }</div><div>+  llvm::outs().write(Data + From, Text.size() - From);</div><div><br></div><div>llvm::outs() << Text.substr(From);</div><div><br></div><div>+}</div><div>+</div><div> // Returns true on error.</div>
<div> static bool format(StringRef FileName) {</div><div>   FileManager Files((FileSystemOptions()));</div><div>@@ -205,8 +226,9 @@</div><div>          I != E; ++I) {</div><div>       llvm::outs() << "<replacement "</div>
<div>                    << "offset='" << I->getOffset() << "' "</div><div>-                   << "length='" << I->getLength() << "'>"</div>
<div>-                   << I->getReplacementText() << "</replacement>\n";</div><div>+                   << "length='" << I->getLength() << "'>";</div>
<div>+      outputReplacementXML(I->getReplacementText());</div><div>+      llvm::outs() << "</replacement>\n";</div><div>     }</div><div>     llvm::outs() << "</replacements>\n";</div>
<div>   } else {</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Nov 28, 2013 at 12:42 AM, jpark37 . <span dir="ltr"><<a href="mailto:jpark37@gmail.com" target="_blank">jpark37@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Oops, sorry; the attached patch is updated and retested. I ran clang-format, and it created more diffs than just my changes; those have been undone to keep the patch focused. I've also switched the cascading if to a switch statement.<br>

<br></div><div>- James<br></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Nov 27, 2013 at 5:24 PM, Daniel Jasper <span dir="ltr"><<a href="mailto:djasper@google.com" target="_blank">djasper@google.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I'd like Manuel to take a look, but in general, please format Clang/LLVM files with the correct style (i.e. "clang-format -style LLVM") :-).</div>

<div class="gmail_extra"><br><br><div class="gmail_quote"><div><div>
On Wed, Nov 27, 2013 at 11:28 AM, jpark37 . <span dir="ltr"><<a href="mailto:jpark37@gmail.com" target="_blank">jpark37@gmail.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div>
<div dir="ltr">Hello there,<br><br>I'm seeing newlines without carriage returns when using the clang-format plugin for Visual Studio. The issue seems to be that clang-format is not escaping newline characters when run with -output-replacements-xml, so the .NET XML stuff ends up collapsing \r\n down to \n. I've attached a patch that I've tested and appears to address the problem.<br>



<br>- James<br></div>
<br></div></div>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>