Files
ghostty/src
Mitchell Hashimoto 01ea3744c5 font/shaper/harfbuzz: Update position logic to match recent CoreText changes (#10332)
This PR incorporates the recent changes made to CoreText in the
following PRs:

* https://github.com/ghostty-org/ghostty/pull/9883
* https://github.com/ghostty-org/ghostty/pull/10179
* https://github.com/ghostty-org/ghostty/pull/10295

Tests have been added verifying the behavior. Below are all the changes
in shaping from the above PRs but now using HarfBuzz.

## Tai Tham vowels (https://github.com/ghostty-org/ghostty/pull/9883)

Browser:

ᨯᩰ

Before:

(Note that this worked correctly with the old logic for HarfBuzz in
contrast to CoreText)

<img width="498" height="96" alt="CleanShot 2026-01-15 at 09 50 50@2x"
src="https://github.com/user-attachments/assets/a87abb4e-7829-4df0-9cb6-9fc254c10ba2"
/>

After:

<img width="496" height="96" alt="CleanShot 2026-01-15 at 09 51 07@2x"
src="https://github.com/user-attachments/assets/64cb8b12-0b99-4e9f-8189-d793469048f6"
/>


## Tibetan characters (discussion
https://github.com/ghostty-org/ghostty/discussions/8054)

Browser:

ༀ

Before (with Noto Serif Tibetan):

<img width="586" height="154" alt="CleanShot 2026-01-16 at 09 28 32@2x"
src="https://github.com/user-attachments/assets/5b7df9c1-13ff-45fd-977e-9e152063517c"
/>

After:

<img width="604" height="202" alt="CleanShot 2026-01-16 at 09 28 46@2x"
src="https://github.com/user-attachments/assets/3832b8b0-1ce6-448d-a063-622127cfb213"
/>


## Tai Tham ligature (https://github.com/ghostty-org/ghostty/pull/10179
and https://github.com/ghostty-org/ghostty/pull/10295)

Browser:

ᩉ᩠ᨿᩩ

Before:

<img width="860" height="144" alt="CleanShot 2026-01-15 at 09 57 30@2x"
src="https://github.com/user-attachments/assets/56c85a06-1853-4f88-992b-568b7f1d4b4e"
/>

After:

<img width="860" height="108" alt="CleanShot 2026-01-15 at 09 57 44@2x"
src="https://github.com/user-attachments/assets/fe236aad-ac2c-4665-aef4-bc996e3b2938"
/>

## Javanese ligature (https://github.com/ghostty-org/ghostty/pull/10295)

Browser:

ᩉ᩠ᨿᩩ

Before:

<img width="856" height="128" alt="CleanShot 2026-01-15 at 09 59 04@2x"
src="https://github.com/user-attachments/assets/73c60445-a80d-4003-ae2b-c8d53f3c9cf9"
/>

After:

<img width="866" height="114" alt="CleanShot 2026-01-15 at 09 59 23@2x"
src="https://github.com/user-attachments/assets/fce80429-096a-455e-aabd-00bf33fdae54"
/>

## Chakma ligature (https://github.com/ghostty-org/ghostty/pull/10295)

Browser:
𑄝𑄖𑄳𑄠𑄬

Before:

<img width="1298" height="104" alt="CleanShot 2026-01-15 at 10 00 31@2x"
src="https://github.com/user-attachments/assets/72e2be85-fb4b-4ca0-98d7-30279fd2613f"
/>

After:

<img width="1310" height="84" alt="CleanShot 2026-01-15 at 10 00 52@2x"
src="https://github.com/user-attachments/assets/a5e2a89c-7f1e-474c-9d61-b90c6a6ffedd"
/>

## Bengali ligature (https://github.com/ghostty-org/ghostty/pull/10295)

Browser:
রাষ্ট্রে

Before:
<img width="1268" height="94" alt="CleanShot 2026-01-15 at 10 02 16@2x"
src="https://github.com/user-attachments/assets/2946701c-a41b-45c5-b442-915dad45d380"
/>

After:
<img width="1274" height="110" alt="CleanShot 2026-01-15 at 10 02 32@2x"
src="https://github.com/user-attachments/assets/c1684149-cca4-43a7-b384-13e3d4854765"
/>

## Devanagari string (test changed in
https://github.com/ghostty-org/ghostty/pull/10295)

Browser:
अपार्टमेंट

Before:

<img width="560" height="98" alt="CleanShot 2026-01-16 at 09 31 45@2x"
src="https://github.com/user-attachments/assets/8df36427-c1fe-4f3c-9e2a-7e9b798411b4"
/>

After:

<img width="570" height="88" alt="CleanShot 2026-01-16 at 09 32 06@2x"
src="https://github.com/user-attachments/assets/972ed525-f341-400b-a09c-29b0a9135502"
/>


## AI disclaimer

I used Amp to copy the logic from CoreText, but had to help it along. I
took over after I noticed the different behavior with HarfBuzz's default
cluster level.

[Adopt CoreText changes to HarfBuzz
shaper](https://ampcode.com/threads/T-019bbccd-74d3-76c8-add4-6270f0f5375f)
[Rename debug_codepoints, explore HarfBuzz
alternatives](https://ampcode.com/threads/T-019bbce3-bed6-70fa-9eec-b0d1ee448ee9)
[Fix cluster indexing in codepoints
array](https://ampcode.com/threads/T-019bbced-d67b-7239-b507-9b3bd027faeb)
2026-01-26 20:20:26 -08:00
..
2025-10-03 07:10:43 -07:00
2025-11-27 13:37:53 -08:00
2026-01-09 20:37:58 -08:00
2026-01-27 00:59:39 +01:00
2025-11-27 13:37:53 -08:00
2025-10-03 18:52:26 +02:00
2025-10-03 07:10:43 -07:00
2025-12-22 10:19:54 -08:00
2025-11-27 13:37:53 -08:00
2025-11-27 13:37:53 -08:00
2025-10-03 07:10:43 -07:00
2025-10-03 07:10:43 -07:00
2026-01-08 10:22:56 -08:00
2025-11-24 19:55:27 -08:00
2025-11-27 13:37:53 -08:00
2025-11-27 13:37:53 -08:00
2024-08-16 14:35:10 -07:00
2025-07-09 15:06:24 -07:00
2022-08-18 11:42:32 -07:00
2025-10-03 07:10:43 -07:00
2025-11-27 13:37:53 -08:00
2025-11-27 13:37:53 -08:00