From 1cbcbb2ac99090b597f6e9446c557607208cb483 Mon Sep 17 00:00:00 2001 From: Greg Ward Date: Sat, 5 Mar 2005 02:53:17 +0000 Subject: SF #1149508: ensure textwrap handles hyphenated numbers correctly, eg. "2004-03-04" is not broken across lines. (Merged from 2.4 branch.) --- Lib/test/test_textwrap.py | 18 ++++++++++++++++++ Lib/textwrap.py | 7 ++++--- Misc/NEWS | 4 ++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_textwrap.py b/Lib/test/test_textwrap.py index 17fd1cf04f..a21b7ce9b9 100644 --- a/Lib/test/test_textwrap.py +++ b/Lib/test/test_textwrap.py @@ -165,6 +165,24 @@ What a mess! ["this-is-a-useful-feature-for-reformatting-", "posts-from-tim-peters'ly"]) + def test_hyphenated_numbers(self): + # Test that hyphenated numbers (eg. dates) are not broken like words. + text = ("Python 1.0.0 was released on 1994-01-26. Python 1.0.1 was\n" + "released on 1994-02-15.") + + self.check_wrap(text, 30, ['Python 1.0.0 was released on', + '1994-01-26. Python 1.0.1 was', + 'released on 1994-02-15.']) + self.check_wrap(text, 40, ['Python 1.0.0 was released on 1994-01-26.', + 'Python 1.0.1 was released on 1994-02-15.']) + + text = "I do all my shopping at 7-11." + self.check_wrap(text, 25, ["I do all my shopping at", + "7-11."]) + self.check_wrap(text, 27, ["I do all my shopping at", + "7-11."]) + self.check_wrap(text, 29, ["I do all my shopping at 7-11."]) + def test_em_dash(self): # Test text with em-dashes text = "Em-dashes should be written -- thus." diff --git a/Lib/textwrap.py b/Lib/textwrap.py index 8e3d8cf594..4576ef2a3f 100644 --- a/Lib/textwrap.py +++ b/Lib/textwrap.py @@ -78,9 +78,10 @@ class TextWrapper: # splits into # Hello/ /there/ /--/ /you/ /goof-/ball,/ /use/ /the/ /-b/ /option! # (after stripping out empty strings). - wordsep_re = re.compile(r'(\s+|' # any whitespace - r'[^\s\w]*\w{2,}-(?=\w{2,})|' # hyphenated words - r'(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))') # em-dash + wordsep_re = re.compile( + r'(\s+|' # any whitespace + r'[^\s\w]*\w+[a-zA-Z]-(?=\w+[a-zA-Z])|' # hyphenated words + r'(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))') # em-dash # XXX this is not locale- or charset-aware -- string.lowercase # is US-ASCII only (and therefore English-only) diff --git a/Misc/NEWS b/Misc/NEWS index 59c630dd00..86d3677d87 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -206,6 +206,10 @@ Library - ``UserString.MutableString`` now supports negative indices in ``__setitem__`` and ``__delitem__`` +- Bug #1149508: ``textwrap`` now handles hyphenated numbers (eg. "2004-03-05") + correctly. + + Build ----- -- cgit v1.2.1