Glyphs 4.1.1 GDEF contains no base glyphs

I’ve noticed a difference between fonts exported from the same .glyphs file (format version 3.5), once with Glyphs 4.1.1 (4108) and once with Glyphs 3.

WHAT HAPPENS

Combining marks typed after a letter (e.g. A + U+0308 or a + U+0323) aren’t positioned in Affinity when the font was exported from Glyphs 4. The marks sit next to the letter instead of on it. The same file exported from Glyphs 3 works in Affinity 3.0.3. In FontGauntlet (HarfBuzz), both exports work.

THE CAUSE

The GPOS table is byte-for-byte identical in both exports (same checksum and length). The difference is in the GDEF table (compared with ttx):

  • Glyphs 3 export: all letters and other glyphs with anchors are listed as base glyphs (class 1).
  • Glyphs 4 export: there are no base glyphs at all. Only marks (class 3) and ligatures (class 2) are listed. Ldot, ldot and uni2116 (numero sign) are listed as ligatures, even though they serve as bases in the mark feature. In Glyphs 3 they have class 1.

Glyphs that aren’t listed get class 0. HarfBuzz treats these as bases, whereas Affinity apparently only attaches marks to glyphs that are explicitly classed as bases.

A SECOND, SMALLER PROBLEM

The mkmk lookup uses a mark filtering set. In the Glyphs 4 export, this set contains only uni031B. As a result, the lookup can never apply, because uni0304 (the mark it attaches to) is filtered out. The Glyphs 3 export correctly contains [uni0304 uni031B].

WORKAROUND

For now, I’m exporting from Glyphs 3 or fixing the GDEF table after export with fontTools. I’m happy to send both GDEF dumps (ttx) along.

Would it be possible for Glyphs 4 to behave the same way as Glyphs 3?

TTX.zip (8.5 KB)

That is fixed in Glyphs 4.2. You can try it by activating Settings … > Update > Show cutting edge versions.

perfect, thank you Georg.
GDEF is now fix :ok_hand: