microsoft / microsoft/font-tools

G43A (U+13172) cannot be displayed distinctly because EOT maps a G43 insertion sequence to the same glyph name

Open
#65 0 comments 0 reactions 0 assignees View on GitHub
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

Image

[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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.