[PR #3496] Implement text run “wideness” analysis, and HWID / FWID application #25406

Open
opened 2026-01-31 09:09:18 +00:00 by claunia · 0 comments
Owner

Original Pull Request: https://github.com/microsoft/terminal/pull/3496

State: closed
Merged: No


Summary of the Pull Request

References

PR Checklist

  • Closes #xxx
  • CLA signed. If not, go over here and sign the CLA
  • Tests added/passed There are no tests for CustomTextLayout yet.
  • Requires documentation to be updated
  • I've discussed this with core contributors already. If not checked, I'm ready to accept this work might be rejected in favor of a different grand plan. Issue number where discussion took place: #xxx

Detailed Description of the Pull Request / Additional comments

In a comment to #2066 I said that:

If a text run is considered only having 0 or 1-cell characters, we apply hwid to them, so font makers can switch their glyphs to a narrower one.
For a text run considered only having 0 or 2-cell characters, apply fwid instead.
This is somehow like how UAX #50 works: Analyze runs first, then apply vert on upright runs and vrtr on rotated runs.

What it does it we added an extra analysis pass for text “wideness” analysis to further break text runs into "narrow" and "wide". After that, when we perform shaping, we apply hwid feature for narrow runs and fwid for wide to let the font we are using know what is the desired wideness the Terminal want. If a font support that (like Iosevka), it would transform the glyphs to the ones with proper width so the text won't get scaled.

Validation Steps Performed

Install font Iosevka, and print the character .
It should be shown in a narrow oval, instead of a scaled-down circle.

**Original Pull Request:** https://github.com/microsoft/terminal/pull/3496 **State:** closed **Merged:** No --- <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request <!-- Other than the issue solved, is this relevant to any other issues/existing PRs? --> ## References <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist * [ ] Closes #xxx * [X] CLA signed. If not, go over [here](https://cla.opensource.microsoft.com/microsoft/Terminal) and sign the CLA * [X] <s>Tests added/passed</s> There are no tests for `CustomTextLayout` yet. * [ ] Requires documentation to be updated * [ ] I've discussed this with core contributors already. If not checked, I'm ready to accept this work might be rejected in favor of a different grand plan. Issue number where discussion took place: #xxx <!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments In a comment to #2066 I said that: > If a text run is considered only having 0 or 1-cell characters, we apply hwid to them, so font makers can switch their glyphs to a narrower one. > For a text run considered only having 0 or 2-cell characters, apply fwid instead. > This is somehow like how UAX #50 works: Analyze runs first, then apply vert on upright runs and vrtr on rotated runs. What it does it we added an extra analysis pass for text “wideness” analysis to further break text runs into "narrow" and "wide". After that, when we perform shaping, we apply `hwid` feature for narrow runs and `fwid` for wide to let the font we are using know what is the desired wideness the Terminal want. If a font support that (like Iosevka), it would transform the glyphs to the ones with proper width so the text won't get scaled. <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed Install font Iosevka, and print the character `①`. It should be shown in a narrow oval, instead of a scaled-down circle.
claunia added the pull-request label 2026-01-31 09:09:18 +00:00
Sign in to join this conversation.
No Label pull-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#25406