From c3f222e4d9022c0fbfd4656b0635a894f619b6b2 Mon Sep 17 00:00:00 2001 From: jbeder Date: Thu, 29 Oct 2009 22:55:50 +0000 Subject: [PATCH] Fixed the whitespace tracking when we escape a newline in a double-quoted string --- src/scanscalar.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/scanscalar.cpp b/src/scanscalar.cpp index b3a84cb..f7f3519 100644 --- a/src/scanscalar.cpp +++ b/src/scanscalar.cpp @@ -31,6 +31,7 @@ namespace YAML // Phase #1: scan until line ending std::size_t lastNonWhitespaceChar = scalar.size(); + bool escapedNewline = false; while(!params.end.Matches(INPUT) && !Exp::Break.Matches(INPUT)) { if(!INPUT) break; @@ -48,10 +49,11 @@ namespace YAML // escaped newline? (only if we're escaping on slash) if(params.escape == '\\' && Exp::EscBreak.Matches(INPUT)) { - int n = Exp::EscBreak.Match(INPUT); - INPUT.eat(n); + // eat escape character and get out (but preserve trailing whitespace!) + INPUT.get(); lastNonWhitespaceChar = scalar.size(); - continue; + escapedNewline = true; + break; } // escape this? @@ -149,7 +151,7 @@ namespace YAML case FOLD_FLOW: if(nextEmptyLine) scalar += "\n"; - else if(!emptyLine && !nextEmptyLine) + else if(!emptyLine && !nextEmptyLine && !escapedNewline) scalar += " "; break; }