diff options
author | Greg Ward <gward@python.net> | 2005-03-05 02:53:17 (GMT) |
---|---|---|
committer | Greg Ward <gward@python.net> | 2005-03-05 02:53:17 (GMT) |
commit | 40407943b72dfcbac498f92a9c8b774ee2ea7ee2 (patch) | |
tree | 31611f78855e372e54fea69fd004540a08fc8b93 /Lib | |
parent | 00a73e7715eb9bba3203aea6caa326f3f54a0d20 (diff) | |
download | cpython-40407943b72dfcbac498f92a9c8b774ee2ea7ee2.zip cpython-40407943b72dfcbac498f92a9c8b774ee2ea7ee2.tar.gz cpython-40407943b72dfcbac498f92a9c8b774ee2ea7ee2.tar.bz2 |
SF #1149508: ensure textwrap handles hyphenated numbers correctly,
eg. "2004-03-04" is not broken across lines. (Merged from 2.4 branch.)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_textwrap.py | 18 | ||||
-rw-r--r-- | Lib/textwrap.py | 7 |
2 files changed, 22 insertions, 3 deletions
diff --git a/Lib/test/test_textwrap.py b/Lib/test/test_textwrap.py index 17fd1cf..a21b7ce 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 8e3d8cf..4576ef2 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) |