googlefonts / fontmake

Compile fonts from sources (UFO, Glyphs) to binary (OpenType, TrueType).
Apache License 2.0
782 stars 93 forks source link

Missing anchors and GDEF glyph class for Arabic dot marks #645

Open khaledhosny opened 4 years ago

khaledhosny commented 4 years ago

When building the attached font, Arabic dot mark glyphs are not assigned a GDEF glyph class and there are no GPOS mark feature for them.

The font decomposes Arabic glyphs into base and dot mark, so without the correct GDEF glyph class and the mark feature the font is completely broken.

QahiriTest.glyphs.zip

Above is Glyphs app built file, below is fontmake built one (text is بنيت بيتا وأنجبت بنتا): screenshot

punchcutter commented 4 years ago

This looks like something that has come up over and over. fontmake can't always know if a mark is a mark if there's no Unicode assigned to it or if there aren't some kind of heuristics applied to determine what's actually a mark or base. I opened your Glyphs file, selected all the marks and checked the glyph property boxes to say Script: arabic, Category: Mark, Subcategory: Nonspacing. Then when I run fontmake I get the correct result. Glyphs knows all this because it's hard-coded in the default GlyphData.xml file, but to make sure it's actually saved in the Glyphs file you need to deliberately check the boxes or run a script. That's what I do to be sure that the properties are what I want and that they aren't determined on the fly somewhere.

khaledhosny commented 4 years ago

Yes, but glyphsLib should be using the same GlyphsData.xml file that Glyphs uses already, so something is failing.

punchcutter commented 4 years ago

But all those names don't exist in the GlyphData.xml file. They changed at some point from names like twodotshorizontalbelow-ar to twodotshorizontalbelowSymbol-ar. I thought they changed a long time ago, but it seems glyphsLib only got updated more recently.

khaledhosny commented 4 years ago

The glyph names in the font are what Glyphs presents in its UI, I didn’t type them manually.

punchcutter commented 4 years ago

Yeah, now I'm kind of confused about the glyphsLib copy of GlyphData.xml and also the change @anthrotype made most recently. All of these marks got deleted from the file. And this is exactly why I don't trust some magic calculation and instead make sure the properties are saved into the Glyphs file.

anthrotype commented 4 years ago

I have no idea, I simply updated the embedded GlyphData.xml based on the copy upstream from https://github.com/schriftgestalt/GlyphsInfo/commit/8e554a7b59a2d7bd7d1d2bf2a46a794e1b51602c#diff-e575a67f4dcbbf1216c0ce9a67ca4236

punchcutter commented 4 years ago

Well that can totally break things like it obviously did here. @schriftgestalt why is this file so much different from what's actually in Glyphs?

schriftgestalt commented 4 years ago

I check if I need to update the GlyphData.xml.

schriftgestalt commented 4 years ago

The GlyphData.xml in the repo excised some entries, e.g. some glyphs without unicodes.

Those glyphs are mostly used as components so twodotshorizontalbelow-ar should never occur in a text. Are you decomposing some glyphs?

I added them to the repo.

punchcutter commented 4 years ago

Right, those particular glyphs are used in decomposition.