##// END OF EJS Templates
stringutil: emit multiple chunks when pretty printing...
Gregory Szorc -
r39390:5ed7c6ca default
parent child Browse files
Show More
@@ -60,19 +60,97 b' def pprintgen(o, bprefix=False):'
60 60 # without coercion.
61 61 yield "bytearray['%s']" % escapestr(bytes(o))
62 62 elif isinstance(o, list):
63 yield '[%s]' % (b', '.join(pprint(a, bprefix=bprefix) for a in o))
63 if not o:
64 yield '[]'
65 return
66
67 yield '['
68
69 for i, a in enumerate(o):
70 for chunk in pprintgen(a, bprefix=bprefix):
71 yield chunk
72
73 if i + 1 < len(o):
74 yield ', '
75
76 yield ']'
64 77 elif isinstance(o, dict):
65 yield '{%s}' % (b', '.join(
66 '%s: %s' % (pprint(k, bprefix=bprefix),
67 pprint(v, bprefix=bprefix))
68 for k, v in sorted(o.items())))
78 if not o:
79 yield '{}'
80 return
81
82 yield '{'
83
84 for i, (k, v) in enumerate(sorted(o.items())):
85 for chunk in pprintgen(k, bprefix=bprefix):
86 yield chunk
87
88 yield ': '
89
90 for chunk in pprintgen(v, bprefix=bprefix):
91 yield chunk
92
93 if i + 1 < len(o):
94 yield ', '
95
96 yield '}'
69 97 elif isinstance(o, set):
70 yield 'set([%s])' % (b', '.join(
71 pprint(k, bprefix=bprefix) for k in sorted(o)))
98 if not o:
99 yield 'set([])'
100 return
101
102 yield 'set(['
103
104 for i, k in enumerate(sorted(o)):
105 for chunk in pprintgen(k, bprefix=bprefix):
106 yield chunk
107
108 if i + 1 < len(o):
109 yield ', '
110
111 yield '])'
72 112 elif isinstance(o, tuple):
73 yield '(%s)' % (b', '.join(pprint(a, bprefix=bprefix) for a in o))
113 if not o:
114 yield '()'
115 return
116
117 yield '('
118
119 for i, a in enumerate(o):
120 for chunk in pprintgen(a, bprefix=bprefix):
121 yield chunk
122
123 if i + 1 < len(o):
124 yield ', '
125
126 yield ')'
74 127 elif isinstance(o, types.GeneratorType):
75 yield 'gen[%s]' % (b', '.join(pprint(a, bprefix=bprefix) for a in o))
128 # Special case of empty generator.
129 try:
130 nextitem = next(o)
131 except StopIteration:
132 yield 'gen[]'
133 return
134
135 yield 'gen['
136
137 last = False
138
139 while not last:
140 current = nextitem
141
142 try:
143 nextitem = next(o)
144 except StopIteration:
145 last = True
146
147 for chunk in pprintgen(current, bprefix=bprefix):
148 yield chunk
149
150 if not last:
151 yield ', '
152
153 yield ']'
76 154 else:
77 155 yield pycompat.byterepr(o)
78 156
General Comments 0
You need to be logged in to leave comments. Login now