196 return stringutil.unescapestr(s) |
195 return stringutil.unescapestr(s) |
197 except ValueError as e: |
196 except ValueError as e: |
198 # mangle Python's exception into our format |
197 # mangle Python's exception into our format |
199 raise error.ParseError(pycompat.bytestr(e).lower()) |
198 raise error.ParseError(pycompat.bytestr(e).lower()) |
200 |
199 |
201 def _brepr(obj): |
|
202 if isinstance(obj, bytes): |
|
203 return b"'%s'" % stringutil.escapestr(obj) |
|
204 return encoding.strtolocal(repr(obj)) |
|
205 |
|
206 def _prettyformat(tree, leafnodes, level, lines): |
200 def _prettyformat(tree, leafnodes, level, lines): |
207 if not isinstance(tree, tuple): |
201 if not isinstance(tree, tuple): |
208 lines.append((level, _brepr(tree))) |
202 lines.append((level, stringutil.pprint(tree))) |
209 elif tree[0] in leafnodes: |
203 elif tree[0] in leafnodes: |
210 rs = map(_brepr, tree[1:]) |
204 rs = map(stringutil.pprint, tree[1:]) |
211 lines.append((level, '(%s %s)' % (tree[0], ' '.join(rs)))) |
205 lines.append((level, '(%s %s)' % (tree[0], ' '.join(rs)))) |
212 else: |
206 else: |
213 lines.append((level, '(%s' % tree[0])) |
207 lines.append((level, '(%s' % tree[0])) |
214 for s in tree[1:]: |
208 for s in tree[1:]: |
215 _prettyformat(s, leafnodes, level + 1, lines) |
209 _prettyformat(s, leafnodes, level + 1, lines) |