##// END OF EJS Templates
Try and use groups instead
Eric Wieser -
Show More
@@ -196,19 +196,22 b' class PrettyPrinter(_PrettyPrinterBase):'
196 self.group_queue = GroupQueue(root_group)
196 self.group_queue = GroupQueue(root_group)
197 self.indentation = 0
197 self.indentation = 0
198
198
199 def _break_outer_groups(self):
199 def _break_one_group(self, group):
200 while group.breakables:
201 x = self.buffer.popleft()
202 self.output_width = x.output(self.output, self.output_width)
203 self.buffer_width -= x.width
204 while self.buffer and isinstance(self.buffer[0], Text):
205 x = self.buffer.popleft()
206 self.output_width = x.output(self.output, self.output_width)
207 self.buffer_width -= x.width
208
209 def _break_outer_groups(self, force=):
200 while self.max_width < self.output_width + self.buffer_width:
210 while self.max_width < self.output_width + self.buffer_width:
201 group = self.group_queue.deq()
211 group = self.group_queue.deq()
202 if not group:
212 if not group:
203 return
213 return
204 while group.breakables:
214 self._break_one_group(group)
205 x = self.buffer.popleft()
206 self.output_width = x.output(self.output, self.output_width)
207 self.buffer_width -= x.width
208 while self.buffer and isinstance(self.buffer[0], Text):
209 x = self.buffer.popleft()
210 self.output_width = x.output(self.output, self.output_width)
211 self.buffer_width -= x.width
212
215
213 def text(self, obj):
216 def text(self, obj):
214 """Add literal text to the output."""
217 """Add literal text to the output."""
@@ -248,6 +251,9 b' class PrettyPrinter(_PrettyPrinterBase):'
248 """
251 """
249 Explicitly insert a newline into the output, maintaining correct indentation.
252 Explicitly insert a newline into the output, maintaining correct indentation.
250 """
253 """
254 group = self.group_queue.deq()
255 if group:
256 self._break_one_group(group)
251 self.flush()
257 self.flush()
252 self.output.write(self.newline)
258 self.output.write(self.newline)
253 self.output.write(' ' * self.indentation)
259 self.output.write(' ' * self.indentation)
@@ -688,13 +694,11 b' def _repr_pprint(obj, p, cycle):'
688 # Find newlines and replace them with p.break_()
694 # Find newlines and replace them with p.break_()
689 output = repr(obj)
695 output = repr(obj)
690 lines = output.splitlines()
696 lines = output.splitlines()
691 # insert a leading newline for multi-line objects that are indented
697 with p.group():
692 if len(lines) > 1 and p.indentation != p.output_width:
698 for idx, output_line in enumerate(lines):
693 p.break_()
699 if idx:
694 for idx, output_line in enumerate(lines):
700 p.break_()
695 if idx:
701 p.text(output_line)
696 p.break_()
697 p.text(output_line)
698
702
699
703
700 def _function_pprint(obj, p, cycle):
704 def _function_pprint(obj, p, cycle):
General Comments 0
You need to be logged in to leave comments. Login now