microsoft / microsoft/font-tools
G43A (U+13172) cannot be displayed distinctly because EOT maps a G43 insertion sequence to the same glyph name
- Dominant language
- HTML
- Stars
- 78
- Forks
- 18
- Avg merge
- 27m
- Merged PRs (30d)
- 2
Description
## Summary
In EgyptianOpenType / Egyptian Text, the encoded sign **G43A** appears to collide with an internal shaping output used for an insertion-control sequence.
The real encoded sign:
U+13172 EGYPTIAN HIEROGLYPH G043A (Gardiner notation: G43A). EOT glyph name: G43a
and the insertion-control composition:
U+13171 EGYPTIAN HIEROGLYPH G043, U+13433 EGYPTIAN HIEROGLYPH INSERT AT BOTTOM START, U+133CF EGYPTIAN HIEROGLYPH X001
both resolve to the same glyph name / visual output: 𓏏𓅱
As a result, there appears to be no way to display the true independent G43A sign distinctly in Egyptian Text/EOT if its artwork should differ from the composed insertion form.
## Observed behavior
Using Egyptian Text / EOT behavior:
G43A (U+13172) → 𓏏𓅱
Also:
G43 + U+13433 + X1 (U+13171 U+13433 U+133CF) → 𓏏𓅱
So these two distinct inputs collapse to the same output:
In practical terms:
G43A
and:
G43\bs t
produce the same visible glyphs.
## Expected behavior
The encoded sign should remain independently addressable:
U+13172 / G43A -> G43a
The insertion-control sequence should use a separate internal glyph name, for example:
U+13171 U+13433 U+133CF -> lig.G43.bs.X1
or another internal name that cannot be confused with a real Gardiner sign.
## Why this matters
This is difficult to notice in Egyptian Text itself because the current artwork makes the collision visually acceptable, if the intended output is X1-G43.
However, in a derived or repainted font where the true G43A sign has distinct artwork — a chick with two wings — the collision makes it impossible to display the real G43A separately from the insertion-control composition.
This also creates a broader safety issue: internal shaping products should not reuse glyph names that correspond to real encoded Gardiner signs, unless the output truly represents that encoded sign.
## Downstream fix tested
In a downstream proof-of-concept color font, this was fixed by preserving the real encoded sign as:
U+13172 -> G43a (chick with two wings)
and redirecting the insertion-control output to a safe internal ligature name:
G43 + U+13433 + X1 -> lig.G43.bs.X1
Related insertion outputs were also redirected safely:
G43 + U+13434 + X1 -> lig.G43.te.X1
G43 + U+13433 + X1 + U+13434 + X1 -> lig.G43.bs.X1.te.X1
This allowed both the true G43A sign and the insertion-control compositions to coexist correctly.
## Suggested fix
Avoid using G43a as an internal output for the insertion-control sequence.
Suggested behavior:
U+13172 -> G43a
but:
U+13171 U+13433 U+133CF -> lig.G43.bs.X1
or an equivalent internal-only glyph name.
## Suggested general rule
Egyptian format-control shaping products should avoid real Gardiner-style glyph names when the output is not actually that encoded Gardiner sign.
Internal products should use clearly internal names such as:
lig.G43.bs.X1
lig.G43.te.X1
lig.G43.bs.X1.te.X1
rather than names like:
G43a
when G43a also represents a real encoded sign.
Notes
This is separate from the red/slashed glyph-artifact issue #64.
This is a GSUB/shaping-name collision issue, not a glyph artwork issue.
## Example output
[G43a_Example.pdf](https://github.com/user-attachments/files/27774603/G43a_Example.pdf)
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by locating the Egyptian OpenType GSUB or shaping rules that handle G43 insertion-control sequences. Check the mappings for U+13172 and the G43 plus insertion-marker combinations, then verify that the encoded sign retains G43a while insertion outputs use distinct internal names such as lig.G43.bs.X1. Confirm the listed sequences produce separate outputs in a derived or proof-of-concept font.
Written by the indexing model from the issue text.
Assessment
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100