From 1132c8df2160ac24f881e3e792877a70300d2c84 Mon Sep 17 00:00:00 2001 From: jbeder Date: Fri, 4 Mar 2011 02:26:59 +0000 Subject: [PATCH] Fixed folding bug (detecting indentation, example 8.2), and clipping/stripping empty strings (example 8.6) --- src/scanscalar.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/scanscalar.cpp b/src/scanscalar.cpp index 1adc469..2a7afa9 100644 --- a/src/scanscalar.cpp +++ b/src/scanscalar.cpp @@ -143,7 +143,7 @@ namespace YAML if(!nextEmptyLine && foldedNewlineCount > 0) { scalar += std::string(foldedNewlineCount - 1, '\n'); - if(foldedNewlineStartedMoreIndented || nextMoreIndented) + if(foldedNewlineStartedMoreIndented || nextMoreIndented | !foundNonEmptyLine) scalar += "\n"; foldedNewlineCount = 0; } @@ -175,12 +175,23 @@ namespace YAML scalar.erase(pos + 1); } - if(params.chomp == STRIP || params.chomp == CLIP) { - std::size_t pos = scalar.find_last_not_of('\n'); - if(params.chomp == CLIP && pos + 1 < scalar.size()) - scalar.erase(pos + 2); - else if(params.chomp == STRIP && pos < scalar.size()) - scalar.erase(pos + 1); + switch(params.chomp) { + case CLIP: { + const std::size_t pos = scalar.find_last_not_of('\n'); + if(pos == std::string::npos) + scalar.erase(); + else if(pos + 1 < scalar.size()) + scalar.erase(pos + 2); + } break; + case STRIP: { + const std::size_t pos = scalar.find_last_not_of('\n'); + if(pos == std::string::npos) + scalar.erase(); + else if(pos < scalar.size()) + scalar.erase(pos + 1); + } break; + default: + break; } return scalar;