[Python-checkins] python/dist/src/Lib textwrap.py, 1.35.4.1, 1.35.4.2

rhettinger@users.sourceforge.net rhettinger at users.sourceforge.net
Thu Sep 15 07:09:33 CEST 2005


Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29738
Modified Files:
 Tag: release24-maint
	textwrap.py 
Log Message:
Backport SF #1209527.
Index: textwrap.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/textwrap.py,v
retrieving revision 1.35.4.1
retrieving revision 1.35.4.2
diff -u -d -r1.35.4.1 -r1.35.4.2
--- textwrap.py	5 Mar 2005 02:38:32 -0000	1.35.4.1
+++ textwrap.py	15 Sep 2005 05:09:30 -0000	1.35.4.2
@@ -161,7 +161,7 @@
 else:
 i += 1
 
- def _handle_long_word(self, chunks, cur_line, cur_len, width):
+ def _handle_long_word(self, reversed_chunks, cur_line, cur_len, width):
 """_handle_long_word(chunks : [string],
 cur_line : [string],
 cur_len : int, width : int)
@@ -174,14 +174,14 @@
 # If we're allowed to break long words, then do so: put as much
 # of the next chunk onto the current line as will fit.
 if self.break_long_words:
- cur_line.append(chunks[0][0:space_left])
- chunks[0] = chunks[0][space_left:]
+ cur_line.append(reversed_chunks[-1][:space_left])
+ reversed_chunks[-1] = reversed_chunks[-1][space_left:]
 
 # Otherwise, we have to preserve the long word intact. Only add
 # it to the current line if there's nothing already there --
 # that minimizes how much we violate the width constraint.
 elif not cur_line:
- cur_line.append(chunks.pop(0))
+ cur_line.append(reversed_chunks.pop())
 
 # If we're not allowed to break long words, and there's already
 # text on the current line, do nothing. Next time through the
@@ -206,6 +206,10 @@
 if self.width <= 0:
 raise ValueError("invalid width %r (must be > 0)" % self.width)
 
+ # Arrange in reverse order so items can be efficiently popped
+ # from a stack of chucks.
+ chunks.reverse()
+
 while chunks:
 
 # Start the list of chunks that will make up the current line.
@@ -224,15 +228,15 @@
 
 # First chunk on line is whitespace -- drop it, unless this
 # is the very beginning of the text (ie. no lines started yet).
- if chunks[0].strip() == '' and lines:
- del chunks[0]
+ if chunks[-1].strip() == '' and lines:
+ del chunks[-1]
 
 while chunks:
- l = len(chunks[0])
+ l = len(chunks[-1])
 
 # Can at least squeeze this chunk onto the current line.
 if cur_len + l <= width:
- cur_line.append(chunks.pop(0))
+ cur_line.append(chunks.pop())
 cur_len += l
 
 # Nope, this line is full.
@@ -241,7 +245,7 @@
 
 # The current line is full, and the next chunk is too big to
 # fit on *any* line (not just this one).
- if chunks and len(chunks[0]) > width:
+ if chunks and len(chunks[-1]) > width:
 self._handle_long_word(chunks, cur_line, cur_len, width)
 
 # If the last chunk on this line is all whitespace, drop it.


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /