diff options
author | xi <xi@18f92427-320e-0410-9341-c67f048884a3> | 2008-12-04 11:32:12 +0000 |
---|---|---|
committer | xi <xi@18f92427-320e-0410-9341-c67f048884a3> | 2008-12-04 11:32:12 +0000 |
commit | f5c5eeb03e263493948c1faed35ac8ff6823f5c0 (patch) | |
tree | 0be835f96daf2edcf2da544661b18a02944727f4 | |
parent | e08b6dc4d30ce001eacdfc51addd7f2e9cc0389d (diff) | |
download | pyyaml-f5c5eeb03e263493948c1faed35ac8ff6823f5c0.tar.gz |
Fixed a problem with emitting block scalars (thanks to Andrey Somov): no longer emit indentation spaces when they are not needed; emit the correct number of leading breaks for folded scalars; emit the '+' chomping indicator for a single break scalar.
git-svn-id: http://svn.pyyaml.org/pyyaml/trunk@304 18f92427-320e-0410-9341-c67f048884a3
-rw-r--r-- | lib/yaml/emitter.py | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/lib/yaml/emitter.py b/lib/yaml/emitter.py index b04ee9e..a4e99e0 100644 --- a/lib/yaml/emitter.py +++ b/lib/yaml/emitter.py @@ -1009,25 +1009,22 @@ class Emitter(object): def determine_block_hints(self, text): hints = u'' - if text and text[0] in u' \n\x85\u2028\u2029': - hints += unicode(self.best_indent) - tail = text[-2:] - while len(tail) < 2: - tail = u' '+tail - if tail[-1] in u'\n\x85\u2028\u2029': - if tail[-2] in u'\n\x85\u2028\u2029': + if text: + if text[0] in u' \n\x85\u2028\u2029': + hints += unicode(self.best_indent) + if text[-1] not in u'\n\x85\u2028\u2029': + hints += u'-' + elif len(text) == 1 or text[-2] in u'\n\x85\u2028\u2029': hints += u'+' - else: - hints += u'-' return hints def write_folded(self, text): hints = self.determine_block_hints(text) self.write_indicator(u'>'+hints, True) - self.write_indent() - leading_space = False + self.write_line_break() + leading_space = True spaces = False - breaks = False + breaks = True start = end = 0 while end <= len(text): ch = None @@ -1075,8 +1072,8 @@ class Emitter(object): def write_literal(self, text): chomp = self.determine_block_hints(text) self.write_indicator(u'|'+chomp, True) - self.write_indent() - breaks = False + self.write_line_break() + breaks = True start = end = 0 while end <= len(text): ch = None |