Skip to content

Commit 2c5a9bc

Browse files
authored
improved implied_print (#1953)
1 parent d8c2ff3 commit 2c5a9bc

File tree

1 file changed

+43
-31
lines changed

1 file changed

+43
-31
lines changed

src/pro/utilities/gdl_implied_print.pro

+43-31
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
;
1818
;-
1919
;
20-
function pretty_serialize,value,tagname=tagname,arrayIdentifier=arrayIdentifier
21-
common json_serialize_gdl_level, level, types
20+
function pretty_serialize,value,tagname=tagname,flat=flat
21+
common json_serialize_gdl_level, level
2222
COMPILE_OPT idl2, HIDDEN
2323
ON_ERROR,2
2424
;; CATCH, Error_status
@@ -32,12 +32,21 @@ if (n_elements(level) eq 0) then begin
3232
endif
3333
space=''
3434
for i=0,level do space+=' '
35-
braceright=string(10B)+space+'}'
36-
XXright=string(10B)+space+']'
37-
braceleft='{'+string(10B)
38-
XXleft='['+string(10B)
39-
comma=','+string(10B)
40-
arrayIdentifier=keyword_set(arrayIdentifier)
35+
if keyword_set(flat) then begin
36+
braceright='}'
37+
SquareBraceright=']'
38+
braceleft='{'
39+
SquareBraceleft='['
40+
comma=','
41+
endif else begin
42+
braceright=string(10B)+space+'}'
43+
SquareBraceright=string(10B)+space+']'
44+
braceleft='{'+string(10B)
45+
SquareBraceleft='['+string(10B)
46+
comma=','+string(10B)
47+
endelse
48+
49+
4150
ret=size(value)
4251
ndim=ret[0]
4352
type=ret[ndim+1]
@@ -56,30 +65,30 @@ endif else tmpstr=''
5665
case type of
5766
8: begin
5867
tagn=tag_names(value)
59-
tmpstr+=braceleft & level++
60-
for j=0,n_tags(value)-1 do begin
61-
tmpstr+=pretty_serialize(tagname=tagn[j],value.(j),/arrayIdentifier)
62-
if j lt n_tags(value)-1 then tmpstr+=comma
68+
tmpstr+=braceleft & level++
69+
for j=0,n_tags(value)-1 do begin
70+
tmpstr+=pretty_serialize(tagname=tagn[j],value.(j), /flat)
71+
if j lt n_tags(value)-1 then tmpstr+=comma
72+
endfor
73+
tmpstr+=braceright & level--
6374
end
64-
tmpstr+=braceright & level--
65-
end
6675

6776
11: begin ; more tricky depending on single value of array
6877
mytype=typename(value)
6978
if (mytype eq 'LIST') then begin
70-
tmpstr+=XXleft & level++
79+
tmpstr+=SquareBraceleft & level++
7180
nn=value.Count()
7281
for j=0,nn-1 do begin
7382
tmpstr+=pretty_serialize(value[j])
7483
if (j lt nn-1) then tmpstr+=comma
7584
endfor
76-
tmpstr+=XXright & level --
85+
tmpstr+=SquareBraceright & level --
7786
endif else begin
7887
tmpstr+=braceleft & level++
7988
nn=value.Count()
8089
keys=value.Keys()
8190
for j=0,nn-1 do begin
82-
tmpstr+=pretty_serialize(tagname=keys[j],value[keys[j]])
91+
tmpstr+=pretty_serialize(tagname=keys[j],value[keys[j]],/flat)
8392
if (j lt nn-1) then tmpstr+=comma
8493
endfor
8594
tmpstr+=braceright & level--
@@ -98,36 +107,36 @@ endif else tmpstr=''
98107

99108

100109
endif else begin
101-
if (arrayIdentifier) then tmpstr+="["
102-
nel=n_elements(value)
110+
nel=n_elements(value)
111+
if nel gt 1 then tmpstr+='['
103112
for i=0,nel-1 do begin
104113
case type of
105114
8: begin
106115
tagn=tag_names(value[i])
107-
tmpstr+='{'
116+
tmpstr+=braceleft & level++
108117
for j=0,n_tags(value[i])-1 do begin
109-
tmpstr+=pretty_serialize(tagname=tagn[j],value[i].(j),/arrayIdentifier)
118+
tmpstr+=pretty_serialize(tagname=tagn[j],value[i].(j),/flat)
110119
if (j lt n_tags(value[i])-1 ) then tmpstr+=comma
111120
end
112-
tmpstr+='}'
121+
tmpstr+=braceright & level--
113122
end
114123

115124
11: begin ; more tricky depending on single value of array
116125
mytype=typename(value[i])
117126
if (mytype eq 'LIST') then begin
118-
tmpstr+='['
127+
tmpstr+=SquareBraceleft & level++
119128
nn=value[i].Count()
120129
for j=0,nn-1 do begin
121130
tmpstr+=pretty_serialize((value[i])[j])
122131
if (j lt nn-1) then tmpstr+=comma
123132
endfor
124-
tmpstr+=']'
133+
tmpstr+=SquareBraceright & level--
125134
endif else begin
126135
tmpstr+=braceleft & level++
127136
nn=value[i].Count()
128137
keys=value[i].Keys()
129138
for j=0,nn-1 do begin
130-
tmpstr+=pretty_serialize(tagname=keys[j],(value[i])[keys[j]])
139+
tmpstr+=pretty_serialize(tagname=keys[j],(value[i])[keys[j]],/flat)
131140
if (j lt nn-1) then tmpstr+=comma
132141
endfor
133142
tmpstr+=braceright & level--
@@ -142,9 +151,9 @@ endif else tmpstr=''
142151
0: tmpstr+="!NULL"
143152
ELSE: tmpstr+=strtrim(string(value[i]),2)
144153
endcase
145-
if (i lt nel-1) then tmpstr+=', '
154+
if (i lt nel-1) then tmpstr+=(comma+space)
146155
endfor
147-
if (arrayIdentifier) then tmpstr+="]"
156+
if nel gt 1 then tmpstr+=']'
148157
endelse
149158
return,tmpstr
150159
end
@@ -176,11 +185,12 @@ if (count gt 0) then begin
176185
ndim=ret[0]
177186
type=ret[ndim+1]
178187
n=n_elements(value)
188+
n_firstdim=ret[1]
179189
case type of ; define special formats
180-
4: begin & w=16 & n=fix(width/w,/print) & fmt=start+strtrim(n,2)+fmtflt & break &end
181-
5: begin & w=25 & n=fix(width/w,/print) & fmt=start+strtrim(n,2)+fmtdbl & break &end
182-
6: begin & w=35 & n=fix(width/w,/print) & fmt=start+strtrim(n,2)+fmtcplx & break &end
183-
9: begin & w=53 & n=fix(width/w,/print) & fmt=start+strtrim(n,2)+fmtcplxdbl & break &end
190+
4: begin & w=16 & n=fix(width/w,/print) & if n_firstdim lt n then n=n_firstdim & fmt=start+strtrim(n,2)+fmtflt & break &end
191+
5: begin & w=25 & n=fix(width/w,/print) & if n_firstdim lt n then n=n_firstdim & fmt=start+strtrim(n,2)+fmtdbl & break &end
192+
6: begin & w=35 & n=fix(width/w,/print) & if n_firstdim lt n then n=n_firstdim & fmt=start+strtrim(n,2)+fmtcplx & break &end
193+
9: begin & w=53 & n=fix(width/w,/print) & if n_firstdim lt n then n=n_firstdim & fmt=start+strtrim(n,2)+fmtcplxdbl & break &end
184194
ELSE: begin & printf,out,value & return & end ; just print and return
185195
endcase
186196
; only special formats left
@@ -194,6 +204,8 @@ if (count gt 0) then begin
194204
endif
195205

196206
text=pretty_serialize(value)
207+
197208
printf,out,text
209+
198210
end
199211

0 commit comments

Comments
 (0)