Hi there, I would like go deep into font engineering, font mastering, and quality assurance, because I'd love to have solid, compatible and bullet proof files of the fonts I design. Actually, I'm just curious
. I wonder if you can advise me if there is a website/manual/book or any other resources which can help me to better understand what it is inside a font and how it works (tables spec, vertical metrics settings, naming settings, hinting etc etc) I know that it is a HUGE subject. I just need a starting point.
Legendary essay about problems of presenting fonts on screen; the focus on hinting particularly.
"Adobe Type 1 font format specification"
Old, but still important introduction the basic concepts of font format, tables etc. Recommended to me here on TD, but I never found time to go in detail through it. There is a PDF available.
You might want to check this recent thread, were font engineering and how to get into it was dicussed
I just released a small command line font editor on GitHub:
Among the other things, it helps to correctly compile the name table and align the v-metrics of the family to the same baseline.
The concept is the following: create a JSON configuration file containing usWidth/usWeight Class and pair it with the desired style names (long and short word). There's no need to create it manually, a JSON with default values can be created via command line:
It creates a file named 'config.json' in the current directory, that can be edited manually or with the command line editor:
Here I'm changing the usWeighClass value for the Book style from 350 to 450:
Once compiled the configuration file according to your needs, the next step is to parse all fonts present in the work folder:
This will create a file named data.csv in the current folder, that can be edited manually or using the command line editor:
In the image can be seen that IBM used 200 as usWeightClass for the ExtraLight style. It is not recognised because our default configuration file uses 275. At this point we can choose to change the configuration file or the usWeightClass value. It's up to the user.
The 'r' choice recalculates the values parsing a string, that can be the file name, the PostscriptName, a namerecord or a combination of namerecords:
Once the csv file is correctly filled, the name table can be recalculated (all values in the csv file will be written into the fonts):
-sita 6: the short literal for the italics ('It') will be written in nameID 6
-swdt 1: the short literal for weights ('Bd') will be written in nameID 1
-swgt 1 -swgt 6: the short width literal ('Cn') will be written in nameIDs 1 and 6
- ex 4: nameID 4 won't be recalculated
-o fixed: new files will be written in the 'fixed' folder (it will be created if doesn't exist).
There's a lot to say about this, but I stop here for now.
I did nothing else than replicate (or so I hope!) what explained by Karsten Luecke here: https://kltf.de/kltf_otproduction.shtml#metrics
Will align all the fonts in the folder to the same baseline.
Same as above, but will use the SIL method: http://silnrsi.github.io/FDBP/en-US/Design_Metrics.html
This will copy vertical metrics from a source font to one or more destination fonts.
There are other commands, but they are mostly self-explaining:
Changes some font's values, as usWeight/WidthClass, Bold/Italic/Oblique bits, adds a dummy DSIG (I've read in FontTools code comments that it's needed by certain software to use features in TTF fonts), changes embed level etc.
Adds and deletes namerecords, replaces a string in the name table, copies names from Windows table to Macintosh table (I had some fonts where the Mac table wasn't filled at all and I don't know if this is correct).
Use --lang to write in a language different than 'en' (--lang 'it').
Prints various font's informations, for example the name table:
Renames font files according to the chooses string in the name or CFF table.
Removes overlaps in TTF files: https://github.com/fonttools/fonttools/blob/main/Lib/fontTools/ttLib/removeOverlaps.py
Compress/decompress webfonts and creates a CSS kit.
Not an engineering tool, but I hope this helps at least with the name table, that, for what I see, is a hard beast to handle.
It's in my intentions to write a decent documentation for this tool.
Not sure that it deserves its own topic, so I started with an example in the wiki: https://github.com/ftCLI/ftCLI/wiki/ftCLI-wizard. I edited IBM Plex Sans linking the Text and Bold styles instead of Regular and Bold ones.
I also opened a discussion so to answer directly there instead of messing this thread.