fix: measure and render text by grapheme cluster
Width was computed per Unicode code point and zero-width runes (combining
marks, ZWJ, variation selectors) were counted as width 1, so flags, ZWJ
emoji, skin-tone emoji, and decomposed accents were over-counted. This broke
box frames, alignment, wrapping, and cursor placement.
Adds an in-house grapheme segmenter (nextCluster) used by all measurement,
wrapping, rendering, editable widgets, and inline streaming. A Cell now holds
its cluster as Text (replacing the Rune field).
grindlemire · Jun 19 · c188d3d · parent 488fbfe · 36 files +893 -0