grid: decide whether to fold Indic conjuncts (UAX#29 GB9c) #25
Labels
No labels
Area/ci
Area/cli
Area/client
Area/client-core
Area/daemon
Area/deps
Area/docs
Area/grid
Area/manual
Area/nix
Area/protocol
Area/pty
Area/render
Area/shaping
Area/skills
Area/transport
Area/vt
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Performance
Kind/Security
Kind/Testing
perf-regression-accepted
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Blocked
Status
Need More Info
Status
Upstream
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
felis-terminal/felis#25
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
UAX#29 GB9c (Unicode 15.1) makes an Indic conjunct one grapheme:
InCB=Consonant [Extend|Linker]* Linker [Extend|Linker]* × InCB=Consonant, e.g.क्ख(U+0915 U+094D U+0916) and the ZWJ half-formक्ख. felis does not fold it, so a conjunct lands one cell per consonant and the client shapes each cell apart (no joined glyph). REQ-602 records the exception.The decision is the width of a folded conjunct under the 2-cell cluster cap:
क्खस्त्रmin(2)double-widthdefault caps at 2wcswidthFolding with a 2-cell cap (Ghostty / Windows Terminal) gives correct shaping but drifts from
wcswidthfor chains of three or more consonants; staying unfolded keeps the cursor in sync and gives up conjunct shaping. Folding needs theIndic_Conjunct_Breakproperty (Consonant, Linker, Extend) fromDerivedCoreProperties.txt.Sources: ghostty
src/unicode/grapheme.zigand the "print Devanagari grapheme should be wide" test insrc/terminal/Terminal.zig; weztermwezterm-cell/src/lib.rsgrapheme_column_width; footfoot.ini(5)grapheme-width-method; microsoft/terminalsrc/tools/GraphemeTableGen/Program.cs; kitty text-sizing protocol docs.