Fixed the whitespace tracking when we escape a newline in a double-quoted string

This commit is contained in:
jbeder
2009-10-29 22:55:50 +00:00
parent e8beb6c98f
commit c3f222e4d9

View File

@@ -31,6 +31,7 @@ namespace YAML
// Phase #1: scan until line ending // Phase #1: scan until line ending
std::size_t lastNonWhitespaceChar = scalar.size(); std::size_t lastNonWhitespaceChar = scalar.size();
bool escapedNewline = false;
while(!params.end.Matches(INPUT) && !Exp::Break.Matches(INPUT)) { while(!params.end.Matches(INPUT) && !Exp::Break.Matches(INPUT)) {
if(!INPUT) if(!INPUT)
break; break;
@@ -48,10 +49,11 @@ namespace YAML
// escaped newline? (only if we're escaping on slash) // escaped newline? (only if we're escaping on slash)
if(params.escape == '\\' && Exp::EscBreak.Matches(INPUT)) { if(params.escape == '\\' && Exp::EscBreak.Matches(INPUT)) {
int n = Exp::EscBreak.Match(INPUT); // eat escape character and get out (but preserve trailing whitespace!)
INPUT.eat(n); INPUT.get();
lastNonWhitespaceChar = scalar.size(); lastNonWhitespaceChar = scalar.size();
continue; escapedNewline = true;
break;
} }
// escape this? // escape this?
@@ -149,7 +151,7 @@ namespace YAML
case FOLD_FLOW: case FOLD_FLOW:
if(nextEmptyLine) if(nextEmptyLine)
scalar += "\n"; scalar += "\n";
else if(!emptyLine && !nextEmptyLine) else if(!emptyLine && !nextEmptyLine && !escapedNewline)
scalar += " "; scalar += " ";
break; break;
} }