summaryrefslogtreecommitdiff
path: root/representer.py
diff options
context:
space:
mode:
authorAnthon van der Neut <anthon@mnt.org>2018-08-23 07:11:21 +0200
committerAnthon van der Neut <anthon@mnt.org>2018-08-23 07:11:21 +0200
commit109fcc2deebb23025e17d981de1bd29669b33e9a (patch)
tree9a6f5b7a38ff7b28514a30f72f94223441402d73 /representer.py
parent9673bc2b6008461b3e5bcb21cad925730e92baab (diff)
downloadruamel.yaml-109fcc2deebb23025e17d981de1bd29669b33e9a.tar.gz
fix #158 folded scalars not roundtripping0.15.61
Diffstat (limited to 'representer.py')
-rw-r--r--representer.py27
1 files changed, 23 insertions, 4 deletions
diff --git a/representer.py b/representer.py
index b9175d6..3088139 100644
--- a/representer.py
+++ b/representer.py
@@ -7,7 +7,8 @@ from ruamel.yaml.error import * # NOQA
from ruamel.yaml.nodes import * # NOQA
from ruamel.yaml.compat import text_type, binary_type, to_unicode, PY2, PY3, ordereddict
from ruamel.yaml.scalarstring import (
- PreservedScalarString,
+ LiteralScalarString,
+ FoldedScalarString,
SingleQuotedScalarString,
DoubleQuotedScalarString,
)
@@ -149,7 +150,7 @@ class BaseRepresenter(object):
if style is None:
style = self.default_style
comment = None
- if style and style[0] == '|':
+ if style and style[0] in '|>':
comment = getattr(value, 'comment', None)
if comment:
comment = [None, [comment]]
@@ -667,7 +668,7 @@ class RoundTripRepresenter(SafeRepresenter):
return self.represent_scalar(u'tag:yaml.org,2002:null', u'null')
return self.represent_scalar(u'tag:yaml.org,2002:null', "")
- def represent_preserved_scalarstring(self, data):
+ def represent_literal_scalarstring(self, data):
# type: (Any) -> Any
tag = None
style = '|'
@@ -676,6 +677,20 @@ class RoundTripRepresenter(SafeRepresenter):
tag = u'tag:yaml.org,2002:str'
return self.represent_scalar(tag, data, style=style)
+ represent_preserved_scalarstring = represent_literal_scalarstring
+
+ def represent_folded_scalarstring(self, data):
+ # type: (Any) -> Any
+ tag = None
+ style = '>'
+ for fold_pos in reversed(getattr(data, 'fold_pos', [])):
+ if data[fold_pos] == ' ':
+ data = data[:fold_pos] + '\a' + data[fold_pos:]
+ if PY2 and not isinstance(data, unicode):
+ data = unicode(data, 'ascii')
+ tag = u'tag:yaml.org,2002:str'
+ return self.represent_scalar(tag, data, style=style)
+
def represent_single_quoted_scalarstring(self, data):
# type: (Any) -> Any
tag = None
@@ -1113,7 +1128,11 @@ class RoundTripRepresenter(SafeRepresenter):
RoundTripRepresenter.add_representer(type(None), RoundTripRepresenter.represent_none)
RoundTripRepresenter.add_representer(
- PreservedScalarString, RoundTripRepresenter.represent_preserved_scalarstring
+ LiteralScalarString, RoundTripRepresenter.represent_literal_scalarstring
+)
+
+RoundTripRepresenter.add_representer(
+ FoldedScalarString, RoundTripRepresenter.represent_folded_scalarstring
)
RoundTripRepresenter.add_representer(