@@ -186,15 +186,24 @@ def isreadable(self, object):
186186 s , readable , recursive = self .format (object , {}, 0 , 0 )
187187 return readable and not recursive
188188
189- def _format (self , object , stream , indent , allowance , context , level ):
189+ def _format (self , object , stream , indent , allowance , context , level ,
190+ prefix_len = 0 ):
190191 objid = id (object )
191192 if objid in context :
192193 stream .write (_recursion (object ))
193194 self ._recursive = True
194195 self ._readable = False
195196 return
196197 rep = self ._repr (object , context , level )
197- max_width = self ._width - indent - allowance
198+ # prefix_len is the width of any "key: " or "name=" already written on
199+ # this line. In aligned mode continuation lines start after it, so it
200+ # is folded into the indent. In expand mode children are indented at
201+ # the block level instead, but the prefix still consumes width here.
202+ if self ._expand :
203+ max_width = self ._width - indent - prefix_len - allowance
204+ else :
205+ indent += prefix_len
206+ max_width = self ._width - indent - allowance
198207 if len (rep ) > max_width :
199208 p = self ._dispatch .get (type (object ).__repr__ , None )
200209 # Lazy import to improve module import time
@@ -306,10 +315,11 @@ def _pprint_ordered_dict(self, object, stream, indent, allowance, context, level
306315 self ._format (
307316 list (object .items ()),
308317 stream ,
309- self . _child_indent ( indent , len ( cls . __name__ ) + 1 ) ,
318+ indent ,
310319 allowance + 1 ,
311320 context ,
312321 level ,
322+ prefix_len = len (cls .__name__ ) + 1 ,
313323 )
314324 stream .write (')' )
315325
@@ -501,10 +511,11 @@ def _pprint_mappingproxy(self, object, stream, indent, allowance, context, level
501511 self ._format (
502512 object .copy (),
503513 stream ,
504- self . _child_indent ( indent , 13 ) ,
514+ indent ,
505515 allowance + 1 ,
506516 context ,
507517 level ,
518+ prefix_len = 13 ,
508519 )
509520 stream .write (')' )
510521
@@ -543,10 +554,11 @@ def _format_dict_items(self, items, stream, indent, allowance, context,
543554 self ._format (
544555 ent ,
545556 stream ,
546- self . _child_indent ( indent , len ( rep ) + 2 ) ,
557+ indent ,
547558 allowance if last else 1 ,
548559 context ,
549560 level ,
561+ prefix_len = len (rep ) + 2 ,
550562 )
551563 if not last :
552564 write (delimnl )
@@ -569,10 +581,11 @@ def _format_namespace_items(self, items, stream, indent, allowance, context, lev
569581 self ._format (
570582 ent ,
571583 stream ,
572- self . _child_indent ( indent , len ( key ) + 1 ) ,
584+ indent ,
573585 allowance if last else 1 ,
574586 context ,
575587 level ,
588+ prefix_len = len (key ) + 1 ,
576589 )
577590 if not last :
578591 write (delimnl )
0 commit comments