diff options
| author | Georg Brandl <georg@python.org> | 2007-03-13 18:15:41 +0000 |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2007-03-13 18:15:41 +0000 |
| commit | 9e6b47002a563473ec966ac4d353b99df986f642 (patch) | |
| tree | 773fe857bc89bda60d0fb53213b723879a0a47c7 /Lib | |
| parent | 92a6baed7bfae3eaad31c47c5d80348b05a62d8c (diff) | |
| download | cpython-git-9e6b47002a563473ec966ac4d353b99df986f642.tar.gz | |
Patch #1581073: add a flag to textwrap that prevents the dropping of
whitespace while wrapping.
Diffstat (limited to 'Lib')
| -rw-r--r-- | Lib/test/test_textwrap.py | 8 | ||||
| -rw-r--r-- | Lib/textwrap.py | 12 |
2 files changed, 16 insertions, 4 deletions
diff --git a/Lib/test/test_textwrap.py b/Lib/test/test_textwrap.py index 500eceb183..5f0b51b4e7 100644 --- a/Lib/test/test_textwrap.py +++ b/Lib/test/test_textwrap.py @@ -328,6 +328,14 @@ What a mess! self.check_wrap(text, 30, [" This is a sentence with", "leading whitespace."]) + def test_no_drop_whitespace(self): + # SF patch #1581073 + text = " This is a sentence with much whitespace." + self.check_wrap(text, 10, + [" This is a", " ", "sentence ", + "with ", "much white", "space."], + drop_whitespace=False) + if test_support.have_unicode: def test_unicode(self): # *Very* simple test of wrapping Unicode strings. I'm sure diff --git a/Lib/textwrap.py b/Lib/textwrap.py index ccff2aba12..e49644d221 100644 --- a/Lib/textwrap.py +++ b/Lib/textwrap.py @@ -63,6 +63,8 @@ class TextWrapper: break_long_words (default: true) Break words longer than 'width'. If false, those words will not be broken, and some lines might be longer than 'width'. + drop_whitespace (default: true) + Drop leading and trailing whitespace from lines. """ whitespace_trans = string.maketrans(_whitespace, ' ' * len(_whitespace)) @@ -98,7 +100,8 @@ class TextWrapper: expand_tabs=True, replace_whitespace=True, fix_sentence_endings=False, - break_long_words=True): + break_long_words=True, + drop_whitespace=True): self.width = width self.initial_indent = initial_indent self.subsequent_indent = subsequent_indent @@ -106,6 +109,7 @@ class TextWrapper: self.replace_whitespace = replace_whitespace self.fix_sentence_endings = fix_sentence_endings self.break_long_words = break_long_words + self.drop_whitespace = drop_whitespace # -- Private methods ----------------------------------------------- @@ -140,7 +144,7 @@ class TextWrapper: 'use', ' ', 'the', ' ', '-b', ' ', 'option!' """ chunks = self.wordsep_re.split(text) - chunks = filter(None, chunks) + chunks = filter(None, chunks) # remove empty chunks return chunks def _fix_sentence_endings(self, chunks): @@ -228,7 +232,7 @@ class TextWrapper: # First chunk on line is whitespace -- drop it, unless this # is the very beginning of the text (ie. no lines started yet). - if chunks[-1].strip() == '' and lines: + if self.drop_whitespace and chunks[-1].strip() == '' and lines: del chunks[-1] while chunks: @@ -249,7 +253,7 @@ class TextWrapper: self._handle_long_word(chunks, cur_line, cur_len, width) # If the last chunk on this line is all whitespace, drop it. - if cur_line and cur_line[-1].strip() == '': + if self.drop_whitespace and cur_line and cur_line[-1].strip() == '': del cur_line[-1] # Convert current line back to a string and store it in list |
