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.

This commit is contained in:
Kirill Simonov 2008-12-04 11:32:12 +00:00
parent b78e4948ab
commit 6282bda857

View File

@ -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