mirror of
https://github.com/python/cpython.git
synced 2025-10-08 08:01:55 +00:00
Issue #19104: pprint now produces evaluable output for wrapped strings.
This commit is contained in:
parent
f65d1d3b02
commit
fe3dc376fa
3 changed files with 47 additions and 36 deletions
|
@ -235,35 +235,41 @@ class PrettyPrinter:
|
|||
return
|
||||
|
||||
if issubclass(typ, str) and len(object) > 0 and r is str.__repr__:
|
||||
def _str_parts(s):
|
||||
"""
|
||||
Return a list of string literals comprising the repr()
|
||||
of the given string using literal concatenation.
|
||||
"""
|
||||
lines = s.splitlines(True)
|
||||
for i, line in enumerate(lines):
|
||||
rep = repr(line)
|
||||
if len(rep) <= max_width:
|
||||
yield rep
|
||||
else:
|
||||
# A list of alternating (non-space, space) strings
|
||||
parts = re.split(r'(\s+)', line) + ['']
|
||||
current = ''
|
||||
for i in range(0, len(parts), 2):
|
||||
part = parts[i] + parts[i+1]
|
||||
candidate = current + part
|
||||
if len(repr(candidate)) > max_width:
|
||||
if current:
|
||||
yield repr(current)
|
||||
current = part
|
||||
else:
|
||||
current = candidate
|
||||
if current:
|
||||
yield repr(current)
|
||||
for i, rep in enumerate(_str_parts(object)):
|
||||
chunks = []
|
||||
lines = object.splitlines(True)
|
||||
if level == 1:
|
||||
indent += 1
|
||||
max_width -= 2
|
||||
for i, line in enumerate(lines):
|
||||
rep = repr(line)
|
||||
if len(rep) <= max_width:
|
||||
chunks.append(rep)
|
||||
else:
|
||||
# A list of alternating (non-space, space) strings
|
||||
parts = re.split(r'(\s+)', line) + ['']
|
||||
current = ''
|
||||
for i in range(0, len(parts), 2):
|
||||
part = parts[i] + parts[i+1]
|
||||
candidate = current + part
|
||||
if len(repr(candidate)) > max_width:
|
||||
if current:
|
||||
chunks.append(repr(current))
|
||||
current = part
|
||||
else:
|
||||
current = candidate
|
||||
if current:
|
||||
chunks.append(repr(current))
|
||||
if len(chunks) == 1:
|
||||
write(rep)
|
||||
return
|
||||
if level == 1:
|
||||
write('(')
|
||||
for i, rep in enumerate(chunks):
|
||||
if i > 0:
|
||||
write('\n' + ' '*indent)
|
||||
write(rep)
|
||||
if level == 1:
|
||||
write(')')
|
||||
return
|
||||
write(rep)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue