framer / fixfont

Fix WOFF2 font metadata
MIT License
1 stars 0 forks source link

Possible incorrect application of --subfamily-name #1

Open PeterDekkers opened 6 months ago

PeterDekkers commented 6 months ago

Hello!

I noticed that your script applies the --subfamily-name argument to the SUBFAMILY (ID 2) entry in the name table. This is (sadly) not always correct.

The following is an excerpt from https://learn.microsoft.com/en-us/typography/opentype/spec/name#name-ids about SUBFAMILY (ID 2):

In some cases, this may lead to specifying a Subfamily name of “Regular” for a font that might not otherwise be considered a regular font. For example, the Arial Black font has a Font Family name of “Arial Black” and a Subfamily name of “Regular”. Note that, in such cases, name IDs 16 and 17 should also be included, using a shared value for name ID 16 that reflects the full typographic family, and values for name ID 17 that appropriately reflect the actual design variant of each font.

So, e.g. for "Arial Black", you would pass the following arguments:

fixfont.py font.woff2 -f "Arial" -s "Black" -o output.woff2

However, then SUBFAMILY (ID 2) would be set to Black, incorrectly.

In the context of Framer, I feel that the best way to retrieve a name for a font would be to look at PREFERRED_FAMILY (ID 16) and PREFERRED_SUBFAMILY (ID 17). If those are not set, then FAMILY (ID 1) and SUBFAMILY (ID 2) values can be used.

IDs 1 & 2 are subject to a number of restrictions and peculiarities that IDs 16 & 17 are not subject to. But, values for IDs 16 & 17 will not always be present.

Additionally, deriving the names from the source filename is bound to be prone to error. I would recommend reading values from the name table, if you can.

I hope this is helpful!

PeterDekkers commented 6 months ago

P.S.: This said, if the purpose of your script is only to make the fonts work for Framer, then maybe your approach is okay. I merely wanted to point out how fiddly font naming can be—the Microsoft OpenType Spec isn't the most straight-forward document to read and implement.