summaryrefslogtreecommitdiff
path: root/scanner.py
diff options
context:
space:
mode:
authorAnthon van der Neut <anthon@mnt.org>2016-09-04 14:01:20 +0200
committerAnthon van der Neut <anthon@mnt.org>2016-09-04 14:01:20 +0200
commitd8662dcf14f3a2a7ee1035830144edf6d94dc1bc (patch)
tree82e24ce1cba3948c291ff7d51f22b744476fd04c /scanner.py
parent3f7dc0c35e67f1435ba708921f88f075db824034 (diff)
downloadruamel.yaml-d8662dcf14f3a2a7ee1035830144edf6d94dc1bc.tar.gz
fix issue 54: space on empty lines break roundtrip0.12.7
Diffstat (limited to 'scanner.py')
-rw-r--r--scanner.py27
1 files changed, 25 insertions, 2 deletions
diff --git a/scanner.py b/scanner.py
index 5d50e27..ab78d51 100644
--- a/scanner.py
+++ b/scanner.py
@@ -1643,6 +1643,7 @@ class RoundTripScanner(Scanner):
self.allow_simple_key = True
return comment, start_mark, end_mark
if self.scan_line_break():
+ start_mark = self.get_mark()
if not self.flow_level:
self.allow_simple_key = True
ch = self.peek()
@@ -1650,14 +1651,36 @@ class RoundTripScanner(Scanner):
start_mark = self.get_mark()
comment = ''
while ch:
- ch = self.scan_line_break()
+ ch = self.scan_line_break(empty_line=True)
comment += ch
- # print('ch', repr(comment))
end_mark = self.get_mark()
return comment, start_mark, end_mark
else:
found = True
+ def scan_line_break(self, empty_line=False):
+ # Transforms:
+ # '\r\n' : '\n'
+ # '\r' : '\n'
+ # '\n' : '\n'
+ # '\x85' : '\n'
+ # '\u2028' : '\u2028'
+ # '\u2029 : '\u2029'
+ # default : ''
+ ch = self.peek()
+ if ch in u'\r\n\x85':
+ if self.prefix(2) == u'\r\n':
+ self.forward(2)
+ else:
+ self.forward()
+ return u'\n'
+ elif ch in u'\u2028\u2029':
+ self.forward()
+ return ch
+ elif empty_line and ch in '\t ':
+ return ch
+ return u''
+
# try:
# import psyco
# psyco.bind(Scanner)