New family check: No styles in a font family (or VF) should have Agrave bounds that exceed hhea.ascent
See original GitHub issueObserved behaviour
For a long time, I struggled with https://github.com/arrowtype/recursive/issues/308, wherein just a few styles of Recursive were given unexpected default line heights on macOS.
Last week, I discovered that this was due to Latin Basic (single-accent) uppercase characters exceeding the hhea.ascent
value. When this was the case – as it was in my Linear ExtraBold sources (and therefore styles nearby) – macOS disregards the specified hhea values, and instead seems to use yMin & yMax values to determine default line height. In turn, this negatively affects the font usability in programs like Keynote & Sketch.
Expected behaviour
FontBakery could use a check that:
- Runs through all instances of a font
- Checks whether the
hhea.ascent
is exceed by the yMax bound of any characters in Latin Basic
Something that might be challenging about this: how can we check for yMax in non-default instances of a variable font? Would this check have to calculate all deltas for instances? Is there any kind of quick way to do that?
Resources and exact process needed to replicate
This issue was discovered at v1.030 and existed up to v1.073. So, this can be reproduced with the variable and static fonts in any release of Recursive prior to v1.074, where it was fixed by making uppercase accents slightly shorter.
This issue exists on macOS Catalina (10.15) and to a slightly lesser extent macOS 11 Big Sur. (In Big Sur, it doesn’t happen in Sketch, but does occur in Keynote and presumably also other apps).
Issue Analytics
- State:
- Created 3 years ago
- Comments:8 (7 by maintainers)
Top GitHub Comments
I would like to take this as an opportunity to add more details to a v-metric check:
hheaAscent = typoAscent > y-max Agrave
hheaDescent = typoDescent
hheaLineGap = typoLinegap = 0
capsHeight - typoAscent ~= - typoDescent
From the tests I have done, Mac OS only looks at
Agrave
. So basically, the hheaAscent (and TypoAscent, since we want them equal), needs to be higher thanyMax
ofAgrave
.