💥 ERROR | 🔥 FAIL | ⚠️ WARN | ⏩ SKIP | ℹ️ INFO | ✅ PASS |
---|---|---|---|---|---|
0 | 29 | 52 | 245 | 14 | 335 |
0% | 4% | 8% | 36% | 2% | 50% |
If the set of font files passed in the command line is not all in the same directory, then we warn the user since the tool will interpret the set of files as belonging to a single family (and it is unlikely that the user would store the files from a single family spreaded in several separate directories).
All files are in the same directory.
We want all fonts within a family to have the same vertical metrics so their line spacing is consistent across the family.
Vertical metrics are the same across the family.
No trailing spaces on name table entries.
No trailing spaces on name table entries.
No trailing spaces on name table entries.
No trailing spaces on name table entries.
No trailing spaces on name table entries.
No trailing spaces on name table entries.
No trailing spaces on name table entries.
A font's winAscent and winDescent values should be greater than or equal to the head table's yMax, abs(yMin) values. If they are less than these values, clipping can occur on Windows platforms (https://github.com/RedHatBrand/Overpass/issues/33).
If the font includes tall/deep writing systems such as Arabic or Devanagari, the winAscent and winDescent can be greater than the yMax and abs(yMin) to accommodate vowel marks.
When the win Metrics are significantly greater than the upm, the linespacing can appear too loose. To counteract this, enabling the OS/2 fsSelection bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 typo values instead. This means the font developer can control the linespacing with the typo values, whilst avoiding clipping by setting the win values to values greater than the yMax and abs(yMin).
OS/2.usWinDescent value should be equal or greater than 236, but got 200 instead. [code: descent]
OS/2.usWinDescent value should be equal or greater than 236, but got 200 instead. [code: descent]
OS/2.usWinDescent value should be equal or greater than 236, but got 200 instead. [code: descent]
OS/2.usWinDescent value should be equal or greater than 236, but got 200 instead. [code: descent]
OS/2.usWinDescent value should be equal or greater than 236, but got 200 instead. [code: descent]
OS/2.usWinDescent value should be equal or greater than 236, but got 200 instead. [code: descent]
OS/2.usWinDescent value should be equal or greater than 236, but got 200 instead. [code: descent]
OS/2 and hhea vertical metric values should match. This will produce the same linespacing on Mac, GNU+Linux and Windows.
When OS/2 and hhea vertical metrics match, the same linespacing results on macOS, GNU+Linux and Windows. Unfortunately as of 2018, Google Fonts has released many fonts with vertical metrics that don't match in this way. When we fix this issue in these existing families, we will create a visible change in line/paragraph layout for either Windows or macOS users, which will upset some of them.
But we have a duty to fix broken stuff, and inconsistent paragraph layout is unacceptably broken when it is possible to avoid it.
If users complain and prefer the old broken version, they have the freedom to take care of their own situation.
OS/2 sTypoAscender (780) and hhea ascent (1000) must be equal. [code: ascender]
OS/2 sTypoAscender (780) and hhea ascent (1000) must be equal. [code: ascender]
OS/2 sTypoAscender (780) and hhea ascent (1000) must be equal. [code: ascender]
OS/2 sTypoAscender (780) and hhea ascent (1000) must be equal. [code: ascender]
OS/2 sTypoAscender (780) and hhea ascent (1000) must be equal. [code: ascender]
OS/2 sTypoAscender (780) and hhea ascent (1000) must be equal. [code: ascender]
OS/2 sTypoAscender (780) and hhea ascent (1000) must be equal. [code: ascender]
ots-sanitize passed this file
ots-sanitize passed this file
ots-sanitize passed this file
ots-sanitize passed this file
ots-sanitize passed this file
ots-sanitize passed this file
ots-sanitize passed this file
Running old versions of FontBakery can lead to a poor report which may include false WARNs and FAILs due do bugs, as well as outdated quality assurance criteria.
Older versions will also not report problems that are detected by new checks added to the tool in more recent updates.
Font Bakery is up-to-date.
Font Bakery is up-to-date.
Font Bakery is up-to-date.
Font Bakery is up-to-date.
Font Bakery is up-to-date.
Font Bakery is up-to-date.
Font Bakery is up-to-date.
The OpenType specification v1.8.2 recommends that the first glyph is the '.notdef' glyph without a codepoint assigned and with a drawing.
https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph
Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR' and '.null' glyphs. This might have been relevant for MacOS 9 applications.
OK
OK
OK
OK
OK
OK
OK
Font contains glyphs for whitespace characters.
Font contains glyphs for whitespace characters.
Font contains glyphs for whitespace characters.
Font contains glyphs for whitespace characters.
Font contains glyphs for whitespace characters.
Font contains glyphs for whitespace characters.
Font contains glyphs for whitespace characters.
This check enforces adherence to recommended whitespace (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.
Font has AGL recommended names for whitespace glyphs.
Font has AGL recommended names for whitespace glyphs.
Font has AGL recommended names for whitespace glyphs.
Font has AGL recommended names for whitespace glyphs.
Font has AGL recommended names for whitespace glyphs.
Font has AGL recommended names for whitespace glyphs.
Font has AGL recommended names for whitespace glyphs.
There is no whitespace glyph with ink.
There is no whitespace glyph with ink.
There is no whitespace glyph with ink.
There is no whitespace glyph with ink.
There is no whitespace glyph with ink.
There is no whitespace glyph with ink.
There is no whitespace glyph with ink.
According to the OpenType spec https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables
Whether TrueType or CFF outlines are used in an OpenType font, the following tables are required for the font to function correctly:
The spec also documents that variable fonts require the following table:
Depending on the typeface and coverage of a font, certain tables are recommended for optimum quality.
For example:
This font contains the following optional tables:
- cvt
- fpgm
- loca
- prep
- GPOS
- GSUB
- gasp [code: optional-tables]
Font contains all required tables.
This font contains the following optional tables:
- cvt
- fpgm
- loca
- prep
- GPOS
- GSUB
- gasp [code: optional-tables]
Font contains all required tables.
This font contains the following optional tables:
- cvt
- fpgm
- loca
- prep
- GPOS
- GSUB
- gasp [code: optional-tables]
Font contains all required tables.
This font contains the following optional tables:
- cvt
- fpgm
- loca
- prep
- GPOS
- GSUB
- gasp [code: optional-tables]
Font contains all required tables.
This font contains the following optional tables:
- cvt
- fpgm
- loca
- prep
- GPOS
- GSUB
- gasp [code: optional-tables]
Font contains all required tables.
This font contains the following optional tables:
- cvt
- fpgm
- loca
- prep
- GPOS
- GSUB
- gasp [code: optional-tables]
Font contains all required tables.
This font contains the following optional tables:
- cvt
- fpgm
- loca
- prep
- GPOS
- GSUB
- gasp [code: optional-tables]
Font contains all required tables.
Some font editors store source data in their own SFNT tables, and these can sometimes sneak into final release files, which should only have OpenType spec tables.
There are no unwanted tables.
There are no unwanted tables.
There are no unwanted tables.
There are no unwanted tables.
There are no unwanted tables.
There are no unwanted tables.
There are no unwanted tables.
On the STAT table, the "Italic" keyword must not be used on AxisValues for variation axes other than 'ital'.
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
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://docs.microsoft.com/en-us/typography/opentype/spec/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
Glyph names are all valid.
Glyph names are all valid.
Glyph names are all valid.
Glyph names are all valid.
Glyph names are all valid.
Glyph names are all valid.
Glyph names are all valid.
Duplicate glyph names prevent font installation on Mac OS X.
Font contains unique glyph names.
Font contains unique glyph names.
Font contains unique glyph names.
Font contains unique glyph names.
Font contains unique glyph names.
Font contains unique glyph names.
Font contains unique glyph names.
Hey! It all looks good!
Hey! It all looks good!
Hey! It all looks good!
Hey! It all looks good!
Hey! It all looks good!
Hey! It all looks good!
Hey! It all looks good!
This is a merely informative check that lists all sibling families detected by fontbakery.
Only the fontfiles in these directories will be considered in superfamily-level checks.
. [code: family-path]
. [code: family-path]
. [code: family-path]
. [code: family-path]
. [code: family-path]
. [code: family-path]
. [code: family-path]
We may want all fonts within a super-family (all sibling families) to have the same vertical metrics so their line spacing is consistent across the super-family.
This is an experimental extended version of com.google.fonts/check/family/vertical_metrics and for now it will only result in WARNs.
Sibling families were not detected.
Sibling families were not detected.
Sibling families were not detected.
Sibling families were not detected.
Sibling families were not detected.
Sibling families were not detected.
Sibling families were not detected.
Per Bureau of Indian Standards every font supporting one of the official Indian languages needs to include Unicode Character “₹” (U+20B9) Indian Rupee Sign.
Unfulfilled Conditions: is_indic_font
Unfulfilled Conditions: is_indic_font
Unfulfilled Conditions: is_indic_font
Unfulfilled Conditions: is_indic_font
Unfulfilled Conditions: is_indic_font
Unfulfilled Conditions: is_indic_font
Unfulfilled Conditions: is_indic_font
Glyphs are either accessible directly through Unicode codepoints or through substitution rules.
In Color Fonts, glyphs are also referenced by the COLR table.
Any glyphs not accessible by either of these means are redundant and serve only to increase the font's file size.
Font did not contain any unreachable glyphs
Font did not contain any unreachable glyphs
Font did not contain any unreachable glyphs
Font did not contain any unreachable glyphs
Font did not contain any unreachable glyphs
Font did not contain any unreachable glyphs
Font did not contain any unreachable glyphs
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.
All glyphs have the recommended amount of contours
All glyphs have the recommended amount of contours
All glyphs have the recommended amount of contours
All glyphs have the recommended amount of contours
All glyphs have the recommended amount of contours
All glyphs have the recommended amount of contours
All glyphs have the recommended amount of contours
The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark a hyphenation possibility within a word in the absence of or overriding dictionary hyphenation.
It is supposed to be zero-width and invisible.
It is also mostly an obsolete mechanism now, and the character is typicaly only included in fonts for legacy codepage coverage.
Looks good!
Looks good!
Looks good!
Looks good!
Looks good!
Looks good!
Looks good!
The W3C recommends the addition of chws and vchw features to CJK fonts to enhance the spacing of glyphs in environments which do not fully support JLREQ layout rules.
The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used to add these features automatically.
Unfulfilled Conditions: is_cjk_font
Unfulfilled Conditions: is_cjk_font
Unfulfilled Conditions: is_cjk_font
Unfulfilled Conditions: is_cjk_font
Unfulfilled Conditions: is_cjk_font
Unfulfilled Conditions: is_cjk_font
Unfulfilled Conditions: is_cjk_font
Some families have glyphs which have been constructed by using transformed components e.g the 'u' being constructed from a flipped 'n'.
From a designers point of view, this sounds like a win (less work). However, such approaches can lead to rasterization issues, such as having the 'u' not sitting on the baseline at certain sizes after running the font through ttfautohint.
Other issues are outlines that end up reversed when only one dimension is flipped while the other isn't.
As of July 2019, Marc Foley observed that ttfautohint assigns cvt values to transformed glyphs as if they are not transformed and the result is they render very badly, and that vttLib does not support flipped components.
When building the font with fontmake, the problem can be fixed by adding this to the command line:
--filter DecomposeTransformedComponentsFilter
No glyphs had components with scaling or rotation
No glyphs had components with scaling or rotation
No glyphs had components with scaling or rotation
No glyphs had components with scaling or rotation
No glyphs had components with scaling or rotation
No glyphs had components with scaling or rotation
No glyphs had components with scaling or rotation
The dotted circle character (U+25CC) is inserted by shaping engines before mark glyphs which do not have an associated base, especially in the context of broken syllabic clusters.
For fonts containing combining marks, it is recommended that the dotted circle character be included so that these isolated marks can be displayed properly; for fonts supporting complex scripts, this should be considered mandatory.
Additionally, when a dotted circle glyph is present, it should be able to display all marks correctly, meaning that it should contain anchors for all attaching marks.
No dotted circle glyph present [code: missing-dotted-circle]
No dotted circle glyph present [code: missing-dotted-circle]
No dotted circle glyph present [code: missing-dotted-circle]
No dotted circle glyph present [code: missing-dotted-circle]
No dotted circle glyph present [code: missing-dotted-circle]
No dotted circle glyph present [code: missing-dotted-circle]
No dotted circle glyph present [code: missing-dotted-circle]
An accent placed on characters with a "soft dot", like i or j, causes the dot to disappear. An explicit dot above can be added where required. See "Diacritics on i and j" in Section 7.1, "Latin" in The Unicode Standard.
Characters with the Soft_Dotted property are listed in https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt
The dot of soft dotted characters used in orthographies must disappear in the following strings: j̀ j́ j̃ j̈
The dot of soft dotted characters should disappear in other cases, for example: ĵ j̇ j̧̀ j̧́ ĵ̧ j̧̃ j̧̇ j̧̈ [code: soft-dotted]
The dot of soft dotted characters used in orthographies must disappear in the following strings: j̀ j́ j̃ j̈
The dot of soft dotted characters should disappear in other cases, for example: ĵ j̇ j̧̀ j̧́ ĵ̧ j̧̃ j̧̇ j̧̈ [code: soft-dotted]
The dot of soft dotted characters used in orthographies must disappear in the following strings: j̀ j́ j̃ j̈
The dot of soft dotted characters should disappear in other cases, for example: ĵ j̇ j̧̀ j̧́ ĵ̧ j̧̃ j̧̇ j̧̈ [code: soft-dotted]
The dot of soft dotted characters used in orthographies must disappear in the following strings: j̀ j́ j̃ j̈
The dot of soft dotted characters should disappear in other cases, for example: ĵ j̇ j̧̀ j̧́ ĵ̧ j̧̃ j̧̇ j̧̈ [code: soft-dotted]
The dot of soft dotted characters used in orthographies must disappear in the following strings: j̀ j́ j̃ j̈
The dot of soft dotted characters should disappear in other cases, for example: ĵ j̇ j̧̀ j̧́ ĵ̧ j̧̃ j̧̇ j̧̈ [code: soft-dotted]
The dot of soft dotted characters used in orthographies must disappear in the following strings: j̀ j́ j̃ j̈
The dot of soft dotted characters should disappear in other cases, for example: ĵ j̇ j̧̀ j̧́ ĵ̧ j̧̃ j̧̇ j̧̈ [code: soft-dotted]
The dot of soft dotted characters used in orthographies must disappear in the following strings: j̀ j́ j̃ j̈
The dot of soft dotted characters should disappear in other cases, for example: ĵ j̇ j̧̀ j̧́ ĵ̧ j̧̃ j̧̇ j̧̈ [code: soft-dotted]
Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7 where possible (when there are no suffixes/prefixes for all rules in the lookup).
However, makeotf has never generated these lookup types and they are rare in practice. Perhaps before of this, Mac's CoreText shaper does not correctly interpret GPOS7, meaning that these lookups will be ignored by the shaper, and fonts containing these lookups will have unintended positioning errors.
To fix this warning, rebuild the font with a recent version of fonttools.
Font has no GPOS7 lookups
Font has no GPOS7 lookups
Font has no GPOS7 lookups
Font has no GPOS7 lookups
Font has no GPOS7 lookups
Font has no GPOS7 lookups
Font has no GPOS7 lookups
Malformed fonts can cause FreeType to crash.
FreeType is not available; to install it, invoke the 'freetype' extra when installing Font Bakery. [code: freetype-not-installed]
FreeType is not available; to install it, invoke the 'freetype' extra when installing Font Bakery. [code: freetype-not-installed]
FreeType is not available; to install it, invoke the 'freetype' extra when installing Font Bakery. [code: freetype-not-installed]
FreeType is not available; to install it, invoke the 'freetype' extra when installing Font Bakery. [code: freetype-not-installed]
FreeType is not available; to install it, invoke the 'freetype' extra when installing Font Bakery. [code: freetype-not-installed]
FreeType is not available; to install it, invoke the 'freetype' extra when installing Font Bakery. [code: freetype-not-installed]
FreeType is not available; to install it, invoke the 'freetype' extra when installing Font Bakery. [code: freetype-not-installed]
OpenType fonts that contain TrueType outlines should use the value of 0x00010000 for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.
Fonts with the wrong sfntVersion value are rejected by FreeType.
https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory
Font has the correct sfntVersion value.
Font has the correct sfntVersion value.
Font has the correct sfntVersion value.
Font has the correct sfntVersion value.
Font has the correct sfntVersion value.
Font has the correct sfntVersion value.
Font has the correct sfntVersion value.
If the space and nbspace glyphs have different widths, then Google Workspace has problems with the font.
The nbspace is used to replace the space character in multiple situations in documents; such as the space before punctuation in languages that do that. It avoids the punctuation to be separated from the last word and go to next line.
This is automatic substitution by the text editors, not by fonts. It is also used by designers in text composition practice to create nicely shaped paragraphs. If the space and the nbspace are not the same width, it breaks the text composition of documents.
Space and non-breaking space have the same width.
Space and non-breaking space have the same width.
Space and non-breaking space have the same width.
Space and non-breaking space have the same width.
Space and non-breaking space have the same width.
Space and non-breaking space have the same width.
Space and non-breaking space have the same width.
When creating a variable font, the designer must make sure that corresponding paths have the same start points across masters, as well as that corresponding component shapes are placed in the same order within a glyph across masters. If this is not done, the glyph will not interpolate correctly.
Here we check for the presence of potential interpolation errors using the fontTools.varLib.interpolatable module.
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
It is a common practice to have math signs sharing the same width (preferably the same width as tabular figures accross the entire font family).
This probably comes from the will to avoid additional tabular math signs knowing that their design can easily share the same width.
Looks good.
Looks good.
Looks good.
Looks good.
Looks good.
Looks good.
Looks good.
Per "The Type 2 Charstring Format, Technical Note #5177", the "Subr nesting, stack limit" is 10.
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Per "The CFF2 CharString Format", the "Subr nesting, stack limit" is 10.
Unfulfilled Conditions: is_cff2
Unfulfilled Conditions: is_cff2
Unfulfilled Conditions: is_cff2
Unfulfilled Conditions: is_cff2
Unfulfilled Conditions: is_cff2
Unfulfilled Conditions: is_cff2
Unfulfilled Conditions: is_cff2
The 'dotsection' operator and the use of 'endchar' to build accented characters from the Adobe Standard Encoding Character Set ("seac") are deprecated in CFF. Adobe recommends repairing any fonts that use these, especially endchar-as-seac, because a rendering issue was discovered in Microsoft Word with a font that makes use of this operation. The check treats that usage as a FAIL. There are no known ill effects of using dotsection, so that check is a WARN.
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Fonts have equal unicode encodings.
All font files have the same version.
According to the OpenType spec:
The value of unitsPerEm at the head table must be a value between 16 and 16384. Any value in this range is valid.
In fonts that have TrueType outlines, a power of 2 is recommended as this allows performance optimizations in some rasterizers.
But 1000 is a commonly used value. And 2000 may become increasingly more common on Variable Fonts.
The unitsPerEm value (1000) on the 'head' table is reasonable.
The unitsPerEm value (1000) on the 'head' table is reasonable.
The unitsPerEm value (1000) on the 'head' table is reasonable.
The unitsPerEm value (1000) on the 'head' table is reasonable.
The unitsPerEm value (1000) on the 'head' table is reasonable.
The unitsPerEm value (1000) on the 'head' table is reasonable.
The unitsPerEm value (1000) on the 'head' table is reasonable.
All font version fields match.
All font version fields match.
All font version fields match.
All font version fields match.
All font version fields match.
All font version fields match.
All font version fields match.
The values of the flags on the macStyle entry on the 'head' OpenType table that describe whether a font is bold and/or italic must be coherent with the actual style of the font as inferred by its filename.
head macStyle ITALIC bit is properly set.
head macStyle BOLD bit is properly set.
head macStyle ITALIC bit is properly set.
head macStyle BOLD bit is properly set.
head macStyle ITALIC bit is properly set.
head macStyle BOLD bit is properly set.
head macStyle ITALIC bit is properly set.
head macStyle BOLD bit is properly set.
Unfulfilled Conditions: style
head macStyle ITALIC bit is properly set.
head macStyle BOLD bit is properly set.
head macStyle ITALIC bit is properly set.
head macStyle BOLD bit is properly set.
Fonts have consistent PANOSE proportion.
Fonts have consistent PANOSE family type.
Per the OpenType spec: name ID 1 'is used in combination with Font Subfamily name (name ID 2), and should be shared among at most four fonts that differ only in weight or style.
This four-way distinction should also be reflected in the OS/2.fsSelection field, using bits 0 and 5.
The OS/2.fsSelection bold & italic settings were unique within each compatible family group.
OS/2 xAvgCharWidth value is correct.
OS/2 xAvgCharWidth value is correct.
OS/2 xAvgCharWidth value is correct.
OS/2 xAvgCharWidth value is correct.
OS/2 xAvgCharWidth value is correct.
OS/2 xAvgCharWidth value is correct.
OS/2 xAvgCharWidth value is correct.
The bold and italic bits in OS/2.fsSelection must match the bold and italic bits in head.macStyle per the OpenType spec.
The OS/2.fsSelection and head.macStyle bold and italic settings match.
The OS/2.fsSelection and head.macStyle bold and italic settings match.
The OS/2.fsSelection and head.macStyle bold and italic settings match.
The OS/2.fsSelection and head.macStyle bold and italic settings match.
The OS/2.fsSelection and head.macStyle bold and italic settings match.
The OS/2.fsSelection and head.macStyle bold and italic settings match.
The OS/2.fsSelection and head.macStyle bold and italic settings match.
At least some programs (such as Word and Sublime Text) under Windows 7 do not recognize fonts unless code page bits are properly set on the ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.
More specifically, the fonts are selectable in the font menu, but whichever Windows API these applications use considers them unsuitable for any character set, so anything set in these fonts is rendered with Arial as a fallback font.
This check currently does not identify which code pages should be set. Auto-detecting coverage is not trivial since the OpenType specification leaves the interpretation of whether a given code page is "functional" or not open to the font developer to decide.
So here we simply detect as a FAIL when a given font has no code page declared at all.
At least one code page is defined.
At least one code page is defined.
At least one code page is defined.
At least one code page is defined.
At least one code page is defined.
At least one code page is defined.
At least one code page is defined.
When a font project's Vendor ID is specified explicitely on FontBakery's configuration file, all binaries must have a matching vendor identifier value in the OS/2 table.
Add the vendor_id
key to a fontbakery.yaml
file on your font project directory to enable this check.
You'll also need to use the --configuration
flag when invoking fontbakery.
Add the vendor_id
key to a fontbakery.yaml
file on your font project directory to enable this check.
You'll also need to use the --configuration
flag when invoking fontbakery.
Add the vendor_id
key to a fontbakery.yaml
file on your font project directory to enable this check.
You'll also need to use the --configuration
flag when invoking fontbakery.
Add the vendor_id
key to a fontbakery.yaml
file on your font project directory to enable this check.
You'll also need to use the --configuration
flag when invoking fontbakery.
Add the vendor_id
key to a fontbakery.yaml
file on your font project directory to enable this check.
You'll also need to use the --configuration
flag when invoking fontbakery.
Add the vendor_id
key to a fontbakery.yaml
file on your font project directory to enable this check.
You'll also need to use the --configuration
flag when invoking fontbakery.
Add the vendor_id
key to a fontbakery.yaml
file on your font project directory to enable this check.
You'll also need to use the --configuration
flag when invoking fontbakery.
OS/2 fsSelection REGULAR bit is properly set.
OS/2 fsSelection ITALIC bit is properly set.
OS/2 fsSelection BOLD bit is properly set.
OS/2 fsSelection REGULAR bit is properly set.
OS/2 fsSelection ITALIC bit is properly set.
OS/2 fsSelection BOLD bit is properly set.
OS/2 fsSelection REGULAR bit is properly set.
OS/2 fsSelection ITALIC bit is properly set.
OS/2 fsSelection BOLD bit is properly set.
OS/2 fsSelection REGULAR bit is properly set.
OS/2 fsSelection ITALIC bit is properly set.
OS/2 fsSelection BOLD bit is properly set.
Unfulfilled Conditions: style
OS/2 fsSelection REGULAR bit is properly set.
OS/2 fsSelection ITALIC bit is properly set.
OS/2 fsSelection BOLD bit is properly set.
OS/2 fsSelection REGULAR bit is properly set.
OS/2 fsSelection ITALIC bit is properly set.
OS/2 fsSelection BOLD bit is properly set.
Dave C Lemon (Adobe Type Team) recommends setting the underline thickness to be consistent across the family.
If thicknesses are not family consistent, words set on the same line which have different styles look strange.
Fonts have consistent underline thickness.
Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and should not be used.
According to Thomas Phinney, the possible problem with post format 3 is that under the right combination of circumstances, one can generate PDF from a font with a post format 3 table, and not have accurate backing store for any text that has non-default glyphs for a given codepoint.
It will look fine but not be searchable. This can affect Latin text with high-end typography, and some complex script writing systems, especially with higher-quality fonts. Those circumstances generally involve creating a PDF by first printing a PostScript stream to disk, and then creating a PDF from that stream without reference to the original source document. There are some workflows where this applies,but these are not common use cases.
Apple recommends against use of post format version 4 as "no longer necessary and should be avoided". Please see the Apple TrueType reference documentation for additional details.
https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html
Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds, and post format 3 for CFF builds.
Font has an acceptable post format 2.0 table version.
Font has an acceptable post format 2.0 table version.
Font has an acceptable post format 2.0 table version.
Font has an acceptable post format 2.0 table version.
Font has an acceptable post format 2.0 table version.
Font has an acceptable post format 2.0 table version.
Font has an acceptable post format 2.0 table version.
The 'post' table italicAngle property should be a reasonable amount, likely not more than 30°. Note that in the OpenType specification, the value is negative for a rightward lean.
https://docs.microsoft.com/en-us/typography/opentype/spec/post
Value of post.italicAngle is -10.0 with style="BlackItalic".
Value of post.italicAngle is 0.0 with style="Bold".
Value of post.italicAngle is -10.0 with style="BoldItalic".
Value of post.italicAngle is 0.0 with style="Regular".
Unfulfilled Conditions: style
Value of post.italicAngle is 0.0 with style="SemiBold".
Value of post.italicAngle is -10.0 with style="SemiBoldItalic".
Per the OpenType spec:
'The Font Family name [...] should be shared among at most four fonts that differ only in weight or style [...]'
Family 'Lotion' has 5 fonts (should be 4 or fewer). [code: too-many]
Check the name table for empty records, as this can cause problems in Adobe apps.
No empty name table records found.
No empty name table records found.
No empty name table records found.
No empty name table records found.
No empty name table records found.
No empty name table records found.
No empty name table records found.
Description strings in the name table do not contain any copyright string.
Description strings in the name table do not contain any copyright string.
Description strings in the name table do not contain any copyright string.
Description strings in the name table do not contain any copyright string.
Description strings in the name table do not contain any copyright string.
Description strings in the name table do not contain any copyright string.
Description strings in the name table do not contain any copyright string.
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
On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch]
The PANOSE numbers are incorrect for a monospaced font. Note: Family Type is set to 0, which does not seem right. [code: mono-bad-panose]
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 168 instead. Please read https://github.com/fonttools/fonttools/issues/3014 to decide whether this makes sense for your font. [code: bad-numberOfHMetrics]
Font is monospaced but 9 glyphs (5.33%) have a different width. You should check the widths of: ['hyphen_greater.liga', 'colon_equal.liga', 'exclam_equal.liga', 'exclam_equal_equal.liga', 'equal_equal.liga', 'equal_equal_equal.liga', 'equal_greater.liga', 'greater_equal.liga', 'less_equal.liga'] [code: mono-outliers]
On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch]
The PANOSE numbers are incorrect for a monospaced font. Note: Family Type is set to 0, which does not seem right. [code: mono-bad-panose]
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 169 instead. Please read https://github.com/fonttools/fonttools/issues/3014 to decide whether this makes sense for your font. [code: bad-numberOfHMetrics]
Font is monospaced but 10 glyphs (5.92%) have a different width. You should check the widths of: ['hyphen_greater.liga', 'colon_equal.liga', 'exclam_equal.liga', 'exclam_equal_equal.liga', 'equal_equal.liga', 'equal_equal_equal.liga', 'equal_greater.liga', 'greater_equal.liga', 'less_equal.liga', 'LIG'] [code: mono-outliers]
On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch]
The PANOSE numbers are incorrect for a monospaced font. Note: Family Type is set to 0, which does not seem right. [code: mono-bad-panose]
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 168 instead. Please read https://github.com/fonttools/fonttools/issues/3014 to decide whether this makes sense for your font. [code: bad-numberOfHMetrics]
Font is monospaced but 9 glyphs (5.33%) have a different width. You should check the widths of: ['hyphen_greater.liga', 'colon_equal.liga', 'exclam_equal.liga', 'exclam_equal_equal.liga', 'equal_equal.liga', 'equal_equal_equal.liga', 'equal_greater.liga', 'greater_equal.liga', 'less_equal.liga'] [code: mono-outliers]
On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch]
The PANOSE numbers are incorrect for a monospaced font. Note: Family Type is set to 0, which does not seem right. [code: mono-bad-panose]
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 168 instead. Please read https://github.com/fonttools/fonttools/issues/3014 to decide whether this makes sense for your font. [code: bad-numberOfHMetrics]
Font is monospaced but 9 glyphs (5.33%) have a different width. You should check the widths of: ['hyphen_greater.liga', 'colon_equal.liga', 'exclam_equal.liga', 'exclam_equal_equal.liga', 'equal_equal.liga', 'equal_equal_equal.liga', 'equal_greater.liga', 'greater_equal.liga', 'less_equal.liga'] [code: mono-outliers]
On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch]
The PANOSE numbers are incorrect for a monospaced font. Note: Family Type is set to 0, which does not seem right. [code: mono-bad-panose]
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 168 instead. Please read https://github.com/fonttools/fonttools/issues/3014 to decide whether this makes sense for your font. [code: bad-numberOfHMetrics]
Font is monospaced but 9 glyphs (5.33%) have a different width. You should check the widths of: ['hyphen_greater.liga', 'colon_equal.liga', 'exclam_equal.liga', 'exclam_equal_equal.liga', 'equal_equal.liga', 'equal_equal_equal.liga', 'equal_greater.liga', 'greater_equal.liga', 'less_equal.liga'] [code: mono-outliers]
On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch]
The PANOSE numbers are incorrect for a monospaced font. Note: Family Type is set to 0, which does not seem right. [code: mono-bad-panose]
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 169 instead. Please read https://github.com/fonttools/fonttools/issues/3014 to decide whether this makes sense for your font. [code: bad-numberOfHMetrics]
Font is monospaced but 10 glyphs (5.92%) have a different width. You should check the widths of: ['hyphen_greater.liga', 'colon_equal.liga', 'exclam_equal.liga', 'exclam_equal_equal.liga', 'equal_equal.liga', 'equal_equal_equal.liga', 'equal_greater.liga', 'greater_equal.liga', 'less_equal.liga', 'LIG'] [code: mono-outliers]
On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch]
The PANOSE numbers are incorrect for a monospaced font. Note: Family Type is set to 0, which does not seem right. [code: mono-bad-panose]
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 168 instead. Please read https://github.com/fonttools/fonttools/issues/3014 to decide whether this makes sense for your font. [code: bad-numberOfHMetrics]
Font is monospaced but 9 glyphs (5.33%) have a different width. You should check the widths of: ['hyphen_greater.liga', 'colon_equal.liga', 'exclam_equal.liga', 'exclam_equal_equal.liga', 'equal_equal.liga', 'equal_equal_equal.liga', 'equal_greater.liga', 'greater_equal.liga', 'less_equal.liga'] [code: mono-outliers]
The FULL_FONT_NAME entry in the ‘name’ table should start with the same string as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or WWS_FAMILY_NAME).
If the Family Name is not included as the first part of the Full Font Name, and the user embeds the font in a document using a Microsoft Office app, the app will fail to render the font when it opens the document again.
NOTE: Up until version 1.5, the OpenType spec included the following exception in the definition of Full Font Name:
"An exception to the [above] definition of Full font name is for Microsoft platform strings for CFF OpenType fonts: in this case, the Full font name string must be identical to the PostScript FontName in the CFF Name INDEX."
https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids
Full font name begins with the font family name.
Full font name begins with the font family name.
Full font name begins with the font family name.
Full font name begins with the font family name.
Full font name begins with the font family name.
Full font name begins with the font family name.
Full font name begins with the font family name.
Font follows the family naming recommendations.
Font follows the family naming recommendations.
Font follows the family naming recommendations.
Font follows the family naming recommendations.
Font follows the family naming recommendations.
Font follows the family naming recommendations.
Font follows the family naming recommendations.
The PostScript name entries in the font's 'name' table should match the FontName string in the 'CFF ' table.
The 'CFF ' table has a lot of information that is duplicated in other tables. This information should be consistent across tables, because there's no guarantee which table an app will get the data from.
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
Unfulfilled Conditions: is_cff
The PostScript name entries in the font's 'name' table should be consistent across platforms.
This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.
Entries in the "name" table for ID 6 (PostScript name) are consistent.
Entries in the "name" table for ID 6 (PostScript name) are consistent.
Entries in the "name" table for ID 6 (PostScript name) are consistent.
Entries in the "name" table for ID 6 (PostScript name) are consistent.
Entries in the "name" table for ID 6 (PostScript name) are consistent.
Entries in the "name" table for ID 6 (PostScript name) are consistent.
Entries in the "name" table for ID 6 (PostScript name) are consistent.
'loca' table matches numGlyphs in 'maxp' table.
'loca' table matches numGlyphs in 'maxp' table.
'loca' table matches numGlyphs in 'maxp' table.
'loca' table matches numGlyphs in 'maxp' table.
'loca' table matches numGlyphs in 'maxp' table.
'loca' table matches numGlyphs in 'maxp' table.
'loca' table matches numGlyphs in 'maxp' table.
hhea lineGap is not equal to 0. [code: hhea]
hhea lineGap is not equal to 0. [code: hhea]
hhea lineGap is not equal to 0. [code: hhea]
hhea lineGap is not equal to 0. [code: hhea]
hhea lineGap is not equal to 0. [code: hhea]
hhea lineGap is not equal to 0. [code: hhea]
hhea lineGap is not equal to 0. [code: hhea]
MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.
MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.
MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.
MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.
MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.
MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.
MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.
Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.
For Upright fonts, you can set hhea.caretSlopeRise to 1 and hhea.caretSlopeRun to 0.
For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm and calculate hhea.caretSlopeRun like this: round(math.tan(math.radians(-1 * font["post"].italicAngle)) * font["head"].unitsPerEm)
This check allows for a 0.1° rounding difference between the Italic angle as calculated by the caret slope and post.italicAngle
hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.
hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.
hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.
hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.
hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.
hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.
hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.
Microsoft Office 2013 and below products expect fonts to have a digital signature declared in a DSIG table in order to implement OpenType features. The EOL date for Microsoft Office 2013 products is 4/11/2023. This issue does not impact Microsoft Office 2016 and above products.
As we approach the EOL date, it is now considered better to completely remove the table.
But if you still want your font to support OpenType features on Office 2013, then you may find it handy to add a fake signature on a placeholder DSIG table by running one of the helper scripts provided at https://github.com/googlefonts/gftools
Reference: https://github.com/googlefonts/fontbakery/issues/1845
This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly. The current recommendation is to completely remove the DSIG table. [code: found-DSIG]
This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly. The current recommendation is to completely remove the DSIG table. [code: found-DSIG]
This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly. The current recommendation is to completely remove the DSIG table. [code: found-DSIG]
This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly. The current recommendation is to completely remove the DSIG table. [code: found-DSIG]
This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly. The current recommendation is to completely remove the DSIG table. [code: found-DSIG]
This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly. The current recommendation is to completely remove the DSIG table. [code: found-DSIG]
This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly. The current recommendation is to completely remove the DSIG table. [code: found-DSIG]
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.
Font does not has spacing glyphs in the GDEF mark glyph class.
Font does not has spacing glyphs in the GDEF mark glyph class.
Font does not has spacing glyphs in the GDEF mark glyph class.
Font does not has spacing glyphs in the GDEF mark glyph class.
Font does not has spacing glyphs in the GDEF mark glyph class.
Font does not has spacing glyphs in the GDEF mark glyph class.
Font does not has spacing glyphs in the GDEF mark glyph class.
Mark characters should be in the GDEF mark glyph class.
Font does not have mark characters not in the GDEF mark glyph class.
Font does not have mark characters not in the GDEF mark glyph class.
Font does not have mark characters not in the GDEF mark glyph class.
Font does not have mark characters not in the GDEF mark glyph class.
Font does not have mark characters not in the GDEF mark glyph class.
Font does not have mark characters not in the GDEF mark glyph class.
Font does not have mark characters not in the GDEF mark glyph class.
Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned if they have mark anchors.
Only combining mark glyphs should be in that class. Any non-mark glyph must not be in that class, in particular spacing glyphs.
Font does not have non-mark characters in the GDEF mark glyph class.
Font does not have non-mark characters in the GDEF mark glyph class.
Font does not have non-mark characters in the GDEF mark glyph class.
Font does not have non-mark characters in the GDEF mark glyph class.
Font does not have non-mark characters in the GDEF mark glyph class.
Font does not have non-mark characters in the GDEF mark glyph class.
Font does not have non-mark characters in the GDEF mark glyph class.
GPOS table lacks kerning information. [code: lacks-kern-info]
GPOS table lacks kerning information. [code: lacks-kern-info]
GPOS table lacks kerning information. [code: lacks-kern-info]
GPOS table lacks kerning information. [code: lacks-kern-info]
GPOS table lacks kerning information. [code: lacks-kern-info]
GPOS table lacks kerning information. [code: lacks-kern-info]
GPOS table lacks kerning information. [code: lacks-kern-info]
Even though all fonts should have their kerning implemented in the GPOS table, there may be kerning info at the kern table as well.
Some applications such as MS PowerPoint require kerning info on the kern table. More specifically, they require a format 0 kern subtable from a kern table version 0 with only glyphs defined in the cmap table, which is the only one that Windows understands (and which is also the simplest and more limited of all the kern subtables).
Google Fonts ingests fonts made for download and use on desktops, and does all web font optimizations in the serving pipeline (using libre libraries that anyone can replicate.)
Ideally, TTFs intended for desktop users (and thus the ones intended for Google Fonts) should have both KERN and GPOS tables.
Given all of the above, we currently treat kerning on a v0 kern table as a good-to-have (but optional) feature.
Font does not declare an optional "kern" table.
Font does not declare an optional "kern" table.
Font does not declare an optional "kern" table.
Font does not declare an optional "kern" table.
Font does not declare an optional "kern" table.
Font does not declare an optional "kern" table.
Font does not declare an optional "kern" table.
There is no unused data at the end of the glyf table.
There is no unused data at the end of the glyf table.
There is no unused data at the end of the glyf table.
There is no unused data at the end of the glyf table.
There is no unused data at the end of the glyf table.
There is no unused data at the end of the glyf table.
There is no unused data at the end of the glyf table.
All glyph paths have coordinates within bounds!
All glyph paths have coordinates within bounds!
All glyph paths have coordinates within bounds!
All glyph paths have coordinates within bounds!
All glyph paths have coordinates within bounds!
All glyph paths have coordinates within bounds!
All glyph paths have coordinates within bounds!
There have been cases in which fonts had faulty double quote marks, with each of them containing two single quote marks as components with the same x, y coordinates which makes them visually look like single quote marks.
This check ensures that glyphs do not contain duplicate components which have the same x,y coordinates.
Glyphs do not contain duplicate components which have the same x,y coordinates.
Glyphs do not contain duplicate components which have the same x,y coordinates.
Glyphs do not contain duplicate components which have the same x,y coordinates.
Glyphs do not contain duplicate components which have the same x,y coordinates.
Glyphs do not contain duplicate components which have the same x,y coordinates.
Glyphs do not contain duplicate components which have the same x,y coordinates.
Glyphs do not contain duplicate components which have the same x,y coordinates.
According to the Open-Type spec's registered design-variation tag 'wght' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght
If a variable font has a 'wght' (Weight) axis, then the coordinate of its 'Regular' instance is required to be 400.
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
According to the Open-Type spec's registered design-variation tag 'wdth' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth
If a variable font has a 'wdth' (Width) axis, then the coordinate of its 'Regular' instance is required to be 100.
Unfulfilled Conditions: is_variable_font, has_wdth_axis
Unfulfilled Conditions: is_variable_font, has_wdth_axis
Unfulfilled Conditions: is_variable_font, has_wdth_axis
Unfulfilled Conditions: is_variable_font, has_wdth_axis
Unfulfilled Conditions: is_variable_font, has_wdth_axis
Unfulfilled Conditions: is_variable_font, has_wdth_axis
Unfulfilled Conditions: is_variable_font, has_wdth_axis
According to the Open-Type spec's registered design-variation tag 'slnt' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt
If a variable font has a 'slnt' (Slant) axis, then the coordinate of its 'Regular' instance is required to be zero.
Unfulfilled Conditions: is_variable_font, has_slnt_axis
Unfulfilled Conditions: is_variable_font, has_slnt_axis
Unfulfilled Conditions: is_variable_font, has_slnt_axis
Unfulfilled Conditions: is_variable_font, has_slnt_axis
Unfulfilled Conditions: is_variable_font, has_slnt_axis
Unfulfilled Conditions: is_variable_font, has_slnt_axis
Unfulfilled Conditions: is_variable_font, has_slnt_axis
According to the Open-Type spec's registered design-variation tag 'ital' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital
If a variable font has a 'ital' (Italic) axis, then the coordinate of its 'Regular' instance is required to be zero.
Unfulfilled Conditions: is_variable_font, has_ital_axis
Unfulfilled Conditions: is_variable_font, has_ital_axis
Unfulfilled Conditions: is_variable_font, has_ital_axis
Unfulfilled Conditions: is_variable_font, has_ital_axis
Unfulfilled Conditions: is_variable_font, has_ital_axis
Unfulfilled Conditions: is_variable_font, has_ital_axis
Unfulfilled Conditions: is_variable_font, has_ital_axis
According to the Open-Type spec's registered design-variation tag 'opsz' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz
If a variable font has an 'opsz' (Optical Size) axis, then the coordinate of its 'Regular' instance is recommended to be a value in the range 10 to 16.
Unfulfilled Conditions: is_variable_font, has_opsz_axis
Unfulfilled Conditions: is_variable_font, has_opsz_axis
Unfulfilled Conditions: is_variable_font, has_opsz_axis
Unfulfilled Conditions: is_variable_font, has_opsz_axis
Unfulfilled Conditions: is_variable_font, has_opsz_axis
Unfulfilled Conditions: is_variable_font, has_opsz_axis
Unfulfilled Conditions: is_variable_font, has_opsz_axis
The Open-Type spec's registered design-variation tag 'wght' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght does not specify a required value for the 'Bold' instance of a variable font.
But Dave Crossland suggested that we should enforce a required value of 700 in this case (NOTE: a distinction is made between "no bold instance present" vs "bold instance is present but its wght coordinate is not == 700").
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
According to the Open-Type spec's registered design-variation tag 'wght' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght
On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
Unfulfilled Conditions: is_variable_font, has_wght_axis
According to the Open-Type spec's registered design-variation tag 'wdth' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth
On the 'wdth' (Width) axis, the valid numeric range is strictly greater than zero.
Unfulfilled Conditions: is_variable_font, has_wdth_axis
Unfulfilled Conditions: is_variable_font, has_wdth_axis
Unfulfilled Conditions: is_variable_font, has_wdth_axis
Unfulfilled Conditions: is_variable_font, has_wdth_axis
Unfulfilled Conditions: is_variable_font, has_wdth_axis
Unfulfilled Conditions: is_variable_font, has_wdth_axis
Unfulfilled Conditions: is_variable_font, has_wdth_axis
The OpenType spec says at https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:
[...] the scale for the Slant axis is interpreted as the angle of slant in counter-clockwise degrees from upright. This means that a typical, right-leaning oblique design will have a negative slant value. This matches the scale used for the italicAngle field in the post table.
Unfulfilled Conditions: is_variable_font, has_slnt_axis
Unfulfilled Conditions: is_variable_font, has_slnt_axis
Unfulfilled Conditions: is_variable_font, has_slnt_axis
Unfulfilled Conditions: is_variable_font, has_slnt_axis
Unfulfilled Conditions: is_variable_font, has_slnt_axis
Unfulfilled Conditions: is_variable_font, has_slnt_axis
Unfulfilled Conditions: is_variable_font, has_slnt_axis
According to the 'fvar' documentation in OpenType spec v1.9 https://docs.microsoft.com/en-us/typography/opentype/spec/fvar
The axisNameID field provides a name ID that can be used to obtain strings from the 'name' table that can be used to refer to the axis in application user interfaces. The name ID must be greater than 255 and less than 32768.
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
According to the 'fvar' documentation in OpenType spec v1.9 https://docs.microsoft.com/en-us/typography/opentype/spec/fvar
The subfamilyNameID field provides a name ID that can be used to obtain strings from the 'name' table that can be treated as equivalent to name ID 17 (typographic subfamily) strings for the given instance. Values of 2 or 17 can be used; otherwise, values must be greater than 255 and less than 32768.
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
According to the 'fvar' documentation in OpenType spec v1.9 https://docs.microsoft.com/en-us/typography/opentype/spec/fvar
The postScriptNameID field provides a name ID that can be used to obtain strings from the 'name' table that can be treated as equivalent to name ID 6 (PostScript name) strings for the given instance. Values of 6 and 0xFFFF can be used; otherwise, values must be greater than 255 and less than 32768.
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
According to the 'fvar' documentation in OpenType spec v1.9.1 https://docs.microsoft.com/en-us/typography/opentype/spec/fvar
The default instance of a font is that instance for which the coordinate value of each axis is the defaultValue specified in the corresponding variation axis record. An instance record is not required for the default instance, though an instance record can be provided. When enumerating named instances, the default instance should be enumerated even if there is no corresponding instance record. If an instance record is included for the default instance (that is, an instance record has coordinates set to default values), then the nameID value should be set to either 2 or 17 or to a name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is included in instance records, and the postScriptNameID value should be set to 6 or to a name ID with the same value as name ID 6.
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
According to the 'fvar' documentation in OpenType spec v1.9 https://docs.microsoft.com/en-us/typography/opentype/spec/fvar
All of the instance records in a given font must be the same size, with all either including or omitting the postScriptNameID field. [...] If the value is 0xFFFF, then the value is ignored, and no PostScript name equivalent is provided for the instance.
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
According to the 'fvar' documentation in OpenType spec v1.9 https://docs.microsoft.com/en-us/typography/opentype/spec/fvar
All of the instance records in a font should have distinct coordinates and distinct subfamilyNameID and postScriptName ID values. If two or more records share the same coordinates, the same nameID values or the same postScriptNameID values, then all but the first can be ignored.
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
According to the Open-Type spec's syntactic requirements for foundry-defined design-variation axis tags available at https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg
Foundry-defined tags must begin with an uppercase letter and must use only uppercase letters or digits.
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Check that related Upright and Italic VFs have a 'ital' axis in STAT table.
OK
According to the OpenType spec, there must be an Axis Record for every axis defined in the fvar table.
https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
Unfulfilled Conditions: is_variable_font
According to the OpenType spec, in a variable font, it is strongly recommended that axis value tables be included for every element of typographic subfamily names for all of the named instances defined in the 'fvar' table.
Axis value tables are particularly important for variable fonts, but can also be used in non-variable fonts. When used in non-variable fonts, axis value tables for particular values should be implemented consistently across fonts in the family.
If present, Format 4 Axis Value tables are checked to ensure they have more than one AxisValueRecord (a strong recommendation from the OpenType spec).
https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Check that the value of the 'ital' STAT axis is boolean (either 0 or 1), and elided for the Upright and not elided for the Italic, and that the Upright is linked to the Italic.
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: style, has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Check that the 'ital' STAT axis is last in axis order.
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: style, has_STAT_table
Unfulfilled Conditions: has_STAT_table
Unfulfilled Conditions: has_STAT_table
Incorrect tags can be indications of typos, leftover debugging code or questionable approaches, or user error in the font editor. Such typos can cause features and language support to fail to work as intended.
No invalid feature tags were found
No invalid feature tags were found
No invalid feature tags were found
No invalid feature tags were found
No invalid feature tags were found
No invalid feature tags were found
No invalid feature tags were found
Incorrect script tags can be indications of typos, leftover debugging code or questionable approaches, or user error in the font editor. Such typos can cause features and language support to fail to work as intended.
No invalid script tags were found
No invalid script tags were found
No invalid script tags were found
No invalid script tags were found
No invalid script tags were found
No invalid script tags were found
No invalid script tags were found
Incorrect language tags can be indications of typos, leftover debugging code or questionable approaches, or user error in the font editor. Such typos can cause features and language support to fail to work as intended.
No invalid language tags were found
No invalid language tags were found
No invalid language tags were found
No invalid language tags were found
No invalid language tags were found
No invalid language tags were found
No invalid language tags were found
This check heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, here we also check for points near the x-height (but only for lowercase Latin letters), cap-height, ascender and descender Y coordinates.
Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this check is liable to generate significant numbers of false positives, it will pass if there are more than 100 reported misalignments.
The following glyphs have on-curve points which have potentially incorrect y coordinates:
* exclam (U+0021): X=168.5,Y=1.5 (should be at baseline 0?)
* quotedbl (U+0022): X=219.0,Y=682.0 (should be at cap-height 680?)
* quotedbl (U+0022): X=350.0,Y=682.0 (should be at cap-height 680?)
* quotedbl (U+0022): X=409.0,Y=682.0 (should be at cap-height 680?)
* quotedbl (U+0022): X=540.0,Y=682.0 (should be at cap-height 680?)
* percent (U+0025): X=438.5,Y=-2.0 (should be at baseline 0?)
* quotesingle (U+0027): X=284.0,Y=682.0 (should be at cap-height 680?)
* quotesingle (U+0027): X=415.0,Y=682.0 (should be at cap-height 680?)
* period (U+002E): X=178.5,Y=1.5 (should be at baseline 0?)
* nine (U+0039): X=228.0,Y=681.5 (should be at cap-height 680?)
* 26 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-misalignments]
The following glyphs have on-curve points which have potentially incorrect y coordinates:
* dollar (U+0024): X=319.0,Y=-2.0 (should be at baseline 0?)
* three (U+0033): X=366.0,Y=-0.5 (should be at baseline 0?)
* five (U+0035): X=170.5,Y=2.0 (should be at baseline 0?)
* eight (U+0038): X=376.0,Y=-2.0 (should be at baseline 0?)
* eight (U+0038): X=155.5,Y=-2.0 (should be at baseline 0?)
* S (U+0053): X=166.0,Y=0.5 (should be at baseline 0?)
* S (U+0053): X=173.0,Y=679.0 (should be at cap-height 680?)
* a (U+0061): X=380.5,Y=399.0 (should be at x-height 400?)
* b (U+0062): X=376.5,Y=401.0 (should be at x-height 400?)
* d (U+0064): X=153.5,Y=401.0 (should be at x-height 400?)
* 29 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-misalignments]
The following glyphs have on-curve points which have potentially incorrect y coordinates:
* dollar (U+0024): X=284.0,Y=-2.0 (should be at baseline 0?)
* two (U+0032): X=231.0,Y=679.5 (should be at cap-height 680?)
* three (U+0033): X=334.0,Y=-1.0 (should be at baseline 0?)
* three (U+0033): X=130.0,Y=-2.0 (should be at baseline 0?)
* eight (U+0038): X=441.0,Y=679.0 (should be at cap-height 680?)
* question (U+003F): X=221.0,Y=679.5 (should be at cap-height 680?)
* C (U+0043): X=453.5,Y=682.0 (should be at cap-height 680?)
* G (U+0047): X=453.5,Y=682.0 (should be at cap-height 680?)
* S (U+0053): X=134.0,Y=1.5 (should be at baseline 0?)
* d (U+0064): X=186.0,Y=401.5 (should be at x-height 400?)
* 19 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-misalignments]
The following glyphs have on-curve points which have potentially incorrect y coordinates:
* exclam (U+0021): X=266.0,Y=2.0 (should be at baseline 0?)
* period (U+002E): X=296.0,Y=2.0 (should be at baseline 0?)
* colon (U+003A): X=309.0,Y=1.0 (should be at baseline 0?)
* colon (U+003A): X=222.0,Y=1.0 (should be at baseline 0?)
* question (U+003F): X=266.0,Y=2.0 (should be at baseline 0?)
* D (U+0044): X=202.0,Y=682.0 (should be at cap-height 680?)
* D (U+0044): X=202.0,Y=682.0 (should be at cap-height 680?)
* E (U+0045): X=81.0,Y=681.0 (should be at cap-height 680?)
* E (U+0045): X=441.0,Y=681.0 (should be at cap-height 680?)
* E (U+0045): X=461.0,Y=1.0 (should be at baseline 0?)
* 31 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-misalignments]
The following glyphs have on-curve points which have potentially incorrect y coordinates:
* exclam (U+0021): X=239.0,Y=2.0 (should be at baseline 0?)
* period (U+002E): X=369.0,Y=2.0 (should be at baseline 0?)
* colon (U+003A): X=192.0,Y=-1.0 (should be at baseline 0?)
* question (U+003F): X=239.0,Y=2.0 (should be at baseline 0?)
* at (U+0040): X=85.5,Y=1.5 (should be at baseline 0?)
* B (U+0042): X=45.0,Y=1.0 (should be at baseline 0?)
* D (U+0044): X=285.0,Y=682.0 (should be at cap-height 680?)
* D (U+0044): X=285.0,Y=682.0 (should be at cap-height 680?)
* E (U+0045): X=166.0,Y=681.0 (should be at cap-height 680?)
* E (U+0045): X=526.0,Y=681.0 (should be at cap-height 680?)
* 38 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-misalignments]
The following glyphs have on-curve points which have potentially incorrect y coordinates:
* ampersand (U+0026): X=229.0,Y=-2.0 (should be at baseline 0?)
* six (U+0036): X=168.0,Y=1.0 (should be at baseline 0?)
* c (U+0063): X=379.5,Y=-2.0 (should be at baseline 0?)
* e (U+0065): X=363.5,Y=-2.0 (should be at baseline 0?)
* e (U+0065): X=165.5,Y=398.0 (should be at x-height 400?)
* f (U+0066): X=459.0,Y=-2.0 (should be at baseline 0?)
* f (U+0066): X=74.0,Y=-2.0 (should be at baseline 0?)
* g (U+0067): X=178.5,Y=-2.0 (should be at baseline 0?)
* g (U+0067): X=165.0,Y=402.0 (should be at x-height 400?)
* h (U+0068): X=439.0,Y=-2.0 (should be at baseline 0?)
* 56 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-misalignments]
The following glyphs have on-curve points which have potentially incorrect y coordinates:
* dollar (U+0024): X=277.0,Y=2.0 (should be at baseline 0?)
* three (U+0033): X=135.5,Y=1.0 (should be at baseline 0?)
* eight (U+0038): X=340.0,Y=1.5 (should be at baseline 0?)
* colon (U+003A): X=284.0,Y=-0.5 (should be at baseline 0?)
* B (U+0042): X=37.0,Y=-2.0 (should be at baseline 0?)
* e (U+0065): X=397.0,Y=401.0 (should be at x-height 400?)
* e (U+0065): X=197.5,Y=398.5 (should be at x-height 400?)
* f (U+0066): X=544.0,Y=779.5 (should be at ascender 780?)
* g (U+0067): X=135.0,Y=0.5 (should be at baseline 0?)
* g (U+0067): X=176.5,Y=399.5 (should be at x-height 400?)
* 42 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-misalignments]
This check looks for outline segments which seem particularly short (less than 0.6% of the overall path length).
This check is not run for variable fonts, as they may legitimately have short segments. As this check is liable to generate significant numbers of false positives, it will pass if there are more than 100 reported short segments.
The following glyphs have segments which seem very short:
* seven (U+0037) contains a short segment L<<547.0,640.0>--<556.0,640.0>>
* seven (U+0037) contains a short segment L<<542.0,614.0>--<540.0,600.0>>
* seven (U+0037) contains a short segment L<<540.0,600.0>--<535.0,600.0>>
* at (U+0040) contains a short segment B<<329.0,118.0>-<328.0,112.0>-<328.0,101.0>>
* at (U+0040) contains a short segment B<<331.0,81.5>-<334.0,75.0>-<338.0,75.0>>
* A (U+0041) contains a short segment L<<100.0,250.0>--<104.0,250.0>>
* E (U+0045) contains a short segment L<<127.0,700.0>--<139.0,700.0>>
* E (U+0045) contains a short segment L<<139.0,700.0>--<139.0,701.0>>
* E (U+0045) contains a short segment L<<131.0,-19.0>--<131.0,-20.0>>
* F (U+0046) contains a short segment L<<177.0,700.0>--<189.0,700.0>>
* 62 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-short-segments]
The following glyphs have segments which seem very short:
* A (U+0041) contains a short segment L<<107.0,234.0>--<107.0,240.0>>
* A (U+0041) contains a short segment L<<107.0,240.0>--<109.0,240.0>>
* E (U+0045) contains a short segment L<<54.0,690.0>--<66.0,690.0>>
* E (U+0045) contains a short segment L<<66.0,690.0>--<66.0,691.0>>
* E (U+0045) contains a short segment L<<154.0,-9.0>--<154.0,-10.0>>
* F (U+0046) contains a short segment L<<104.0,690.0>--<116.0,690.0>>
* F (U+0046) contains a short segment L<<116.0,690.0>--<116.0,691.0>>
* G (U+0047) contains a short segment L<<506.0,271.0>--<505.0,271.0>>
* L (U+004C) contains a short segment L<<86.0,-12.0>--<86.0,-10.0>>
* L (U+004C) contains a short segment L<<86.0,-10.0>--<84.0,-10.0>>
* 80 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-short-segments]
The following glyphs have segments which seem very short:
* five (U+0035) contains a short segment L<<179.0,610.0>--<178.0,610.0>>
* seven (U+0037) contains a short segment L<<531.0,630.0>--<535.0,630.0>>
* seven (U+0037) contains a short segment L<<528.0,617.0>--<527.0,610.0>>
* seven (U+0037) contains a short segment L<<527.0,610.0>--<525.0,610.0>>
* at (U+0040) contains a short segment B<<320.5,73.0>-<327.0,60.0>-<333.0,60.0>>
* A (U+0041) contains a short segment L<<113.0,235.0>--<114.0,240.0>>
* A (U+0041) contains a short segment L<<114.0,240.0>--<115.0,240.0>>
* E (U+0045) contains a short segment L<<141.0,690.0>--<153.0,690.0>>
* E (U+0045) contains a short segment L<<153.0,690.0>--<153.0,691.0>>
* E (U+0045) contains a short segment L<<118.0,-9.0>--<118.0,-10.0>>
* 57 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-short-segments]
The following glyphs have segments which seem very short:
* dollar (U+0024) contains a short segment L<<304.0,666.0>--<307.0,666.0>>
* E (U+0045) contains a short segment L<<69.0,680.0>--<81.0,680.0>>
* E (U+0045) contains a short segment L<<81.0,680.0>--<81.0,681.0>>
* E (U+0045) contains a short segment L<<139.0,1.0>--<139.0,0.0>>
* F (U+0046) contains a short segment L<<119.0,680.0>--<131.0,680.0>>
* F (U+0046) contains a short segment L<<131.0,680.0>--<131.0,681.0>>
* L (U+004C) contains a short segment L<<101.0,-2.0>--<101.0,0.0>>
* L (U+004C) contains a short segment L<<101.0,0.0>--<99.0,0.0>>
* Egrave (U+00C8) contains a short segment L<<69.0,680.0>--<81.0,680.0>>
* Egrave (U+00C8) contains a short segment L<<81.0,680.0>--<81.0,681.0>>
* 13 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-short-segments]
The following glyphs have segments which seem very short:
* five (U+0035) contains a short segment L<<147.0,337.0>--<145.0,336.0>>
* five (U+0035) contains a short segment L<<154.0,396.0>--<156.0,396.0>>
* seven (U+0037) contains a short segment L<<513.0,620.0>--<514.0,620.0>>
* at (U+0040) contains a short segment B<<317.0,52.5>-<324.0,45.0>-<328.0,45.0>>
* E (U+0045) contains a short segment L<<154.0,680.0>--<166.0,680.0>>
* E (U+0045) contains a short segment L<<166.0,680.0>--<166.0,681.0>>
* E (U+0045) contains a short segment L<<104.0,1.0>--<104.0,0.0>>
* F (U+0046) contains a short segment L<<204.0,680.0>--<216.0,680.0>>
* F (U+0046) contains a short segment L<<216.0,680.0>--<216.0,681.0>>
* L (U+004C) contains a short segment L<<65.0,-2.0>--<65.0,0.0>>
* 28 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-short-segments]
The following glyphs have segments which seem very short:
* seven (U+0037) contains a short segment L<<447.0,615.0>--<446.0,615.0>>
* A (U+0041) contains a short segment L<<115.0,234.0>--<115.0,235.0>>
* E (U+0045) contains a short segment L<<62.0,685.0>--<74.0,685.0>>
* E (U+0045) contains a short segment L<<74.0,685.0>--<74.0,686.0>>
* E (U+0045) contains a short segment L<<147.0,-4.0>--<147.0,-5.0>>
* F (U+0046) contains a short segment L<<112.0,685.0>--<124.0,685.0>>
* F (U+0046) contains a short segment L<<124.0,685.0>--<124.0,686.0>>
* G (U+0047) contains a short segment L<<499.0,276.0>--<498.0,276.0>>
* G (U+0047) contains a short segment L<<499.0,316.0>--<499.0,305.0>>
* L (U+004C) contains a short segment L<<94.0,-7.0>--<94.0,-5.0>>
* 76 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-short-segments]
The following glyphs have segments which seem very short:
* five (U+0035) contains a short segment L<<147.0,389.0>--<148.0,400.0>>
* five (U+0035) contains a short segment L<<148.0,400.0>--<149.0,400.0>>
* seven (U+0037) contains a short segment L<<522.0,625.0>--<525.0,625.0>>
* seven (U+0037) contains a short segment L<<525.0,625.0>--<520.0,616.0>>
* seven (U+0037) contains a short segment L<<520.0,616.0>--<520.0,615.0>>
* A (U+0041) contains a short segment L<<120.0,233.0>--<120.0,235.0>>
* A (U+0041) contains a short segment L<<120.0,235.0>--<121.0,235.0>>
* E (U+0045) contains a short segment L<<147.0,685.0>--<159.0,685.0>>
* E (U+0045) contains a short segment L<<159.0,685.0>--<159.0,686.0>>
* E (U+0045) contains a short segment L<<111.0,-4.0>--<111.0,-5.0>>
* 65 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-short-segments]
This check looks for consecutive line segments which have the same angle. This normally happens if an outline point has been added by accident.
This check is not run for variable fonts, as they may legitimately have colinear vectors.
The following glyphs have colinear vectors:
* P (U+0050): L<<100.0,318.0>--<160.0,658.0>> -> L<<160.0,658.0>--<164.0,696.0>>
* P (U+0050): L<<40.0,-20.0>--<98.0,311.0>> -> L<<98.0,311.0>--<99.0,318.0>>
* R (U+0052): L<<10.0,-20.0>--<68.0,311.0>> -> L<<68.0,311.0>--<69.0,318.0>>
* R (U+0052): L<<70.0,318.0>--<130.0,658.0>> -> L<<130.0,658.0>--<134.0,696.0>>
* bracketleft (U+005B): L<<69.0,-80.0>--<198.0,652.0>> -> L<<198.0,652.0>--<216.0,752.0>>
* dotlessi (U+0131): L<<338.0,420.0>--<322.0,320.0>> -> L<<322.0,320.0>--<306.0,224.0>>
* five (U+0035): L<<109.0,303.0>--<161.0,600.0>> -> L<<161.0,600.0>--<179.0,700.0>>
* i (U+0069): L<<338.0,420.0>--<322.0,320.0>> -> L<<322.0,320.0>--<306.0,224.0>>
* iacute (U+00ED): L<<338.0,420.0>--<322.0,320.0>> -> L<<322.0,320.0>--<306.0,224.0>>
* icircumflex (U+00EE): L<<338.0,420.0>--<322.0,320.0>> -> L<<322.0,320.0>--<306.0,224.0>>
* 4 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-colinear-vectors]
The following glyphs have colinear vectors:
* G (U+0047): L<<506.0,321.0>--<506.0,299.0>> -> L<<506.0,299.0>--<506.0,271.0>>
* G (U+0047): L<<506.0,351.0>--<506.0,321.0>> -> L<<506.0,321.0>--<506.0,299.0>>
* a (U+0061): L<<367.0,99.0>--<366.0,138.0>> -> L<<366.0,138.0>--<365.0,170.0>>
* aacute (U+00E1): L<<367.0,99.0>--<366.0,138.0>> -> L<<366.0,138.0>--<365.0,170.0>>
* acircumflex (U+00E2): L<<367.0,99.0>--<366.0,138.0>> -> L<<366.0,138.0>--<365.0,170.0>>
* adieresis (U+00E4): L<<367.0,99.0>--<366.0,138.0>> -> L<<366.0,138.0>--<365.0,170.0>>
* agrave (U+00E0): L<<367.0,99.0>--<366.0,138.0>> -> L<<366.0,138.0>--<365.0,170.0>>
* atilde (U+00E3): L<<367.0,99.0>--<366.0,138.0>> -> L<<366.0,138.0>--<365.0,170.0>>
* e (U+0065): L<<486.0,244.0>--<486.0,225.0>> -> L<<486.0,225.0>--<486.0,167.0>>
* e (U+0065): L<<486.0,245.0>--<486.0,244.0>> -> L<<486.0,244.0>--<486.0,225.0>>
* 10 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-colinear-vectors]
The following glyphs have colinear vectors:
* P (U+0050): L<<113.0,307.0>--<174.0,649.0>> -> L<<174.0,649.0>--<178.0,688.0>>
* R (U+0052): L<<83.0,307.0>--<144.0,649.0>> -> L<<144.0,649.0>--<148.0,688.0>>
* dotlessi (U+0131): L<<322.0,410.0>--<309.0,330.0>> -> L<<309.0,330.0>--<291.0,226.0>>
* i (U+0069): L<<322.0,410.0>--<309.0,330.0>> -> L<<309.0,330.0>--<291.0,226.0>>
* iacute (U+00ED): L<<322.0,410.0>--<309.0,330.0>> -> L<<309.0,330.0>--<291.0,226.0>>
* icircumflex (U+00EE): L<<322.0,410.0>--<309.0,330.0>> -> L<<309.0,330.0>--<291.0,226.0>>
* idieresis (U+00EF): L<<322.0,410.0>--<309.0,330.0>> -> L<<309.0,330.0>--<291.0,226.0>>
* itilde (U+0129): L<<322.0,410.0>--<309.0,330.0>> -> L<<309.0,330.0>--<291.0,226.0>> [code: found-colinear-vectors]
No colinear vectors found.
The following glyphs have colinear vectors:
* P (U+0050): L<<74.0,0.0>--<188.0,648.0>> -> L<<188.0,648.0>--<192.0,680.0>>
* R (U+0052): L<<44.0,0.0>--<158.0,648.0>> -> L<<158.0,648.0>--<162.0,680.0>>
* bracketleft (U+005B): L<<103.0,-60.0>--<232.0,672.0>> -> L<<232.0,672.0>--<243.0,732.0>>
* dotlessi (U+0131): L<<305.0,400.0>--<295.0,340.0>> -> L<<295.0,340.0>--<276.0,227.0>>
* five (U+0035): L<<145.0,336.0>--<151.0,369.0>> -> L<<151.0,369.0>--<154.0,396.0>>
* five (U+0035): L<<156.0,396.0>--<195.0,620.0>> -> L<<195.0,620.0>--<206.0,680.0>>
* i (U+0069): L<<305.0,400.0>--<295.0,340.0>> -> L<<295.0,340.0>--<276.0,227.0>>
* iacute (U+00ED): L<<305.0,400.0>--<295.0,340.0>> -> L<<295.0,340.0>--<276.0,227.0>>
* icircumflex (U+00EE): L<<305.0,400.0>--<295.0,340.0>> -> L<<295.0,340.0>--<276.0,227.0>>
* idieresis (U+00EF): L<<305.0,400.0>--<295.0,340.0>> -> L<<295.0,340.0>--<276.0,227.0>>
* itilde (U+0129): L<<305.0,400.0>--<295.0,340.0>> -> L<<295.0,340.0>--<276.0,227.0>> [code: found-colinear-vectors]
The following glyphs have colinear vectors:
* G (U+0047): L<<499.0,316.0>--<499.0,305.0>> -> L<<499.0,305.0>--<499.0,276.0>>
* G (U+0047): L<<499.0,346.0>--<499.0,316.0>> -> L<<499.0,316.0>--<499.0,305.0>>
* a (U+0061): L<<375.0,95.0>--<374.0,138.0>> -> L<<374.0,138.0>--<373.0,173.0>>
* aacute (U+00E1): L<<375.0,95.0>--<374.0,138.0>> -> L<<374.0,138.0>--<373.0,173.0>>
* acircumflex (U+00E2): L<<375.0,95.0>--<374.0,138.0>> -> L<<374.0,138.0>--<373.0,173.0>>
* adieresis (U+00E4): L<<375.0,95.0>--<374.0,138.0>> -> L<<374.0,138.0>--<373.0,173.0>>
* agrave (U+00E0): L<<375.0,95.0>--<374.0,138.0>> -> L<<374.0,138.0>--<373.0,173.0>>
* atilde (U+00E3): L<<375.0,95.0>--<374.0,138.0>> -> L<<374.0,138.0>--<373.0,173.0>> [code: found-colinear-vectors]
The following glyphs have colinear vectors:
* P (U+0050): L<<66.0,-5.0>--<182.0,656.0>> -> L<<182.0,656.0>--<185.0,684.0>>
* R (U+0052): L<<36.0,-5.0>--<152.0,656.0>> -> L<<152.0,656.0>--<155.0,684.0>>
* bracketleft (U+005B): L<<95.0,-65.0>--<107.0,5.0>> -> L<<107.0,5.0>--<236.0,737.0>>
* dotlessi (U+0131): L<<313.0,405.0>--<302.0,335.0>> -> L<<302.0,335.0>--<284.0,226.0>>
* five (U+0035): L<<136.0,328.0>--<147.0,389.0>> -> L<<147.0,389.0>--<148.0,400.0>>
* i (U+0069): L<<313.0,405.0>--<302.0,335.0>> -> L<<302.0,335.0>--<284.0,226.0>>
* iacute (U+00ED): L<<313.0,405.0>--<302.0,335.0>> -> L<<302.0,335.0>--<284.0,226.0>>
* icircumflex (U+00EE): L<<313.0,405.0>--<302.0,335.0>> -> L<<302.0,335.0>--<284.0,226.0>>
* idieresis (U+00EF): L<<313.0,405.0>--<302.0,335.0>> -> L<<302.0,335.0>--<284.0,226.0>>
* itilde (U+0129): L<<313.0,405.0>--<302.0,335.0>> -> L<<302.0,335.0>--<284.0,226.0>>
* 4 more.
Use -F or --full-lists to disable shortening of long lists. [code: found-colinear-vectors]
This check heuristically detects outline segments which form a particularly small angle, indicative of an outline error. This may cause false positives in cases such as extreme ink traps, so should be regarded as advisory and backed up by manual inspection.
No jaggy segments found.
No jaggy segments found.
No jaggy segments found.
No jaggy segments found.
The following glyphs have jaggy segments:
* D (U+0044): L<<115.0,0.0>--<116.0,19.0>>/L<<116.0,19.0>--<113.0,0.0>> = 5.95983911071301
* b (U+0062): L<<158.0,294.0>--<158.0,295.0>>/L<<158.0,295.0>--<125.0,108.0>> = 10.00797980144135
* n (U+006E): L<<167.0,285.0>--<171.0,314.0>>/L<<171.0,314.0>--<116.0,0.0>> = 2.0817843914724143
* q (U+0071): L<<372.0,106.0>--<372.0,105.0>>/L<<372.0,105.0>--<405.0,292.0>> = 10.00797980144135 [code: found-jaggy-segments]
No jaggy segments found.
No jaggy segments found.
This check detects line segments which are nearly, but not quite, exactly horizontal or vertical. Sometimes such lines are created by design, but often they are indicative of a design error.
This check is disabled for italic styles, which often contain nearly-upright lines.
Unfulfilled Conditions: is_not_italic
The following glyphs have semi-vertical/semi-horizontal lines:
* N (U+004E): L<<150.0,484.0>--<154.0,-10.0>>
* four (U+0034): L<<162.0,238.0>--<293.0,237.0>>
* four (U+0034): L<<293.0,157.0>--<58.0,158.0>>
* m (U+006D): L<<209.0,-5.0>--<210.0,232.0>>
* m (U+006D): L<<389.0,-5.0>--<387.0,229.0>>
* m (U+006D): L<<487.0,253.0>--<489.0,-5.0>>
* t (U+0074): L<<270.0,660.0>--<272.0,400.0>>
* two (U+0032): L<<166.0,80.0>--<475.0,79.0>> [code: found-semi-vertical]
Unfulfilled Conditions: is_not_italic
The following glyphs have semi-vertical/semi-horizontal lines:
* four (U+0034): L<<141.0,228.0>--<308.0,227.0>>
* four (U+0034): L<<308.0,167.0>--<73.0,168.0>>
* m (U+006D): L<<224.0,0.0>--<225.0,232.0>>
* m (U+006D): L<<472.0,253.0>--<474.0,0.0>>
* t (U+0074): L<<255.0,650.0>--<257.0,390.0>>
* two (U+0032): L<<150.0,70.0>--<460.0,69.0>> [code: found-semi-vertical]
Unfulfilled Conditions: is_not_italic
The following glyphs have semi-vertical/semi-horizontal lines:
* N (U+004E): L<<386.0,163.0>--<382.0,685.0>>
* four (U+0034): L<<151.0,233.0>--<301.0,232.0>>
* four (U+0034): L<<301.0,162.0>--<66.0,163.0>>
* m (U+006D): L<<217.0,-2.0>--<218.0,232.0>>
* m (U+006D): L<<397.0,-2.0>--<395.0,229.0>>
* m (U+006D): L<<480.0,253.0>--<482.0,-2.0>>
* r (U+0072): L<<247.0,285.0>--<248.0,68.0>>
* t (U+0074): L<<263.0,655.0>--<265.0,395.0>>
* two (U+0032): L<<158.0,75.0>--<468.0,74.0>> [code: found-semi-vertical]
Unfulfilled Conditions: is_not_italic
Fonts with complex layout rules can benefit from regression tests to ensure that the rules are behaving as designed. This checks runs a shaping test suite and compares expected shaping against actual shaping, reporting any differences.
Shaping test suites should be written by the font engineer and referenced in the fontbakery configuration file. For more information about write shaping test files and how to configure fontbakery to read the shaping test suites, see https://simoncozens.github.io/tdd-for-otl/
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Fonts with complex layout rules can benefit from regression tests to ensure that the rules are behaving as designed. This checks runs a shaping test suite and reports if any glyphs are generated in the shaping which should not be produced. (For example, .notdef glyphs, visible viramas, etc.)
Shaping test suites should be written by the font engineer and referenced in the Font Bakery configuration file. For more information about write shaping test files and how to configure fontbakery to read the shaping test suites, see https://simoncozens.github.io/tdd-for-otl/
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Fonts with complex layout rules can benefit from regression tests to ensure that the rules are behaving as designed. This checks runs a shaping test suite and reports instances where the glyphs collide in unexpected ways.
Shaping test suites should be written by the font engineer and referenced in the fontbakery configuration file. For more information about write shaping test files and how to configure fontbakery to read the shaping test suites, see https://simoncozens.github.io/tdd-for-otl/
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file
Shaping test directory not defined in configuration file