If you think a check is flawed or have an idea for a check, please file an issue at https://github.com/fonttools/fontbakery/issues and remember to include a pointer to the repo and branch you're checking.
Summary
| 💥 ERROR | ☠ FATAL | 🔥 FAIL | ⚠️ WARN | ⏩ SKIP | ℹ️ INFO | ✅ PASS |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 30 | 202 | 12 | 324 |
| 0% | 0% | 0% | 5% | 36% | 2% | 57% |
Meaning of check results:
- 💥 An ERROR is something wrong with FontBakery itself, possibly a bug.
- ☠ A FATAL is an extremely severe issue that must be addressed immediately.
- 🔥 A FAIL is a problem with the font that must be fixed.
- ⚠️ A WARN is something that you should consider addressing.
- ℹ️ An INFO result simply prints something useful. Typically stats.
- ✅ A PASS means the font looks good for the given checking routine.
- ⏩ And a SKIP happens when the check does not apply to the given font.
If you get ERRORs, please help us improve the tool by reporting them at our issue tracker.
(but other kinds of bug reports and/or feature requests are also always welcome, of course!)
FontBakery version: 0.12.5
OpenType Specification Checks
⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩Checking correctness of monospaced metadata.
There are various metadata in the OpenType spec to specify if a font is monospaced or not. If the font is not truly monospaced, then no monospaced metadata should be set (as sometimes they mistakenly are...)
Requirements for monospace fonts:
-
post.isFixedPitch - "Set to 0 if the font is proportionally spaced, non-zero if the font is not proportionally spaced (monospaced)" (https://www.microsoft.com/typography/otspec/post.htm)
-
hhea.advanceWidthMax must be correct, meaning no glyph's width value is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)
-
OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.
-
OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written or latin symbol fonts.
-
Spec says: "The PANOSE definition contains ten digits each of which currently describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle and bProportion in the font mapper to determine family type. It also uses bProportion to determine if the font is monospaced." (https://www.microsoft.com/typography/otspec/os2.htm#pan https://monotypecom-test.monotype.de/services/pan2)
-
OS/2.xAvgCharWidth must be set accurately. "OS/2.xAvgCharWidth is used when rendering monospaced fonts, at least by Windows GDI" (http://typedrawers.com/discussion/comment/15397/#Comment_15397)
Also we should report an error for glyphs not of average width.
Please also note:
Thomas Phinney told us that a few years ago (as of December 2019), if you gave a font a monospace flag in Panose, Microsoft Word would ignore the actual advance widths and treat it as monospaced.
Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140
- Original proposal: legacy:check/033
⚠️ Lilex-Bold.ttf
-
⚠️ WARN
The OpenType spec recomments at https://learn.microsoft.com/en-us/typography/opentype/spec/recom#hhea-table that hhea.numberOfHMetrics be set to 3 but this font has 1305 instead. Please read https://github.com/fonttools/fonttools/issues/3014 to decide whether this makes sense for your font.
[code: bad-numberOfHMetrics]
⚠️ Lilex-ExtraLight.ttf
-
⚠️ WARN
The OpenType spec recomments at https://learn.microsoft.com/en-us/typography/opentype/spec/recom#hhea-table that hhea.numberOfHMetrics be set to 3 but this font has 1305 instead. Please read https://github.com/fonttools/fonttools/issues/3014 to decide whether this makes sense for your font.
[code: bad-numberOfHMetrics]
⚠️ Lilex-ExtraThick.ttf
-
⚠️ WARN
The OpenType spec recomments at https://learn.microsoft.com/en-us/typography/opentype/spec/recom#hhea-table that hhea.numberOfHMetrics be set to 3 but this font has 1305 instead. Please read https://github.com/fonttools/fonttools/issues/3014 to decide whether this makes sense for your font.
[code: bad-numberOfHMetrics]
⚠️ Lilex-Medium.ttf
-
⚠️ WARN
The OpenType spec recomments at https://learn.microsoft.com/en-us/typography/opentype/spec/recom#hhea-table that hhea.numberOfHMetrics be set to 3 but this font has 1305 instead. Please read https://github.com/fonttools/fonttools/issues/3014 to decide whether this makes sense for your font.
[code: bad-numberOfHMetrics]
⚠️ Lilex-Regular.ttf
-
⚠️ WARN
The OpenType spec recomments at https://learn.microsoft.com/en-us/typography/opentype/spec/recom#hhea-table that hhea.numberOfHMetrics be set to 3 but this font has 1305 instead. Please read https://github.com/fonttools/fonttools/issues/3014 to decide whether this makes sense for your font.
[code: bad-numberOfHMetrics]
⚠️ Lilex-Thin.ttf
-
⚠️ WARN
The OpenType spec recomments at https://learn.microsoft.com/en-us/typography/opentype/spec/recom#hhea-table that hhea.numberOfHMetrics be set to 3 but this font has 1305 instead. Please read https://github.com/fonttools/fonttools/issues/3014 to decide whether this makes sense for your font.
[code: bad-numberOfHMetrics]
Check glyphs in mark glyph class are non-spacing.
Glyphs in the GDEF mark glyph class should be non-spacing.
Spacing glyphs in the GDEF mark glyph class may have incorrect anchor positioning that was only intended for building composite glyphs during design.
- Original proposal: https://github.com/fonttools/fontbakery/issues/2877
⚠️ Lilex-Bold.ttf
-
⚠️ WARN
The following spacing glyphs may be in the GDEF mark glyph class by mistake: caronslovakcomb (U+0315), commabelowcomb (U+0326), commaturnedtopcomb (U+0312) and hookcomb (U+0309)
[code: spacing-mark-glyphs]
⚠️ Lilex-ExtraLight.ttf
-
⚠️ WARN
The following spacing glyphs may be in the GDEF mark glyph class by mistake: caronslovakcomb (U+0315), commabelowcomb (U+0326), commaturnedtopcomb (U+0312) and hookcomb (U+0309)
[code: spacing-mark-glyphs]
⚠️ Lilex-ExtraThick.ttf
-
⚠️ WARN
The following spacing glyphs may be in the GDEF mark glyph class by mistake: caronslovakcomb (U+0315), commabelowcomb (U+0326), commaturnedtopcomb (U+0312) and hookcomb (U+0309)
[code: spacing-mark-glyphs]
⚠️ Lilex-Medium.ttf
-
⚠️ WARN
The following spacing glyphs may be in the GDEF mark glyph class by mistake: caronslovakcomb (U+0315), commabelowcomb (U+0326), commaturnedtopcomb (U+0312) and hookcomb (U+0309)
[code: spacing-mark-glyphs]
⚠️ Lilex-Regular.ttf
-
⚠️ WARN
The following spacing glyphs may be in the GDEF mark glyph class by mistake: caronslovakcomb (U+0315), commabelowcomb (U+0326), commaturnedtopcomb (U+0312) and hookcomb (U+0309)
[code: spacing-mark-glyphs]
⚠️ Lilex-Thin.ttf
-
⚠️ WARN
The following spacing glyphs may be in the GDEF mark glyph class by mistake: caronslovakcomb (U+0315), commabelowcomb (U+0326), commaturnedtopcomb (U+0312) and hookcomb (U+0309)
[code: spacing-mark-glyphs]
Universal Profile Checks
⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️Check accent of Lcaron, dcaron, lcaron, tcaron
Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright or quotesingle or comma or caron(comb). It should be composed with a distinctive glyph which doesn't look like an apostrophe.
Source: https://ilovetypography.com/2009/01/24/on-diacritics/ http://diacritics.typo.cz/index.php?id=5 https://www.typotheque.com/articles/lcaron
- Original proposal: https://github.com/fonttools/fontbakery/issues/3308
⚠️ Lilex-Bold.ttf
-
⚠️ WARN
dcaron is decomposed and therefore could not be checked. Please check manually.
[code: decomposed-outline] -
✅ PASS
Looks good!
⚠️ Lilex-ExtraLight.ttf
-
⚠️ WARN
dcaron is decomposed and therefore could not be checked. Please check manually.
[code: decomposed-outline] -
✅ PASS
Looks good!
⚠️ Lilex-ExtraThick.ttf
-
⚠️ WARN
dcaron is decomposed and therefore could not be checked. Please check manually.
[code: decomposed-outline] -
✅ PASS
Looks good!
⚠️ Lilex-Medium.ttf
-
⚠️ WARN
dcaron is decomposed and therefore could not be checked. Please check manually.
[code: decomposed-outline] -
✅ PASS
Looks good!
⚠️ Lilex-Regular.ttf
-
⚠️ WARN
dcaron is decomposed and therefore could not be checked. Please check manually.
[code: decomposed-outline] -
✅ PASS
Looks good!
⚠️ Lilex-Thin.ttf
-
⚠️ WARN
dcaron is decomposed and therefore could not be checked. Please check manually.
[code: decomposed-outline] -
✅ PASS
Looks good!
Check if each glyph has the recommended amount of contours.
Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only be constructured in a handful of ways. This means a glyph's contour count will only differ slightly amongst different fonts, e.g a 'g' could either be 2 or 3 contours, depending on whether its double story or single story.
However, a quotedbl should have 2 contours, unless the font belongs to a display family.
This check currently does not cover variable fonts because there's plenty of alternative ways of constructing glyphs with multiple outlines for each feature in a VarFont. The expected contour count data for this check is currently optimized for the typical construction of glyphs in static fonts.
- Original proposal: legacy:check/153
⚠️ Lilex-Bold.ttf
-
⚠️ WARN
This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
The following glyphs do not have the recommended number of contours:
- Glyph name: percent Contours detected: 6 Expected: 4 or 5 - Glyph name: onequarter Contours detected: 5 Expected: 3 or 4 - Glyph name: onehalf Contours detected: 4 Expected: 3 - Glyph name: threequarters Contours detected: 5 Expected: 3 or 4 - Glyph name: fraction Contours detected: 2 Expected: 1 - Glyph name: uni20A8 Contours detected: 2 Expected: 3 - Glyph name: uni2153 Contours detected: 4 Expected: 3 - Glyph name: uni2154 Contours detected: 4 Expected: 1 or 3 - Glyph name: uni2155 Contours detected: 4 Expected: 3 - Glyph name: uni2156 Contours detected: 4 Expected: 3 - 30 more.Use -F or --full-lists to disable shortening of long lists.
[code: contour-count]
⚠️ Lilex-ExtraLight.ttf
-
⚠️ WARN
This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
The following glyphs do not have the recommended number of contours:
- Glyph name: percent Contours detected: 6 Expected: 4 or 5 - Glyph name: onequarter Contours detected: 5 Expected: 3 or 4 - Glyph name: onehalf Contours detected: 4 Expected: 3 - Glyph name: threequarters Contours detected: 5 Expected: 3 or 4 - Glyph name: fraction Contours detected: 2 Expected: 1 - Glyph name: uni20A8 Contours detected: 2 Expected: 3 - Glyph name: uni2153 Contours detected: 4 Expected: 3 - Glyph name: uni2154 Contours detected: 4 Expected: 1 or 3 - Glyph name: uni2155 Contours detected: 4 Expected: 3 - Glyph name: uni2156 Contours detected: 4 Expected: 3 - 30 more.Use -F or --full-lists to disable shortening of long lists.
[code: contour-count]
⚠️ Lilex-ExtraThick.ttf
-
⚠️ WARN
This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
The following glyphs do not have the recommended number of contours:
- Glyph name: percent Contours detected: 6 Expected: 4 or 5 - Glyph name: onequarter Contours detected: 5 Expected: 3 or 4 - Glyph name: onehalf Contours detected: 4 Expected: 3 - Glyph name: threequarters Contours detected: 5 Expected: 3 or 4 - Glyph name: fraction Contours detected: 2 Expected: 1 - Glyph name: uni20A8 Contours detected: 2 Expected: 3 - Glyph name: uni2153 Contours detected: 4 Expected: 3 - Glyph name: uni2154 Contours detected: 4 Expected: 1 or 3 - Glyph name: uni2155 Contours detected: 4 Expected: 3 - Glyph name: uni2156 Contours detected: 4 Expected: 3 - 30 more.Use -F or --full-lists to disable shortening of long lists.
[code: contour-count]
⚠️ Lilex-Medium.ttf
-
⚠️ WARN
This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
The following glyphs do not have the recommended number of contours:
- Glyph name: percent Contours detected: 6 Expected: 4 or 5 - Glyph name: onequarter Contours detected: 5 Expected: 3 or 4 - Glyph name: onehalf Contours detected: 4 Expected: 3 - Glyph name: threequarters Contours detected: 5 Expected: 3 or 4 - Glyph name: fraction Contours detected: 2 Expected: 1 - Glyph name: uni20A8 Contours detected: 2 Expected: 3 - Glyph name: uni2153 Contours detected: 4 Expected: 3 - Glyph name: uni2154 Contours detected: 4 Expected: 1 or 3 - Glyph name: uni2155 Contours detected: 4 Expected: 3 - Glyph name: uni2156 Contours detected: 4 Expected: 3 - 30 more.Use -F or --full-lists to disable shortening of long lists.
[code: contour-count]
⚠️ Lilex-Regular.ttf
-
⚠️ WARN
This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
The following glyphs do not have the recommended number of contours:
- Glyph name: percent Contours detected: 6 Expected: 4 or 5 - Glyph name: onequarter Contours detected: 5 Expected: 3 or 4 - Glyph name: onehalf Contours detected: 4 Expected: 3 - Glyph name: threequarters Contours detected: 5 Expected: 3 or 4 - Glyph name: fraction Contours detected: 2 Expected: 1 - Glyph name: uni20A8 Contours detected: 2 Expected: 3 - Glyph name: uni2153 Contours detected: 4 Expected: 3 - Glyph name: uni2154 Contours detected: 4 Expected: 1 or 3 - Glyph name: uni2155 Contours detected: 4 Expected: 3 - Glyph name: uni2156 Contours detected: 4 Expected: 3 - 30 more.Use -F or --full-lists to disable shortening of long lists.
[code: contour-count]
⚠️ Lilex-Thin.ttf
-
⚠️ WARN
This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
The following glyphs do not have the recommended number of contours:
- Glyph name: percent Contours detected: 6 Expected: 4 or 5 - Glyph name: onequarter Contours detected: 5 Expected: 3 or 4 - Glyph name: onehalf Contours detected: 4 Expected: 3 - Glyph name: threequarters Contours detected: 5 Expected: 3 or 4 - Glyph name: fraction Contours detected: 2 Expected: 1 - Glyph name: uni20A8 Contours detected: 2 Expected: 3 - Glyph name: uni2153 Contours detected: 4 Expected: 3 - Glyph name: uni2154 Contours detected: 4 Expected: 1 or 3 - Glyph name: uni2155 Contours detected: 4 Expected: 3 - Glyph name: uni2156 Contours detected: 4 Expected: 3 - 30 more.Use -F or --full-lists to disable shortening of long lists.
[code: contour-count]
Glyph names are all valid?
Microsoft's recommendations for OpenType Fonts states the following:
'NOTE: The PostScript glyph name must be no longer than 31 characters, include only uppercase or lowercase English letters, European digits, the period or the underscore, i.e. from the set [A-Za-z0-9_.] and should start with a letter, except the special glyph name .notdef which starts with a period.'
https://learn.microsoft.com/en-us/typography/opentype/otspec181/recom#-post--table
In practice, though, particularly in modern environments, glyph names can be as long as 63 characters.
According to the "Adobe Glyph List Specification" available at:
https://github.com/adobe-type-tools/agl-specification
- Original proposal: legacy:check/058
- See also: https://github.com/fonttools/fontbakery/issues/2832
⚠️ Lilex-Bold.ttf
-
⚠️ WARN
The following glyph names may be too long for some legacy systems which may expect a maximum 31-characters length limit: asciitilde_asciitilde_greater.liga, greater_greater_equal_middle.seq, greater_greater_hyphen_middle.seq, greater_greater_hyphen_start.seq and underscore_underscore_parenleft.liga
[code: legacy-long-names]
⚠️ Lilex-ExtraLight.ttf
-
⚠️ WARN
The following glyph names may be too long for some legacy systems which may expect a maximum 31-characters length limit: asciitilde_asciitilde_greater.liga, greater_greater_equal_middle.seq, greater_greater_hyphen_middle.seq, greater_greater_hyphen_start.seq and underscore_underscore_parenleft.liga
[code: legacy-long-names]
⚠️ Lilex-ExtraThick.ttf
-
⚠️ WARN
The following glyph names may be too long for some legacy systems which may expect a maximum 31-characters length limit: asciitilde_asciitilde_greater.liga, greater_greater_equal_middle.seq, greater_greater_hyphen_middle.seq, greater_greater_hyphen_start.seq and underscore_underscore_parenleft.liga
[code: legacy-long-names]
⚠️ Lilex-Medium.ttf
-
⚠️ WARN
The following glyph names may be too long for some legacy systems which may expect a maximum 31-characters length limit: asciitilde_asciitilde_greater.liga, greater_greater_equal_middle.seq, greater_greater_hyphen_middle.seq, greater_greater_hyphen_start.seq and underscore_underscore_parenleft.liga
[code: legacy-long-names]
⚠️ Lilex-Regular.ttf
-
⚠️ WARN
The following glyph names may be too long for some legacy systems which may expect a maximum 31-characters length limit: asciitilde_asciitilde_greater.liga, greater_greater_equal_middle.seq, greater_greater_hyphen_middle.seq, greater_greater_hyphen_start.seq and underscore_underscore_parenleft.liga
[code: legacy-long-names]
⚠️ Lilex-Thin.ttf
-
⚠️ WARN
The following glyph names may be too long for some legacy systems which may expect a maximum 31-characters length limit: asciitilde_asciitilde_greater.liga, greater_greater_equal_middle.seq, greater_greater_hyphen_middle.seq, greater_greater_hyphen_start.seq and underscore_underscore_parenleft.liga
[code: legacy-long-names]