where a line starting at pos ends inside pos..pe (pos < end <= pe; pe when pos == pe): the
whole rest when it fits, else the last break opportunity whose text before it (without
trailing spaces) fits, else grapheme clusters while they fit (at least one); a mandatory
break inside ends the line there. fits(a, b): the text a..b fits.
wrap_end with hyphenation: where a line starting at pos ends inside pos..pe, and whether
it ends with a hyphen (to be drawn after its text). As wrap_end, and: an opportunity
after a soft hyphen (U+00AD) counts with the hyphen’s width; when the next word does not
fit, hyph(word, &mut offsets) gives the places where that whole word (UAX #29) may break
(byte offsets inside it, ascending) and the line ends at the last one that fits with a
hyphen – also inside a single word too long for a line, before graphemes are cut. Words
with a digit or a soft hyphen of their own are never hyphenated. fits(a, b, hyphen):
the text a..b fits (with a hyphen after it).