diff options
author | Anthon van der Neut <anthon@mnt.org> | 2018-08-23 07:11:21 +0200 |
---|---|---|
committer | Anthon van der Neut <anthon@mnt.org> | 2018-08-23 07:11:21 +0200 |
commit | 109fcc2deebb23025e17d981de1bd29669b33e9a (patch) | |
tree | 9a6f5b7a38ff7b28514a30f72f94223441402d73 /representer.py | |
parent | 9673bc2b6008461b3e5bcb21cad925730e92baab (diff) | |
download | ruamel.yaml-109fcc2deebb23025e17d981de1bd29669b33e9a.tar.gz |
fix #158 folded scalars not roundtripping0.15.61
Diffstat (limited to 'representer.py')
-rw-r--r-- | representer.py | 27 |
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( |