summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGreg Ward <gward@python.net>2005-03-05 02:53:17 (GMT)
committerGreg Ward <gward@python.net>2005-03-05 02:53:17 (GMT)
commit40407943b72dfcbac498f92a9c8b774ee2ea7ee2 (patch)
tree31611f78855e372e54fea69fd004540a08fc8b93 /Lib
parent00a73e7715eb9bba3203aea6caa326f3f54a0d20 (diff)
downloadcpython-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.py18
-rw-r--r--Lib/textwrap.py7
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)