@@ -26,7 +26,27 @@ def ignore_aliases(self, data):
2626yaml_item_annotation_re = re .compile (r"^__yq_(?P<type>tag|style)_(?P<key>\d+)_(?P<value>.+)__$" )
2727
2828
29- def get_dumper (use_annotations = False , indentless = False , grammar_version = "1.1" ):
29+ def extractStringStyle (v ):
30+ if v .value .startswith ("__yq_style_|__" ):
31+ v .value = v .value [14 :]
32+ v .style = '|'
33+ elif v .value .startswith ("__yq_style_>__" ):
34+ v .value = v .value [14 :]
35+ v .style = '>'
36+ elif v .value .startswith ("__yq_style_'__" ):
37+ v .value = v .value [14 :]
38+ v .style = '\' '
39+ elif v .value .startswith ("__yq_style_\" __" ):
40+ v .value = v .value [14 :]
41+ v .style = '"'
42+ elif v .value .startswith ("__yq_style____" ):
43+ v .value = v .value [14 :]
44+ v .style = None
45+
46+ return v
47+
48+
49+ def get_dumper (use_annotations = False , indentless = False , grammar_version = "1.1" , use_string_styles = False ):
3050 # if not (use_annotations or indentless):
3151 # return default_dumper
3252
@@ -55,6 +75,7 @@ def represent_dict(dumper, data):
5575 v .flow_style = True
5676 if hashed_key in custom_tags :
5777 v .tag = custom_tags [hashed_key ]
78+
5879 return mapping
5980
6081 def represent_list (dumper , data ):
@@ -79,10 +100,17 @@ def represent_list(dumper, data):
79100 v .flow_style = True
80101 if str (i ) in custom_tags :
81102 v .tag = custom_tags [str (i )]
103+
82104 return sequence
83105
106+ def represent_str (dumper , data ):
107+ scalar = dumper .represent_scalar ("tag:yaml.org,2002:str" , value = data )
108+ return extractStringStyle (scalar )
109+
84110 dumper = OrderedIndentlessDumper if indentless else OrderedDumper
85111 dumper .add_representer (dict , represent_dict )
86112 dumper .add_representer (list , represent_list )
113+ if use_string_styles :
114+ dumper .add_representer (str , represent_str )
87115 set_yaml_grammar (dumper , grammar_version = grammar_version )
88116 return dumper
0 commit comments