From 44cd8db0a37350f765d709f866e6e8a6c2cea230 Mon Sep 17 00:00:00 2001 From: Padraic Fanning Date: Sun, 13 Feb 2022 19:05:39 -0500 Subject: [PATCH] Update textwrap.py to CPython 3.10 --- Lib/textwrap.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Lib/textwrap.py b/Lib/textwrap.py index 30e693c8d..841de9bae 100644 --- a/Lib/textwrap.py +++ b/Lib/textwrap.py @@ -215,8 +215,16 @@ class TextWrapper: # If we're allowed to break long words, then do so: put as much # of the next chunk onto the current line as will fit. if self.break_long_words: - cur_line.append(reversed_chunks[-1][:space_left]) - reversed_chunks[-1] = reversed_chunks[-1][space_left:] + end = space_left + chunk = reversed_chunks[-1] + if self.break_on_hyphens and len(chunk) > space_left: + # break after last hyphen, but only if there are + # non-hyphens before it + hyphen = chunk.rfind('-', 0, space_left) + if hyphen > 0 and any(c != '-' for c in chunk[:hyphen]): + end = hyphen + 1 + cur_line.append(chunk[:end]) + reversed_chunks[-1] = chunk[end:] # Otherwise, we have to preserve the long word intact. Only add # it to the current line if there's nothing already there --