@@ -102,14 +102,20 @@ fn to_writer_pretty(wr: io::Writer, j: Json, indent: uint) {
102
102
String ( s) => wr. write_str ( escape_str ( * s) ) ,
103
103
Boolean ( b) => wr. write_str ( if b { ~"true " } else { ~"false " } ) ,
104
104
List ( vv) => {
105
+ if vv. len ( ) == 0 u {
106
+ wr. write_str ( ~"[ ] ") ;
107
+ return ;
108
+ }
109
+
110
+ let inner_indent = indent + 2 ;
111
+
105
112
// [
106
- wr. write_str ( spaces ( indent ) ) ;
107
- wr. write_str ( "[ " ) ;
113
+ wr. write_str ( "[ \n " ) ;
114
+ wr. write_str ( spaces ( inner_indent ) ) ;
108
115
109
116
// [ elem,
110
117
// elem,
111
118
// elem ]
112
- let inner_indent = indent + 2 ;
113
119
let mut first = true ;
114
120
for ( * vv) . each |item| {
115
121
if !first {
@@ -121,9 +127,18 @@ fn to_writer_pretty(wr: io::Writer, j: Json, indent: uint) {
121
127
} ;
122
128
123
129
// ]
124
- wr. write_str ( ~" ] ") ;
130
+ wr. write_str ( "\n " ) ;
131
+ wr. write_str ( spaces ( indent) ) ;
132
+ wr. write_str ( ~"] ") ;
125
133
}
126
134
Dict ( dd) => {
135
+ if dd. size ( ) == 0 u {
136
+ wr. write_str ( ~"{ } ") ;
137
+ return ;
138
+ }
139
+
140
+ let inner_indent = indent + 2 ;
141
+
127
142
// convert from a dictionary
128
143
let mut pairs = ~[ ] ;
129
144
for dd. each |key, value| {
@@ -134,13 +149,12 @@ fn to_writer_pretty(wr: io::Writer, j: Json, indent: uint) {
134
149
let sorted_pairs = sort:: merge_sort( |a, b| * a < = * b , pairs) ;
135
150
136
151
// {
137
- wr. write_str ( spaces ( indent ) ) ;
138
- wr. write_str( ~" { " );
152
+ wr. write_str( ~" { \n " ) ;
153
+ wr. write_str ( spaces ( inner_indent ) ) ;
139
154
140
155
// { k: v,
141
156
// k: v,
142
157
// k: v }
143
- let inner_indent = indent + 2;
144
158
let mut first = true ;
145
159
for sorted_pairs. each |kv| {
146
160
let ( key, value) = kv;
@@ -150,13 +164,15 @@ fn to_writer_pretty(wr: io::Writer, j: Json, indent: uint) {
150
164
}
151
165
first = false ;
152
166
let key = str:: append ( escape_str ( key) , ~": ");
153
- let key_indent = str::len(key);
167
+ let key_indent = inner_indent + str::len(key);
154
168
wr.write_str(key);
155
169
to_writer_pretty(wr, value, key_indent);
156
170
};
157
171
158
172
// }
159
- wr.write_str(~" } ") ;
173
+ wr.write_str(~"\n " ) ;
174
+ wr. write_str ( spaces ( indent) ) ;
175
+ wr. write_str ( ~"} ");
160
176
}
161
177
Null => wr.write_str(~" null")
162
178
}
@@ -892,6 +908,12 @@ mod tests {
892
908
assert from_str ( ~" \"foo\" ") == Ok(String(@~" foo") ) ;
893
909
}
894
910
911
+ #[ test]
912
+ fn test_unicode_hex_escapes_in_str ( ) {
913
+ assert from_str ( ~"\" \\ u12ab\" ") == Ok ( String ( @~"\u12ab ") ) ;
914
+ assert from_str ( ~"\" \\ uAB12\" ") == Ok ( String ( @~"\uAB12 ") ) ;
915
+ }
916
+
895
917
#[ test]
896
918
fn test_read_list( ) {
897
919
assert from_str( ~"[ ") ==
0 commit comments