From 50778f29461a6745f211f545a049f220aaaaae2b Mon Sep 17 00:00:00 2001 From: "Michael A. Sinclair" Date: Tue, 8 Sep 2026 03:36:00 -0500 Subject: [PATCH] fixes #26183; wordwrap: flush lastSep before splitting an overlong word (#26184) wrapWords(splitLongWords = true) dropped the separator before a word it had to split, fusing it with the word before it. Flush lastSep first, the same as the branch that handles a word which fits. Updates twordwrap's longlongwordRes fixture, which was pinned against the old behavior at three points where a source line break normalizes to a synthetic space. --- lib/std/wordwrap.nim | 2 ++ tests/stdlib/twordwrap.nim | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/std/wordwrap.nim b/lib/std/wordwrap.nim index 9333f880be..7816d26dab 100644 --- a/lib/std/wordwrap.nim +++ b/lib/std/wordwrap.nim @@ -53,6 +53,8 @@ proc wrapWords*(s: string, maxLineWidth = 80, let wlen = olen(s, i, j) if wlen > spaceLeft: if splitLongWords and wlen > maxLineWidth: + if lastSep.len > 0 and spaceLeft > 0: + result.add(lastSep) var k = 0 while k < j - i: if spaceLeft <= 0: diff --git a/tests/stdlib/twordwrap.nim b/tests/stdlib/twordwrap.nim index 5d49477d3a..bd99735c6f 100644 --- a/tests/stdlib/twordwrap.nim +++ b/tests/stdlib/twordwrap.nim @@ -29,11 +29,11 @@ iaoenvlcyfglwckßqfgvwkßqgfvlwkßqfgvlwckßqvlwkgfUIαοιαοιαχολωχσ ξχλωωχαοεοιαεοαεοιαεοαεοιαοεσναοεκνρκψγκψφϵιηαααοε""" let longlongwordRes = """ abc uitdaeröägfßhydüäpydqfü,träpydqgpmüdträpydföägpydörztdüöäfguiaeowäzjdtrüöäp -psnrtuiydrözenrüöäpyfdqazpesnrtulocjtüöäzydgyqgfqfgprtnwjlcydkqgfüöezmäzydydqüü +psnrtuiydrözenrüöäpyfdqazpesnrtulocjtüö äzydgyqgfqfgprtnwjlcydkqgfüöezmäzydydqüü öäpdtrnvwfhgckdumböäpydfgtdgfhtdrntdrntydfogiayqfguiatrnydrntüöärtniaoeydfgaoeiq -fglwcßqfgxvlcwgtfhiaoenrsüöäapmböäptdrniaoydfglckqfhouenrtsüöäptrniaoeyqfgulocf +fglwcßqfgxvlcwgtfhiaoen rsüöäapmböäptdrniaoydfglckqfhouenrtsüöäptrniaoeyqfgulocf qclgwxßqflgcwßqfxglcwrniatrnmüböäpmöäbpümöäbpüöämpbaoestnriaesnrtdiaesrtdniaesdr -tnaetdriaoenvlcyfglwckßqfgvwkßqgfvlwkßqfgvlwckßqvlwkgfUIαοιαοιαχολωχσωχνωκψρχκψ +tnaetdr iaoenvlcyfglwckßqfgvwkßqgfvlwkßqfgvlwckßqvlwkgfUIαοιαοιαχολωχσωχνωκψρχκψ ρτιεαοσηζϵηζιοεννκεωνιαλωσωκνκψρκγτφγτχκγτεκργτιχνκιωχσιλωσλωχξλξλξωχωχ ξχλωωχαοεοιαεοαεοιαεοαεοιαοεσναοεκνρκψγκψφϵιηαααοε""" doAssert wrapWords(longlongword) == longlongwordRes