diff --git a/Lib/test/test_textwrap.py b/Lib/test/test_textwrap.py index 17fd1cf04fb..a21b7ce9b98 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 8e3d8cf5945..4576ef2a3ff 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 59c630dd00f..86d3677d875 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 -----