summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxi <xi@18f92427-320e-0410-9341-c67f048884a3>2008-12-04 11:32:12 +0000
committerxi <xi@18f92427-320e-0410-9341-c67f048884a3>2008-12-04 11:32:12 +0000
commitf5c5eeb03e263493948c1faed35ac8ff6823f5c0 (patch)
tree0be835f96daf2edcf2da544661b18a02944727f4
parente08b6dc4d30ce001eacdfc51addd7f2e9cc0389d (diff)
downloadpyyaml-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.py25
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