googlefonts / windsong

WindSong fonts
SIL Open Font License 1.1
1 stars 3 forks source link

FB initial assessment reports #3

Closed vv-monsalve closed 3 years ago

vv-monsalve commented 3 years ago

Regular

Fontbakery report

Fontbakery version: 0.7.34

[22] WindSong-Pro.ttf
🔥 FAIL: Checking file is named canonically. * [com.google.fonts/check/canonical_filename](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/canonical_filename)
--- Rationale ---

A font's filename must be composed in the following manner:
<familyname>-<stylename>.ttf

- Nunito-Regular.ttf,
- Oswald-BoldItalic.ttf

Variable fonts must list the axis tags in alphabetical order in square brackets
and separated by commas:

- Roboto[wdth,wght].ttf
- Familyname-Italic[wght].ttf

* 🔥 **FAIL** Style name used in "WindSong-Pro.ttf" is not canonical. You should rebuild the font using any of the following style names: "Thin", "ExtraLight", "Light", "Regular", "Medium", "SemiBold", "Bold", "ExtraBold", "Black", "Thin Italic", "ExtraLight Italic", "Light Italic", "Italic", "Medium Italic", "SemiBold Italic", "Bold Italic", "ExtraBold Italic", "Black Italic". [code: bad-static-filename]
🔥 FAIL: Checking OS/2 fsType does not impose restrictions. * [com.google.fonts/check/fstype](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/fstype)
--- Rationale ---

The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the Google
Fonts collection must have it set to zero (also known as "Installable
Embedding"). This setting indicates that the fonts can be embedded in documents
and permanently installed by applications on remote systems.

More detailed info is available at:
https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype

* 🔥 **FAIL** In this font fsType is set to 4 meaning that: The font may be embedded, and temporarily loaded on the remote system, but documents that use it must not be editable. No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]
🔥 FAIL: Check `Google Fonts Latin Core` glyph coverage. * [com.google.fonts/check/glyph_coverage](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/glyph_coverage)
--- Rationale ---

Google Fonts expects that fonts in its collection support at least the minimal
set of characters defined in the `GF-latin-core` glyph-set.

* 🔥 **FAIL** Missing required codepoints: 0x00A0 (NO-BREAK SPACE), 0x2074 (SUPERSCRIPT FOUR) and 0x2215 (DIVISION SLASH) [code: missing-codepoints]
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering? * [com.google.fonts/check/gasp](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/gasp)
--- Rationale ---

Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem
had no grid fitting but did have antialiasing. From 9-16 ppem, just grid
fitting. And fonts above 17ppem had both antialiasing and grid fitting toggled
on. The use of accelerated graphics cards and higher resolution screens make
this approach obsolete. Microsoft's DirectWrite pushed this even further with
much improved rendering built into the OS and apps.

In this scenario it makes sense to simply toggle all 4 flags ON for all font
sizes.

* 🔥 **FAIL** Font is missing the 'gasp' table. Try exporting the font with autohinting enabled. If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting' GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: Copyright notices match canonical pattern in fonts * [com.google.fonts/check/font_copyright](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/font_copyright) * 🔥 **FAIL** Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright \(c\) 2014 by Robert E. Leuschke. All rights reserved." [code: bad-notice-format] * 🔥 **FAIL** Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright \(c\) 2014 by Robert E. Leuschke. All rights reserved." [code: bad-notice-format]
🔥 FAIL: Check name table: FONT_SUBFAMILY_NAME entries. * [com.google.fonts/check/name/subfamilyname](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/subfamilyname) * 🔥 **FAIL** SUBFAMILY_NAME for Mac "Regular" must be "" [code: bad-familyname]
🔥 FAIL: Font enables smart dropout control in "prep" table instructions? * [com.google.fonts/check/smart_dropout](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/smart_dropout)
--- Rationale ---

This setup is meant to ensure consistent rendering quality for fonts across all
devices (with different rendering/hinting capabilities).

Below is the snippet of instructions we expect to see in the fonts:
B8 01 FF    PUSHW 0x01FF
85          SCANCTRL (unconditinally turn on
                      dropout control mode)
B0 04       PUSHB 0x04
8D          SCANTYPE (enable smart dropout control)

"Smart dropout control" means activating rules 1, 2 and 5:
Rule 1: If a pixel's center falls within the glyph outline,
        that pixel is turned on.
Rule 2: If a contour falls exactly on a pixel's center,
        that pixel is turned on.
Rule 5: If a scan line between two adjacent pixel centers
        (either vertical or horizontal) is intersected
        by both an on-Transition contour and an off-Transition
        contour and neither of the pixels was already turned on
        by rules 1 and 2, turn on the pixel which is closer to
        the midpoint between the on-Transition contour and
        off-Transition contour. This is "Smart" dropout control.

For more detailed info (such as other rules not enabled in this snippet),
please refer to the TrueType Instruction Set documentation.

* 🔥 **FAIL** The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the `gftools fix-nonhinting` script. [code: lacks-smart-dropout]
🔥 FAIL: Name table entries should not contain line-breaks. * [com.google.fonts/check/name/line_breaks](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/line_breaks)
--- Rationale ---

There are some entries on the name table that may include more than one line of
text. The Google Fonts team, though, prefers to keep the name table entries
short and simple without line breaks.

For instance, some designers like to include the full text of a font license in
the "copyright notice" entry, but for the GFonts collection this entry should
only mention year, author and other basic info in a manner enforced by
com.google.fonts/check/font_copyright

* 🔥 **FAIL** Name entry LICENSE_DESCRIPTION on platform MACINTOSH contains a line-break. [code: line-break] * 🔥 **FAIL** Name entry LICENSE_DESCRIPTION on platform WINDOWS contains a line-break. [code: line-break]
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent. * [com.google.fonts/check/family/win_ascent_and_descent](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/family/win_ascent_and_descent)
--- Rationale ---

A font's winAscent and winDescent values should be greater than 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).

* 🔥 **FAIL** OS/2.usWinAscent value should be equal or greater than 1297, but got 850 instead [code: ascent] * 🔥 **FAIL** OS/2.usWinDescent value should be equal or greater than 745, but got 515 instead. [code: descent]
🔥 FAIL: Checking OS/2 Metrics match hhea Metrics. * [com.google.fonts/check/os2_metrics_match_hhea](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/os2_metrics_match_hhea)
--- Rationale ---

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.

* 🔥 **FAIL** OS/2 sTypoDescender (-515) and hhea descent (-557) must be equal. [code: descender]
🔥 FAIL: Font contains glyphs for whitespace characters? * [com.google.fonts/check/whitespace_glyphs](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/whitespace_glyphs) * 🔥 **FAIL** Whitespace glyph missing for codepoint 0x00A0. [code: missing-whitespace-glyph-0x00A0]
🔥 FAIL: Description strings in the name table must not contain copyright info. * [com.google.fonts/check/name/no_copyright_on_description](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.google.fonts/check/name/no_copyright_on_description) * 🔥 **FAIL** Some namerecords with ID=10 (NameID.DESCRIPTION) containing copyright info should be removed (perhaps these were added by a longstanding FontLab Studio 5.x bug that copied copyright notices to them.) [code: copyright-on-description]
🔥 FAIL: Does full font name begin with the font family name? * [com.google.fonts/check/name/match_familyname_fullfont](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.google.fonts/check/name/match_familyname_fullfont) * 🔥 **FAIL** On the 'name' table, the full font name (NameID 4 - FULL_FONT_NAME: 'WindSongPro') does not begin with font family name (NameID 1 - FONT_FAMILY_NAME: 'WindSong-Pro') [code: does-not]
🔥 FAIL: Check glyphs do not have components which are themselves components. * [com.google.fonts/check/glyf_nested_components](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/glyf.html#com.google.fonts/check/glyf_nested_components)
--- Rationale ---

There have been bugs rendering variable fonts with nested components.
Additionally, some static fonts with nested components have been reported to
have rendering and printing issues.

For more info, see:
* https://github.com/googlefonts/fontbakery/issues/2961
* https://github.com/arrowtype/recursive/issues/412

* 🔥 **FAIL** The following glyphs have components which themselves are component glyphs: * uni1EAE * uni1EB6 * uni1EB6 * uni1EB0 * uni1EB2 * uni1EB4 * uni1EAC * uni1EA8 * uni1EA0 * uni1EC6 and 31 more. [code: found-nested-components]
WARN: Checking OS/2 achVendID. * [com.google.fonts/check/vendor_id](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/vendor_id)
--- Rationale ---

Microsoft keeps a list of font vendors and their respective contact info. This
list is updated regularly and is indexed by a 4-char "Vendor ID" which is
stored in the achVendID field of the OS/2 table.

Registering your ID is not mandatory, but it is a good practice since some
applications may display the type designer / type foundry contact info on some
dialog and also because that info will be visible on Microsoft's website:

https://docs.microsoft.com/en-us/typography/vendors/

This check verifies whether or not a given font's vendor ID is registered in
that list or if it has some of the default values used by the most common font
editors.

Each new FontBakery release includes a cached copy of that list of vendor IDs.
If you registered recently, you're safe to ignore warnings emitted by this
check, since your ID will soon be included in one of our upcoming releases.

* ⚠ **WARN** OS/2 VendorID is 'UKWN', a font editor default. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx [code: bad]
WARN: Check if each glyph has the recommended amount of contours. * [com.google.fonts/check/contour_count](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/contour_count)
--- Rationale ---

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.

* ⚠ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct. The following glyphs do not have the recommended number of contours: Glyph name: percent Contours detected: 3 Expected: 5 Glyph name: zero Contours detected: 1 Expected: 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: question Contours detected: 3 Expected: 2 Glyph name: at Contours detected: 1 Expected: 2 Glyph name: A Contours detected: 3 Expected: 2 Glyph name: C Contours detected: 2 Expected: 1 Glyph name: E Contours detected: 2 Expected: 1 Glyph name: G Contours detected: 3 Expected: 1 Glyph name: H Contours detected: 4 Expected: 1 Glyph name: I Contours detected: 2 Expected: 1 Glyph name: J Contours detected: 2 Expected: 1 Glyph name: L Contours detected: 3 Expected: 1 Glyph name: O Contours detected: 1 Expected: 2 Glyph name: S Contours detected: 2 Expected: 1 Glyph name: Y Contours detected: 2 Expected: 1 Glyph name: a Contours detected: 1 Expected: 2 Glyph name: d Contours detected: 1 Expected: 2 Glyph name: f Contours detected: 2 Expected: 1 Glyph name: h Contours detected: 2 Expected: 1 Glyph name: j Contours detected: 3 Expected: 2 Glyph name: l Contours detected: 2 Expected: 1 Glyph name: s Contours detected: 3 Expected: 1 Glyph name: y Contours detected: 2 Expected: 1 Glyph name: ordfeminine Contours detected: 1 Expected: 2 or 3 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: questiondown Contours detected: 3 Expected: 2 Glyph name: Agrave Contours detected: 4 Expected: 3 Glyph name: Aacute Contours detected: 4 Expected: 3 Glyph name: Acircumflex Contours detected: 4 Expected: 3 Glyph name: Atilde Contours detected: 4 Expected: 3 Glyph name: Adieresis Contours detected: 5 Expected: 4 Glyph name: Aring Contours detected: 5 Expected: 3 or 4 Glyph name: AE Contours detected: 1 Expected: 2 Glyph name: Ccedilla Contours detected: 3 Expected: 1 or 2 Glyph name: Egrave Contours detected: 3 Expected: 2 Glyph name: Eacute Contours detected: 3 Expected: 2 Glyph name: Ecircumflex Contours detected: 3 Expected: 2 Glyph name: Edieresis Contours detected: 4 Expected: 3 Glyph name: Igrave Contours detected: 3 Expected: 2 Glyph name: Iacute Contours detected: 3 Expected: 2 Glyph name: Icircumflex Contours detected: 3 Expected: 2 Glyph name: Idieresis Contours detected: 4 Expected: 3 Glyph name: Ograve Contours detected: 2 Expected: 3 Glyph name: Oacute Contours detected: 2 Expected: 3 Glyph name: Ocircumflex Contours detected: 2 Expected: 3 Glyph name: Otilde Contours detected: 2 Expected: 3 Glyph name: Odieresis Contours detected: 3 Expected: 4 Glyph name: Yacute Contours detected: 3 Expected: 2 Glyph name: germandbls Contours detected: 2 Expected: 1 Glyph name: agrave Contours detected: 2 Expected: 3 Glyph name: aacute Contours detected: 2 Expected: 3 Glyph name: acircumflex Contours detected: 2 Expected: 3 Glyph name: atilde Contours detected: 2 Expected: 3 Glyph name: adieresis Contours detected: 3 Expected: 4 Glyph name: aring Contours detected: 3 Expected: 4 Glyph name: ae Contours detected: 2 Expected: 3 Glyph name: oslash Contours detected: 4 Expected: 3 Glyph name: yacute Contours detected: 3 Expected: 2 Glyph name: ydieresis Contours detected: 4 Expected: 3 Glyph name: Amacron Contours detected: 4 Expected: 3 Glyph name: amacron Contours detected: 2 Expected: 3 Glyph name: Abreve Contours detected: 4 Expected: 3 Glyph name: abreve Contours detected: 2 Expected: 3 Glyph name: aogonek Contours detected: 1 Expected: 2 Glyph name: Cacute Contours detected: 3 Expected: 2 Glyph name: Ccircumflex Contours detected: 3 Expected: 2 Glyph name: Cdotaccent Contours detected: 4 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: Ccaron Contours detected: 3 Expected: 2 Glyph name: dcaron Contours detected: 2 Expected: 3 Glyph name: dcroat Contours detected: 1 Expected: 2 Glyph name: Emacron Contours detected: 3 Expected: 2 Glyph name: Edotaccent Contours detected: 4 Expected: 2 Glyph name: edotaccent Contours detected: 4 Expected: 3 Glyph name: Eogonek Contours detected: 3 Expected: 1 or 2 Glyph name: Ecaron Contours detected: 3 Expected: 2 Glyph name: Gcircumflex Contours detected: 4 Expected: 2 Glyph name: Gbreve Contours detected: 4 Expected: 2 Glyph name: Gdotaccent Contours detected: 5 Expected: 2 Glyph name: uni0122 Contours detected: 4 Expected: 2 Glyph name: Hcircumflex Contours detected: 5 Expected: 2 Glyph name: hcircumflex Contours detected: 3 Expected: 2 Glyph name: Hbar Contours detected: 3 Expected: 2 Glyph name: hbar Contours detected: 3 Expected: 1 Glyph name: Itilde Contours detected: 3 Expected: 2 Glyph name: Imacron Contours detected: 3 Expected: 2 Glyph name: Idotaccent Contours detected: 4 Expected: 2 Glyph name: Jcircumflex Contours detected: 3 Expected: 2 Glyph name: jcircumflex Contours detected: 3 Expected: 2 Glyph name: Lacute Contours detected: 4 Expected: 2 Glyph name: lacute Contours detected: 3 Expected: 2 Glyph name: uni013B Contours detected: 4 Expected: 2 Glyph name: uni013C Contours detected: 3 Expected: 2 Glyph name: Lcaron Contours detected: 4 Expected: 2 Glyph name: lcaron Contours detected: 3 Expected: 2 Glyph name: Lslash Contours detected: 3 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: Eng Contours detected: 2 Expected: 1 Glyph name: eng Contours detected: 2 Expected: 1 Glyph name: Omacron Contours detected: 2 Expected: 3 Glyph name: Ohungarumlaut Contours detected: 3 Expected: 4 Glyph name: OE Contours detected: 1 Expected: 2 Glyph name: Sacute Contours detected: 3 Expected: 2 Glyph name: sacute Contours detected: 4 Expected: 2 Glyph name: Scircumflex Contours detected: 3 Expected: 2 Glyph name: scircumflex Contours detected: 4 Expected: 2 Glyph name: scedilla Contours detected: 3 Expected: 1 or 2 Glyph name: Scaron Contours detected: 3 Expected: 2 Glyph name: scaron Contours detected: 4 Expected: 2 Glyph name: Ycircumflex Contours detected: 3 Expected: 2 Glyph name: ycircumflex Contours detected: 3 Expected: 2 Glyph name: Ydieresis Contours detected: 4 Expected: 3 Glyph name: Zdotaccent Contours detected: 3 Expected: 2 Glyph name: zdotaccent Contours detected: 3 Expected: 2 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: Uhorn Contours detected: 2 Expected: 1 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni0218 Contours detected: 3 Expected: 2 Glyph name: uni0219 Contours detected: 4 Expected: 2 Glyph name: uni1E02 Contours detected: 5 Expected: 4 Glyph name: uni1E0B Contours detected: 2 Expected: 3 Glyph name: uni1E1E Contours detected: 3 Expected: 2 Glyph name: uni1E1F Contours detected: 4 Expected: 2 Glyph name: uni1E40 Contours detected: 3 Expected: 2 Glyph name: uni1E41 Contours detected: 3 Expected: 2 Glyph name: uni1E56 Contours detected: 4 Expected: 3 Glyph name: uni1E57 Contours detected: 4 Expected: 3 Glyph name: uni1E60 Contours detected: 4 Expected: 2 Glyph name: uni1E61 Contours detected: 5 Expected: 2 Glyph name: uni1E6A Contours detected: 3 Expected: 2 Glyph name: uni1E6B Contours detected: 3 Expected: 2 Glyph name: uni1E9E Contours detected: 5 Expected: 1 Glyph name: uni1EA0 Contours detected: 4 Expected: 3 Glyph name: uni1EA1 Contours detected: 2 Expected: 3 Glyph name: uni1EA2 Contours detected: 4 Expected: 3 Glyph name: uni1EA3 Contours detected: 2 Expected: 3 Glyph name: uni1EA4 Contours detected: 5 Expected: 4 Glyph name: uni1EA5 Contours detected: 3 Expected: 4 Glyph name: uni1EA6 Contours detected: 5 Expected: 4 Glyph name: uni1EA7 Contours detected: 3 Expected: 4 Glyph name: uni1EA8 Contours detected: 5 Expected: 4 Glyph name: uni1EA9 Contours detected: 3 Expected: 4 Glyph name: uni1EAA Contours detected: 5 Expected: 4 Glyph name: uni1EAB Contours detected: 3 Expected: 4 Glyph name: uni1EAC Contours detected: 5 Expected: 4 Glyph name: uni1EAD Contours detected: 3 Expected: 4 Glyph name: uni1EAE Contours detected: 5 Expected: 4 Glyph name: uni1EAF Contours detected: 3 Expected: 4 Glyph name: uni1EB0 Contours detected: 5 Expected: 4 Glyph name: uni1EB1 Contours detected: 3 Expected: 4 Glyph name: uni1EB2 Contours detected: 5 Expected: 4 Glyph name: uni1EB3 Contours detected: 3 Expected: 4 Glyph name: uni1EB4 Contours detected: 5 Expected: 4 Glyph name: uni1EB5 Contours detected: 3 Expected: 4 Glyph name: uni1EB6 Contours detected: 5 Expected: 4 Glyph name: uni1EB7 Contours detected: 3 Expected: 4 Glyph name: uni1EB8 Contours detected: 3 Expected: 2 Glyph name: uni1EBA Contours detected: 3 Expected: 2 Glyph name: uni1EBC Contours detected: 3 Expected: 2 Glyph name: uni1EBE Contours detected: 4 Expected: 3 Glyph name: uni1EC0 Contours detected: 4 Expected: 3 Glyph name: uni1EC2 Contours detected: 4 Expected: 3 Glyph name: uni1EC4 Contours detected: 4 Expected: 3 Glyph name: uni1EC6 Contours detected: 4 Expected: 3 Glyph name: uni1EC8 Contours detected: 3 Expected: 2 Glyph name: uni1ECA Contours detected: 3 Expected: 2 Glyph name: uni1ECC Contours detected: 2 Expected: 3 Glyph name: uni1ECE Contours detected: 2 Expected: 3 Glyph name: uni1ED0 Contours detected: 3 Expected: 4 Glyph name: uni1ED2 Contours detected: 3 Expected: 4 Glyph name: uni1ED4 Contours detected: 3 Expected: 4 Glyph name: uni1ED6 Contours detected: 3 Expected: 4 Glyph name: uni1ED8 Contours detected: 3 Expected: 4 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE0 Contours detected: 2 Expected: 3 or 4 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE8 Contours detected: 3 Expected: 2 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEA Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EEC Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEE Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF0 Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: Ygrave Contours detected: 3 Expected: 2 Glyph name: ygrave Contours detected: 3 Expected: 2 Glyph name: uni1EF4 Contours detected: 3 Expected: 2 Glyph name: uni1EF5 Contours detected: 3 Expected: 2 Glyph name: uni1EF6 Contours detected: 3 Expected: 2 Glyph name: uni1EF7 Contours detected: 3 Expected: 2 Glyph name: uni1EF8 Contours detected: 3 Expected: 2 Glyph name: uni1EF9 Contours detected: 3 Expected: 2 Glyph name: perthousand Contours detected: 4 Expected: 6 or 7 Glyph name: f_f Contours detected: 3 Expected: 1 or 2 Glyph name: fl Contours detected: 3 Expected: 1 or 2 Glyph name: A Contours detected: 3 Expected: 2 Glyph name: AE Contours detected: 1 Expected: 2 Glyph name: Aacute Contours detected: 4 Expected: 3 Glyph name: Abreve Contours detected: 4 Expected: 3 Glyph name: Acircumflex Contours detected: 4 Expected: 3 Glyph name: Adieresis Contours detected: 5 Expected: 4 Glyph name: Agrave Contours detected: 4 Expected: 3 Glyph name: Amacron Contours detected: 4 Expected: 3 Glyph name: Aring Contours detected: 5 Expected: 3 or 4 Glyph name: Atilde Contours detected: 4 Expected: 3 Glyph name: C Contours detected: 2 Expected: 1 Glyph name: Cacute Contours detected: 3 Expected: 2 Glyph name: Ccaron Contours detected: 3 Expected: 2 Glyph name: Ccedilla Contours detected: 3 Expected: 1 or 2 Glyph name: Ccircumflex Contours detected: 3 Expected: 2 Glyph name: Cdotaccent Contours detected: 4 Expected: 2 Glyph name: E Contours detected: 2 Expected: 1 Glyph name: Eacute Contours detected: 3 Expected: 2 Glyph name: Ecaron Contours detected: 3 Expected: 2 Glyph name: Ecircumflex Contours detected: 3 Expected: 2 Glyph name: Edieresis Contours detected: 4 Expected: 3 Glyph name: Edotaccent Contours detected: 4 Expected: 2 Glyph name: Egrave Contours detected: 3 Expected: 2 Glyph name: Emacron Contours detected: 3 Expected: 2 Glyph name: Eng Contours detected: 2 Expected: 1 Glyph name: Eogonek Contours detected: 3 Expected: 1 or 2 Glyph name: G Contours detected: 3 Expected: 1 Glyph name: Gbreve Contours detected: 4 Expected: 2 Glyph name: Gcircumflex Contours detected: 4 Expected: 2 Glyph name: Gdotaccent Contours detected: 5 Expected: 2 Glyph name: H Contours detected: 4 Expected: 1 Glyph name: Hbar Contours detected: 3 Expected: 2 Glyph name: Hcircumflex Contours detected: 5 Expected: 2 Glyph name: I Contours detected: 2 Expected: 1 Glyph name: Iacute Contours detected: 3 Expected: 2 Glyph name: Icircumflex Contours detected: 3 Expected: 2 Glyph name: Idieresis Contours detected: 4 Expected: 3 Glyph name: Idotaccent Contours detected: 4 Expected: 2 Glyph name: Igrave Contours detected: 3 Expected: 2 Glyph name: Imacron Contours detected: 3 Expected: 2 Glyph name: Itilde Contours detected: 3 Expected: 2 Glyph name: J Contours detected: 2 Expected: 1 Glyph name: Jcircumflex Contours detected: 3 Expected: 2 Glyph name: L Contours detected: 3 Expected: 1 Glyph name: Lacute Contours detected: 4 Expected: 2 Glyph name: Lcaron Contours detected: 4 Expected: 2 Glyph name: Lslash Contours detected: 3 Expected: 1 Glyph name: O Contours detected: 1 Expected: 2 Glyph name: OE Contours detected: 1 Expected: 2 Glyph name: Oacute Contours detected: 2 Expected: 3 Glyph name: Ocircumflex Contours detected: 2 Expected: 3 Glyph name: Odieresis Contours detected: 3 Expected: 4 Glyph name: Ograve Contours detected: 2 Expected: 3 Glyph name: Ohungarumlaut Contours detected: 3 Expected: 4 Glyph name: Omacron Contours detected: 2 Expected: 3 Glyph name: Otilde Contours detected: 2 Expected: 3 Glyph name: S Contours detected: 2 Expected: 1 Glyph name: Sacute Contours detected: 3 Expected: 2 Glyph name: Scaron Contours detected: 3 Expected: 2 Glyph name: Scircumflex Contours detected: 3 Expected: 2 Glyph name: Uhorn Contours detected: 2 Expected: 1 Glyph name: Y Contours detected: 2 Expected: 1 Glyph name: Yacute Contours detected: 3 Expected: 2 Glyph name: Ycircumflex Contours detected: 3 Expected: 2 Glyph name: Ydieresis Contours detected: 4 Expected: 3 Glyph name: Ygrave Contours detected: 3 Expected: 2 Glyph name: Zdotaccent Contours detected: 3 Expected: 2 Glyph name: a Contours detected: 1 Expected: 2 Glyph name: aacute Contours detected: 2 Expected: 3 Glyph name: abreve Contours detected: 2 Expected: 3 Glyph name: acircumflex Contours detected: 2 Expected: 3 Glyph name: adieresis Contours detected: 3 Expected: 4 Glyph name: ae Contours detected: 2 Expected: 3 Glyph name: agrave Contours detected: 2 Expected: 3 Glyph name: amacron Contours detected: 2 Expected: 3 Glyph name: aogonek Contours detected: 1 Expected: 2 Glyph name: aring Contours detected: 3 Expected: 4 Glyph name: at Contours detected: 1 Expected: 2 Glyph name: atilde Contours detected: 2 Expected: 3 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: d Contours detected: 1 Expected: 2 Glyph name: dcaron Contours detected: 2 Expected: 3 Glyph name: dcroat Contours detected: 1 Expected: 2 Glyph name: edotaccent Contours detected: 4 Expected: 3 Glyph name: eng Contours detected: 2 Expected: 1 Glyph name: f Contours detected: 2 Expected: 1 Glyph name: f_f Contours detected: 3 Expected: 1 or 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: fl Contours detected: 3 Expected: 2 Glyph name: germandbls Contours detected: 2 Expected: 1 Glyph name: h Contours detected: 2 Expected: 1 Glyph name: hbar Contours detected: 3 Expected: 1 Glyph name: hcircumflex Contours detected: 3 Expected: 2 Glyph name: j Contours detected: 3 Expected: 2 Glyph name: jcircumflex Contours detected: 3 Expected: 2 Glyph name: l Contours detected: 2 Expected: 1 Glyph name: lacute Contours detected: 3 Expected: 2 Glyph name: lcaron Contours detected: 3 Expected: 2 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: ordfeminine Contours detected: 1 Expected: 2 or 3 Glyph name: oslash Contours detected: 4 Expected: 3 Glyph name: percent Contours detected: 3 Expected: 5 Glyph name: perthousand Contours detected: 4 Expected: 6 or 7 Glyph name: question Contours detected: 3 Expected: 2 Glyph name: questiondown Contours detected: 3 Expected: 2 Glyph name: s Contours detected: 3 Expected: 1 Glyph name: sacute Contours detected: 4 Expected: 2 Glyph name: scaron Contours detected: 4 Expected: 2 Glyph name: scircumflex Contours detected: 4 Expected: 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni0122 Contours detected: 4 Expected: 2 Glyph name: uni013B Contours detected: 4 Expected: 2 Glyph name: uni013C Contours detected: 3 Expected: 2 Glyph name: uni0218 Contours detected: 3 Expected: 2 Glyph name: uni0219 Contours detected: 4 Expected: 2 Glyph name: uni1E02 Contours detected: 5 Expected: 4 Glyph name: uni1E0B Contours detected: 2 Expected: 3 Glyph name: uni1E1E Contours detected: 3 Expected: 2 Glyph name: uni1E40 Contours detected: 3 Expected: 2 Glyph name: uni1E41 Contours detected: 3 Expected: 2 Glyph name: uni1E56 Contours detected: 4 Expected: 3 Glyph name: uni1E57 Contours detected: 4 Expected: 3 Glyph name: uni1E60 Contours detected: 4 Expected: 2 Glyph name: uni1E61 Contours detected: 5 Expected: 2 Glyph name: uni1E6A Contours detected: 3 Expected: 2 Glyph name: uni1E6B Contours detected: 3 Expected: 2 Glyph name: uni1E9E Contours detected: 5 Expected: 1 Glyph name: uni1EA0 Contours detected: 4 Expected: 3 Glyph name: uni1EA1 Contours detected: 2 Expected: 3 Glyph name: uni1EA2 Contours detected: 4 Expected: 3 Glyph name: uni1EA3 Contours detected: 2 Expected: 3 Glyph name: uni1EA4 Contours detected: 5 Expected: 4 Glyph name: uni1EA5 Contours detected: 3 Expected: 4 Glyph name: uni1EA6 Contours detected: 5 Expected: 4 Glyph name: uni1EA7 Contours detected: 3 Expected: 4 Glyph name: uni1EA8 Contours detected: 5 Expected: 4 Glyph name: uni1EA9 Contours detected: 3 Expected: 4 Glyph name: uni1EAA Contours detected: 5 Expected: 4 Glyph name: uni1EAB Contours detected: 3 Expected: 4 Glyph name: uni1EAC Contours detected: 5 Expected: 4 Glyph name: uni1EAD Contours detected: 3 Expected: 4 Glyph name: uni1EAE Contours detected: 5 Expected: 4 Glyph name: uni1EAF Contours detected: 3 Expected: 4 Glyph name: uni1EB0 Contours detected: 5 Expected: 4 Glyph name: uni1EB1 Contours detected: 3 Expected: 4 Glyph name: uni1EB2 Contours detected: 5 Expected: 4 Glyph name: uni1EB3 Contours detected: 3 Expected: 4 Glyph name: uni1EB4 Contours detected: 5 Expected: 4 Glyph name: uni1EB5 Contours detected: 3 Expected: 4 Glyph name: uni1EB6 Contours detected: 5 Expected: 4 Glyph name: uni1EB7 Contours detected: 3 Expected: 4 Glyph name: uni1EB8 Contours detected: 3 Expected: 2 Glyph name: uni1EBA Contours detected: 3 Expected: 2 Glyph name: uni1EBC Contours detected: 3 Expected: 2 Glyph name: uni1EBE Contours detected: 4 Expected: 3 Glyph name: uni1EC0 Contours detected: 4 Expected: 3 Glyph name: uni1EC2 Contours detected: 4 Expected: 3 Glyph name: uni1EC4 Contours detected: 4 Expected: 3 Glyph name: uni1EC6 Contours detected: 4 Expected: 3 Glyph name: uni1EC8 Contours detected: 3 Expected: 2 Glyph name: uni1ECA Contours detected: 3 Expected: 2 Glyph name: uni1ECC Contours detected: 2 Expected: 3 Glyph name: uni1ECE Contours detected: 2 Expected: 3 Glyph name: uni1ED0 Contours detected: 3 Expected: 4 Glyph name: uni1ED2 Contours detected: 3 Expected: 4 Glyph name: uni1ED4 Contours detected: 3 Expected: 4 Glyph name: uni1ED6 Contours detected: 3 Expected: 4 Glyph name: uni1ED8 Contours detected: 3 Expected: 4 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE0 Contours detected: 2 Expected: 3 or 4 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE8 Contours detected: 3 Expected: 2 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEA Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EEC Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEE Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF0 Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: uni1EF4 Contours detected: 3 Expected: 2 Glyph name: uni1EF5 Contours detected: 3 Expected: 2 Glyph name: uni1EF6 Contours detected: 3 Expected: 2 Glyph name: uni1EF7 Contours detected: 3 Expected: 2 Glyph name: uni1EF8 Contours detected: 3 Expected: 2 Glyph name: uni1EF9 Contours detected: 3 Expected: 2 Glyph name: y Contours detected: 2 Expected: 1 Glyph name: yacute Contours detected: 3 Expected: 2 Glyph name: ycircumflex Contours detected: 3 Expected: 2 Glyph name: ydieresis Contours detected: 4 Expected: 3 Glyph name: ygrave Contours detected: 3 Expected: 2 Glyph name: zdotaccent Contours detected: 3 Expected: 2 Glyph name: zero Contours detected: 1 Expected: 2 or 3 [code: contour-count]
WARN: Are there caret positions declared for every ligature? * [com.google.fonts/check/ligature_carets](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/ligature_carets)
--- Rationale ---

All ligatures in a font must have corresponding caret (text cursor) positions
defined in the GDEF table, otherwhise, users may experience issues with caret
rendering.

If using GlyphsApp, ligature carets can be set directly on canvas by accessing
the `Glyph -> Set Anchors` menu option or by pressing the `Cmd+U` keyboard
shortcut.

If designing with UFOs, (as of Oct 2020) ligature carets are not yet compiled
by ufo2ft, and therefore will not build via FontMake. See
googlefonts/ufo2ft/issues/329

* ⚠ **WARN** This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]
WARN: Is there kerning info for non-ligated sequences? * [com.google.fonts/check/kerning_for_non_ligated_sequences](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/kerning_for_non_ligated_sequences)
--- Rationale ---

Fonts with ligatures should have kerning on the corresponding non-ligated
sequences for text where ligatures aren't used (eg
https://github.com/impallari/Raleway/issues/14).

* ⚠ **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - c + s - d + s - e + s - f + f - f + i - i + l - g + s - o + r - r + s - y + l - l + p - p + r [code: lacks-kern-info]
WARN: Font contains '.notdef' as its first glyph? * [com.google.fonts/check/mandatory_glyphs](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/mandatory_glyphs)
--- Rationale ---

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.

* ⚠ **WARN** Glyph '.notdef' should contain a drawing, but it is empty. [code: empty]
WARN: Checking Vertical Metric Linegaps. * [com.google.fonts/check/linegaps](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/hhea.html#com.google.fonts/check/linegaps) * ⚠ **WARN** OS/2 sTypoLineGap is not equal to 0. [code: OS/2]
WARN: Do outlines contain any jaggy segments? * [com.google.fonts/check/outline_jaggy_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/.html#com.google.fonts/check/outline_jaggy_segments)
--- Rationale ---

This test 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.

* ⚠ **WARN** The following glyphs have jaggy segments: * A.001: B<<1084.0,-59.0>-<1070.0,-59.0>-<1067.0,-47.0>>/B<<1067.0,-47.0>-<1067.0,-48.0>-<1065.0,-36.0>> = 14.036243467926457 * A.001: B<<1088.0,98.0>-<1031.0,95.0>-<1004.0,96.0>>/L<<1004.0,96.0>--<1004.0,96.0>> = 2.1210963966614473 * A.001: B<<1427.0,624.0>-<1381.0,578.0>-<1325.0,494.0>>/B<<1325.0,494.0>-<1373.0,539.0>-<1416.0,585.0>> = 13.157542740014783 * A: B<<909.0,98.0>-<852.0,95.0>-<825.0,96.0>>/L<<825.0,96.0>--<825.0,96.0>> = 2.1210963966614473 * Aacute: B<<909.0,98.0>-<852.0,95.0>-<825.0,96.0>>/L<<825.0,96.0>--<825.0,96.0>> = 2.1210963966614473 * Abreve: B<<909.0,98.0>-<852.0,95.0>-<825.0,96.0>>/L<<825.0,96.0>--<825.0,96.0>> = 2.1210963966614473 * Acircumflex: B<<909.0,98.0>-<852.0,95.0>-<825.0,96.0>>/L<<825.0,96.0>--<825.0,96.0>> = 2.1210963966614473 * Acircumflex: B<<934.0,614.0>-<878.0,582.0>-<859.0,580.0>>/L<<859.0,580.0>--<859.0,580.0>> = 6.009005957494474 * Adieresis: B<<909.0,98.0>-<852.0,95.0>-<825.0,96.0>>/L<<825.0,96.0>--<825.0,96.0>> = 2.1210963966614473 * Agrave: B<<909.0,98.0>-<852.0,95.0>-<825.0,96.0>>/L<<825.0,96.0>--<825.0,96.0>> = 2.1210963966614473 and 451 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines? * [com.google.fonts/check/outline_semi_vertical](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/.html#com.google.fonts/check/outline_semi_vertical)
--- Rationale ---

This test 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 test is disabled for italic styles, which often contain nearly-upright
lines.

* ⚠ **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * logicalnot: L<<8.0,173.0>--<364.0,174.0>> * numbersign: L<<380.0,175.0>--<540.0,176.0>> * numbersign: L<<457.0,322.0>--<611.0,323.0>> * stanza.2: L<<1604.0,274.0>--<1982.0,273.0>> * stanza_notes.2: L<<2175.0,339.0>--<2174.0,207.0>> * underscore: L<<780.0,-117.0>--<13.0,-121.0>> * uni03A9: L<<371.0,32.0>--<494.0,33.0>> and uni2126: L<<371.0,32.0>--<494.0,33.0>> [code: found-semi-vertical]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 14 8 106 7 60 0
0% 7% 4% 54% 4% 31% 0%

Note: The following loglevels were omitted in this report:

vv-monsalve commented 3 years ago

Medium

Fontbakery report

Fontbakery version: 0.7.34

[22] WindSong-Pro.ttf
🔥 FAIL: Checking file is named canonically. * [com.google.fonts/check/canonical_filename](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/canonical_filename)
--- Rationale ---

A font's filename must be composed in the following manner:
<familyname>-<stylename>.ttf

- Nunito-Regular.ttf,
- Oswald-BoldItalic.ttf

Variable fonts must list the axis tags in alphabetical order in square brackets
and separated by commas:

- Roboto[wdth,wght].ttf
- Familyname-Italic[wght].ttf

* 🔥 **FAIL** Style name used in "WindSong-Pro.ttf" is not canonical. You should rebuild the font using any of the following style names: "Thin", "ExtraLight", "Light", "Regular", "Medium", "SemiBold", "Bold", "ExtraBold", "Black", "Thin Italic", "ExtraLight Italic", "Light Italic", "Italic", "Medium Italic", "SemiBold Italic", "Bold Italic", "ExtraBold Italic", "Black Italic". [code: bad-static-filename]
🔥 FAIL: Checking OS/2 fsType does not impose restrictions. * [com.google.fonts/check/fstype](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/fstype)
--- Rationale ---

The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the Google
Fonts collection must have it set to zero (also known as "Installable
Embedding"). This setting indicates that the fonts can be embedded in documents
and permanently installed by applications on remote systems.

More detailed info is available at:
https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype

* 🔥 **FAIL** In this font fsType is set to 4 meaning that: The font may be embedded, and temporarily loaded on the remote system, but documents that use it must not be editable. No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]
🔥 FAIL: Check `Google Fonts Latin Core` glyph coverage. * [com.google.fonts/check/glyph_coverage](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/glyph_coverage)
--- Rationale ---

Google Fonts expects that fonts in its collection support at least the minimal
set of characters defined in the `GF-latin-core` glyph-set.

* 🔥 **FAIL** Missing required codepoints: 0x00A0 (NO-BREAK SPACE), 0x2074 (SUPERSCRIPT FOUR) and 0x2215 (DIVISION SLASH) [code: missing-codepoints]
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering? * [com.google.fonts/check/gasp](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/gasp)
--- Rationale ---

Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem
had no grid fitting but did have antialiasing. From 9-16 ppem, just grid
fitting. And fonts above 17ppem had both antialiasing and grid fitting toggled
on. The use of accelerated graphics cards and higher resolution screens make
this approach obsolete. Microsoft's DirectWrite pushed this even further with
much improved rendering built into the OS and apps.

In this scenario it makes sense to simply toggle all 4 flags ON for all font
sizes.

* 🔥 **FAIL** Font is missing the 'gasp' table. Try exporting the font with autohinting enabled. If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting' GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: Copyright notices match canonical pattern in fonts * [com.google.fonts/check/font_copyright](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/font_copyright) * 🔥 **FAIL** Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright \(c\) 2014 by Robert E. Leuschke. All rights reserved." [code: bad-notice-format] * 🔥 **FAIL** Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright \(c\) 2014 by Robert E. Leuschke. All rights reserved." [code: bad-notice-format]
🔥 FAIL: Check name table: FONT_SUBFAMILY_NAME entries. * [com.google.fonts/check/name/subfamilyname](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/subfamilyname) * 🔥 **FAIL** SUBFAMILY_NAME for Mac "Regular" must be "" [code: bad-familyname]
🔥 FAIL: Font enables smart dropout control in "prep" table instructions? * [com.google.fonts/check/smart_dropout](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/smart_dropout)
--- Rationale ---

This setup is meant to ensure consistent rendering quality for fonts across all
devices (with different rendering/hinting capabilities).

Below is the snippet of instructions we expect to see in the fonts:
B8 01 FF    PUSHW 0x01FF
85          SCANCTRL (unconditinally turn on
                      dropout control mode)
B0 04       PUSHB 0x04
8D          SCANTYPE (enable smart dropout control)

"Smart dropout control" means activating rules 1, 2 and 5:
Rule 1: If a pixel's center falls within the glyph outline,
        that pixel is turned on.
Rule 2: If a contour falls exactly on a pixel's center,
        that pixel is turned on.
Rule 5: If a scan line between two adjacent pixel centers
        (either vertical or horizontal) is intersected
        by both an on-Transition contour and an off-Transition
        contour and neither of the pixels was already turned on
        by rules 1 and 2, turn on the pixel which is closer to
        the midpoint between the on-Transition contour and
        off-Transition contour. This is "Smart" dropout control.

For more detailed info (such as other rules not enabled in this snippet),
please refer to the TrueType Instruction Set documentation.

* 🔥 **FAIL** The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the `gftools fix-nonhinting` script. [code: lacks-smart-dropout]
🔥 FAIL: Name table entries should not contain line-breaks. * [com.google.fonts/check/name/line_breaks](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/line_breaks)
--- Rationale ---

There are some entries on the name table that may include more than one line of
text. The Google Fonts team, though, prefers to keep the name table entries
short and simple without line breaks.

For instance, some designers like to include the full text of a font license in
the "copyright notice" entry, but for the GFonts collection this entry should
only mention year, author and other basic info in a manner enforced by
com.google.fonts/check/font_copyright

* 🔥 **FAIL** Name entry LICENSE_DESCRIPTION on platform MACINTOSH contains a line-break. [code: line-break] * 🔥 **FAIL** Name entry LICENSE_DESCRIPTION on platform WINDOWS contains a line-break. [code: line-break]
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent. * [com.google.fonts/check/family/win_ascent_and_descent](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/family/win_ascent_and_descent)
--- Rationale ---

A font's winAscent and winDescent values should be greater than 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).

* 🔥 **FAIL** OS/2.usWinAscent value should be equal or greater than 1297, but got 850 instead [code: ascent] * 🔥 **FAIL** OS/2.usWinDescent value should be equal or greater than 745, but got 515 instead. [code: descent]
🔥 FAIL: Checking OS/2 Metrics match hhea Metrics. * [com.google.fonts/check/os2_metrics_match_hhea](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/os2_metrics_match_hhea)
--- Rationale ---

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.

* 🔥 **FAIL** OS/2 sTypoDescender (-515) and hhea descent (-557) must be equal. [code: descender]
🔥 FAIL: Font contains glyphs for whitespace characters? * [com.google.fonts/check/whitespace_glyphs](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/whitespace_glyphs) * 🔥 **FAIL** Whitespace glyph missing for codepoint 0x00A0. [code: missing-whitespace-glyph-0x00A0]
🔥 FAIL: Description strings in the name table must not contain copyright info. * [com.google.fonts/check/name/no_copyright_on_description](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.google.fonts/check/name/no_copyright_on_description) * 🔥 **FAIL** Some namerecords with ID=10 (NameID.DESCRIPTION) containing copyright info should be removed (perhaps these were added by a longstanding FontLab Studio 5.x bug that copied copyright notices to them.) [code: copyright-on-description]
🔥 FAIL: Does full font name begin with the font family name? * [com.google.fonts/check/name/match_familyname_fullfont](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.google.fonts/check/name/match_familyname_fullfont) * 🔥 **FAIL** On the 'name' table, the full font name (NameID 4 - FULL_FONT_NAME: 'WindSongPro') does not begin with font family name (NameID 1 - FONT_FAMILY_NAME: 'WindSong-Pro') [code: does-not]
🔥 FAIL: Check glyphs do not have components which are themselves components. * [com.google.fonts/check/glyf_nested_components](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/glyf.html#com.google.fonts/check/glyf_nested_components)
--- Rationale ---

There have been bugs rendering variable fonts with nested components.
Additionally, some static fonts with nested components have been reported to
have rendering and printing issues.

For more info, see:
* https://github.com/googlefonts/fontbakery/issues/2961
* https://github.com/arrowtype/recursive/issues/412

* 🔥 **FAIL** The following glyphs have components which themselves are component glyphs: * uni1EAE * uni1EB6 * uni1EB6 * uni1EB0 * uni1EB2 * uni1EB4 * uni1EAC * uni1EA8 * uni1EA0 * uni1EC6 and 31 more. [code: found-nested-components]
WARN: Checking OS/2 achVendID. * [com.google.fonts/check/vendor_id](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/vendor_id)
--- Rationale ---

Microsoft keeps a list of font vendors and their respective contact info. This
list is updated regularly and is indexed by a 4-char "Vendor ID" which is
stored in the achVendID field of the OS/2 table.

Registering your ID is not mandatory, but it is a good practice since some
applications may display the type designer / type foundry contact info on some
dialog and also because that info will be visible on Microsoft's website:

https://docs.microsoft.com/en-us/typography/vendors/

This check verifies whether or not a given font's vendor ID is registered in
that list or if it has some of the default values used by the most common font
editors.

Each new FontBakery release includes a cached copy of that list of vendor IDs.
If you registered recently, you're safe to ignore warnings emitted by this
check, since your ID will soon be included in one of our upcoming releases.

* ⚠ **WARN** OS/2 VendorID is 'UKWN', a font editor default. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx [code: bad]
WARN: Check if each glyph has the recommended amount of contours. * [com.google.fonts/check/contour_count](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/contour_count)
--- Rationale ---

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.

* ⚠ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct. The following glyphs do not have the recommended number of contours: Glyph name: percent Contours detected: 3 Expected: 5 Glyph name: zero Contours detected: 1 Expected: 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: question Contours detected: 3 Expected: 2 Glyph name: at Contours detected: 1 Expected: 2 Glyph name: A Contours detected: 3 Expected: 2 Glyph name: C Contours detected: 2 Expected: 1 Glyph name: E Contours detected: 2 Expected: 1 Glyph name: G Contours detected: 3 Expected: 1 Glyph name: H Contours detected: 4 Expected: 1 Glyph name: I Contours detected: 2 Expected: 1 Glyph name: J Contours detected: 2 Expected: 1 Glyph name: L Contours detected: 3 Expected: 1 Glyph name: O Contours detected: 1 Expected: 2 Glyph name: S Contours detected: 2 Expected: 1 Glyph name: Y Contours detected: 2 Expected: 1 Glyph name: a Contours detected: 1 Expected: 2 Glyph name: d Contours detected: 1 Expected: 2 Glyph name: f Contours detected: 2 Expected: 1 Glyph name: h Contours detected: 2 Expected: 1 Glyph name: j Contours detected: 3 Expected: 2 Glyph name: l Contours detected: 2 Expected: 1 Glyph name: s Contours detected: 3 Expected: 1 Glyph name: y Contours detected: 2 Expected: 1 Glyph name: ordfeminine Contours detected: 1 Expected: 2 or 3 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: questiondown Contours detected: 3 Expected: 2 Glyph name: Agrave Contours detected: 4 Expected: 3 Glyph name: Aacute Contours detected: 4 Expected: 3 Glyph name: Acircumflex Contours detected: 4 Expected: 3 Glyph name: Atilde Contours detected: 4 Expected: 3 Glyph name: Adieresis Contours detected: 5 Expected: 4 Glyph name: Aring Contours detected: 5 Expected: 3 or 4 Glyph name: AE Contours detected: 1 Expected: 2 Glyph name: Ccedilla Contours detected: 3 Expected: 1 or 2 Glyph name: Egrave Contours detected: 3 Expected: 2 Glyph name: Eacute Contours detected: 3 Expected: 2 Glyph name: Ecircumflex Contours detected: 3 Expected: 2 Glyph name: Edieresis Contours detected: 4 Expected: 3 Glyph name: Igrave Contours detected: 3 Expected: 2 Glyph name: Iacute Contours detected: 3 Expected: 2 Glyph name: Icircumflex Contours detected: 3 Expected: 2 Glyph name: Idieresis Contours detected: 4 Expected: 3 Glyph name: Ograve Contours detected: 2 Expected: 3 Glyph name: Oacute Contours detected: 2 Expected: 3 Glyph name: Ocircumflex Contours detected: 2 Expected: 3 Glyph name: Otilde Contours detected: 2 Expected: 3 Glyph name: Odieresis Contours detected: 3 Expected: 4 Glyph name: Yacute Contours detected: 3 Expected: 2 Glyph name: germandbls Contours detected: 2 Expected: 1 Glyph name: agrave Contours detected: 2 Expected: 3 Glyph name: aacute Contours detected: 2 Expected: 3 Glyph name: acircumflex Contours detected: 2 Expected: 3 Glyph name: atilde Contours detected: 2 Expected: 3 Glyph name: adieresis Contours detected: 3 Expected: 4 Glyph name: aring Contours detected: 3 Expected: 4 Glyph name: ae Contours detected: 2 Expected: 3 Glyph name: oslash Contours detected: 4 Expected: 3 Glyph name: yacute Contours detected: 3 Expected: 2 Glyph name: ydieresis Contours detected: 4 Expected: 3 Glyph name: Amacron Contours detected: 4 Expected: 3 Glyph name: amacron Contours detected: 2 Expected: 3 Glyph name: Abreve Contours detected: 4 Expected: 3 Glyph name: abreve Contours detected: 2 Expected: 3 Glyph name: aogonek Contours detected: 1 Expected: 2 Glyph name: Cacute Contours detected: 3 Expected: 2 Glyph name: Ccircumflex Contours detected: 3 Expected: 2 Glyph name: Cdotaccent Contours detected: 4 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: Ccaron Contours detected: 3 Expected: 2 Glyph name: dcaron Contours detected: 2 Expected: 3 Glyph name: dcroat Contours detected: 1 Expected: 2 Glyph name: Emacron Contours detected: 3 Expected: 2 Glyph name: Edotaccent Contours detected: 4 Expected: 2 Glyph name: edotaccent Contours detected: 4 Expected: 3 Glyph name: Eogonek Contours detected: 3 Expected: 1 or 2 Glyph name: Ecaron Contours detected: 3 Expected: 2 Glyph name: Gcircumflex Contours detected: 4 Expected: 2 Glyph name: Gbreve Contours detected: 4 Expected: 2 Glyph name: Gdotaccent Contours detected: 5 Expected: 2 Glyph name: uni0122 Contours detected: 4 Expected: 2 Glyph name: Hcircumflex Contours detected: 5 Expected: 2 Glyph name: hcircumflex Contours detected: 3 Expected: 2 Glyph name: Hbar Contours detected: 3 Expected: 2 Glyph name: hbar Contours detected: 3 Expected: 1 Glyph name: Itilde Contours detected: 3 Expected: 2 Glyph name: Imacron Contours detected: 3 Expected: 2 Glyph name: Idotaccent Contours detected: 4 Expected: 2 Glyph name: Jcircumflex Contours detected: 3 Expected: 2 Glyph name: jcircumflex Contours detected: 3 Expected: 2 Glyph name: Lacute Contours detected: 4 Expected: 2 Glyph name: lacute Contours detected: 3 Expected: 2 Glyph name: uni013B Contours detected: 4 Expected: 2 Glyph name: uni013C Contours detected: 3 Expected: 2 Glyph name: Lcaron Contours detected: 4 Expected: 2 Glyph name: lcaron Contours detected: 3 Expected: 2 Glyph name: Lslash Contours detected: 3 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: Eng Contours detected: 2 Expected: 1 Glyph name: eng Contours detected: 2 Expected: 1 Glyph name: Omacron Contours detected: 2 Expected: 3 Glyph name: Ohungarumlaut Contours detected: 3 Expected: 4 Glyph name: OE Contours detected: 1 Expected: 2 Glyph name: Sacute Contours detected: 3 Expected: 2 Glyph name: sacute Contours detected: 4 Expected: 2 Glyph name: Scircumflex Contours detected: 3 Expected: 2 Glyph name: scircumflex Contours detected: 4 Expected: 2 Glyph name: scedilla Contours detected: 3 Expected: 1 or 2 Glyph name: Scaron Contours detected: 3 Expected: 2 Glyph name: scaron Contours detected: 4 Expected: 2 Glyph name: Ycircumflex Contours detected: 3 Expected: 2 Glyph name: ycircumflex Contours detected: 3 Expected: 2 Glyph name: Ydieresis Contours detected: 4 Expected: 3 Glyph name: Zdotaccent Contours detected: 3 Expected: 2 Glyph name: zdotaccent Contours detected: 3 Expected: 2 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: Uhorn Contours detected: 2 Expected: 1 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni0218 Contours detected: 3 Expected: 2 Glyph name: uni0219 Contours detected: 4 Expected: 2 Glyph name: uni1E02 Contours detected: 5 Expected: 4 Glyph name: uni1E0B Contours detected: 2 Expected: 3 Glyph name: uni1E1E Contours detected: 3 Expected: 2 Glyph name: uni1E1F Contours detected: 4 Expected: 2 Glyph name: uni1E40 Contours detected: 3 Expected: 2 Glyph name: uni1E41 Contours detected: 3 Expected: 2 Glyph name: uni1E56 Contours detected: 4 Expected: 3 Glyph name: uni1E57 Contours detected: 4 Expected: 3 Glyph name: uni1E60 Contours detected: 4 Expected: 2 Glyph name: uni1E61 Contours detected: 5 Expected: 2 Glyph name: uni1E6A Contours detected: 3 Expected: 2 Glyph name: uni1E6B Contours detected: 3 Expected: 2 Glyph name: uni1E9E Contours detected: 5 Expected: 1 Glyph name: uni1EA0 Contours detected: 4 Expected: 3 Glyph name: uni1EA1 Contours detected: 2 Expected: 3 Glyph name: uni1EA2 Contours detected: 4 Expected: 3 Glyph name: uni1EA3 Contours detected: 2 Expected: 3 Glyph name: uni1EA4 Contours detected: 5 Expected: 4 Glyph name: uni1EA5 Contours detected: 3 Expected: 4 Glyph name: uni1EA6 Contours detected: 5 Expected: 4 Glyph name: uni1EA7 Contours detected: 3 Expected: 4 Glyph name: uni1EA8 Contours detected: 5 Expected: 4 Glyph name: uni1EA9 Contours detected: 3 Expected: 4 Glyph name: uni1EAA Contours detected: 5 Expected: 4 Glyph name: uni1EAB Contours detected: 3 Expected: 4 Glyph name: uni1EAC Contours detected: 5 Expected: 4 Glyph name: uni1EAD Contours detected: 3 Expected: 4 Glyph name: uni1EAE Contours detected: 5 Expected: 4 Glyph name: uni1EAF Contours detected: 3 Expected: 4 Glyph name: uni1EB0 Contours detected: 5 Expected: 4 Glyph name: uni1EB1 Contours detected: 3 Expected: 4 Glyph name: uni1EB2 Contours detected: 5 Expected: 4 Glyph name: uni1EB3 Contours detected: 3 Expected: 4 Glyph name: uni1EB4 Contours detected: 5 Expected: 4 Glyph name: uni1EB5 Contours detected: 3 Expected: 4 Glyph name: uni1EB6 Contours detected: 5 Expected: 4 Glyph name: uni1EB7 Contours detected: 3 Expected: 4 Glyph name: uni1EB8 Contours detected: 3 Expected: 2 Glyph name: uni1EBA Contours detected: 3 Expected: 2 Glyph name: uni1EBC Contours detected: 3 Expected: 2 Glyph name: uni1EBE Contours detected: 4 Expected: 3 Glyph name: uni1EC0 Contours detected: 4 Expected: 3 Glyph name: uni1EC2 Contours detected: 4 Expected: 3 Glyph name: uni1EC4 Contours detected: 4 Expected: 3 Glyph name: uni1EC6 Contours detected: 4 Expected: 3 Glyph name: uni1EC8 Contours detected: 3 Expected: 2 Glyph name: uni1ECA Contours detected: 3 Expected: 2 Glyph name: uni1ECC Contours detected: 2 Expected: 3 Glyph name: uni1ECE Contours detected: 2 Expected: 3 Glyph name: uni1ED0 Contours detected: 3 Expected: 4 Glyph name: uni1ED2 Contours detected: 3 Expected: 4 Glyph name: uni1ED4 Contours detected: 3 Expected: 4 Glyph name: uni1ED6 Contours detected: 3 Expected: 4 Glyph name: uni1ED8 Contours detected: 3 Expected: 4 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE0 Contours detected: 2 Expected: 3 or 4 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE8 Contours detected: 3 Expected: 2 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEA Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EEC Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEE Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF0 Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: Ygrave Contours detected: 3 Expected: 2 Glyph name: ygrave Contours detected: 3 Expected: 2 Glyph name: uni1EF4 Contours detected: 3 Expected: 2 Glyph name: uni1EF5 Contours detected: 3 Expected: 2 Glyph name: uni1EF6 Contours detected: 3 Expected: 2 Glyph name: uni1EF7 Contours detected: 3 Expected: 2 Glyph name: uni1EF8 Contours detected: 3 Expected: 2 Glyph name: uni1EF9 Contours detected: 3 Expected: 2 Glyph name: perthousand Contours detected: 4 Expected: 6 or 7 Glyph name: f_f Contours detected: 3 Expected: 1 or 2 Glyph name: fl Contours detected: 3 Expected: 1 or 2 Glyph name: A Contours detected: 3 Expected: 2 Glyph name: AE Contours detected: 1 Expected: 2 Glyph name: Aacute Contours detected: 4 Expected: 3 Glyph name: Abreve Contours detected: 4 Expected: 3 Glyph name: Acircumflex Contours detected: 4 Expected: 3 Glyph name: Adieresis Contours detected: 5 Expected: 4 Glyph name: Agrave Contours detected: 4 Expected: 3 Glyph name: Amacron Contours detected: 4 Expected: 3 Glyph name: Aring Contours detected: 5 Expected: 3 or 4 Glyph name: Atilde Contours detected: 4 Expected: 3 Glyph name: C Contours detected: 2 Expected: 1 Glyph name: Cacute Contours detected: 3 Expected: 2 Glyph name: Ccaron Contours detected: 3 Expected: 2 Glyph name: Ccedilla Contours detected: 3 Expected: 1 or 2 Glyph name: Ccircumflex Contours detected: 3 Expected: 2 Glyph name: Cdotaccent Contours detected: 4 Expected: 2 Glyph name: E Contours detected: 2 Expected: 1 Glyph name: Eacute Contours detected: 3 Expected: 2 Glyph name: Ecaron Contours detected: 3 Expected: 2 Glyph name: Ecircumflex Contours detected: 3 Expected: 2 Glyph name: Edieresis Contours detected: 4 Expected: 3 Glyph name: Edotaccent Contours detected: 4 Expected: 2 Glyph name: Egrave Contours detected: 3 Expected: 2 Glyph name: Emacron Contours detected: 3 Expected: 2 Glyph name: Eng Contours detected: 2 Expected: 1 Glyph name: Eogonek Contours detected: 3 Expected: 1 or 2 Glyph name: G Contours detected: 3 Expected: 1 Glyph name: Gbreve Contours detected: 4 Expected: 2 Glyph name: Gcircumflex Contours detected: 4 Expected: 2 Glyph name: Gdotaccent Contours detected: 5 Expected: 2 Glyph name: H Contours detected: 4 Expected: 1 Glyph name: Hbar Contours detected: 3 Expected: 2 Glyph name: Hcircumflex Contours detected: 5 Expected: 2 Glyph name: I Contours detected: 2 Expected: 1 Glyph name: Iacute Contours detected: 3 Expected: 2 Glyph name: Icircumflex Contours detected: 3 Expected: 2 Glyph name: Idieresis Contours detected: 4 Expected: 3 Glyph name: Idotaccent Contours detected: 4 Expected: 2 Glyph name: Igrave Contours detected: 3 Expected: 2 Glyph name: Imacron Contours detected: 3 Expected: 2 Glyph name: Itilde Contours detected: 3 Expected: 2 Glyph name: J Contours detected: 2 Expected: 1 Glyph name: Jcircumflex Contours detected: 3 Expected: 2 Glyph name: L Contours detected: 3 Expected: 1 Glyph name: Lacute Contours detected: 4 Expected: 2 Glyph name: Lcaron Contours detected: 4 Expected: 2 Glyph name: Lslash Contours detected: 3 Expected: 1 Glyph name: O Contours detected: 1 Expected: 2 Glyph name: OE Contours detected: 1 Expected: 2 Glyph name: Oacute Contours detected: 2 Expected: 3 Glyph name: Ocircumflex Contours detected: 2 Expected: 3 Glyph name: Odieresis Contours detected: 3 Expected: 4 Glyph name: Ograve Contours detected: 2 Expected: 3 Glyph name: Ohungarumlaut Contours detected: 3 Expected: 4 Glyph name: Omacron Contours detected: 2 Expected: 3 Glyph name: Otilde Contours detected: 2 Expected: 3 Glyph name: S Contours detected: 2 Expected: 1 Glyph name: Sacute Contours detected: 3 Expected: 2 Glyph name: Scaron Contours detected: 3 Expected: 2 Glyph name: Scircumflex Contours detected: 3 Expected: 2 Glyph name: Uhorn Contours detected: 2 Expected: 1 Glyph name: Y Contours detected: 2 Expected: 1 Glyph name: Yacute Contours detected: 3 Expected: 2 Glyph name: Ycircumflex Contours detected: 3 Expected: 2 Glyph name: Ydieresis Contours detected: 4 Expected: 3 Glyph name: Ygrave Contours detected: 3 Expected: 2 Glyph name: Zdotaccent Contours detected: 3 Expected: 2 Glyph name: a Contours detected: 1 Expected: 2 Glyph name: aacute Contours detected: 2 Expected: 3 Glyph name: abreve Contours detected: 2 Expected: 3 Glyph name: acircumflex Contours detected: 2 Expected: 3 Glyph name: adieresis Contours detected: 3 Expected: 4 Glyph name: ae Contours detected: 2 Expected: 3 Glyph name: agrave Contours detected: 2 Expected: 3 Glyph name: amacron Contours detected: 2 Expected: 3 Glyph name: aogonek Contours detected: 1 Expected: 2 Glyph name: aring Contours detected: 3 Expected: 4 Glyph name: at Contours detected: 1 Expected: 2 Glyph name: atilde Contours detected: 2 Expected: 3 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: d Contours detected: 1 Expected: 2 Glyph name: dcaron Contours detected: 2 Expected: 3 Glyph name: dcroat Contours detected: 1 Expected: 2 Glyph name: edotaccent Contours detected: 4 Expected: 3 Glyph name: eng Contours detected: 2 Expected: 1 Glyph name: f Contours detected: 2 Expected: 1 Glyph name: f_f Contours detected: 3 Expected: 1 or 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: fl Contours detected: 3 Expected: 2 Glyph name: germandbls Contours detected: 2 Expected: 1 Glyph name: h Contours detected: 2 Expected: 1 Glyph name: hbar Contours detected: 3 Expected: 1 Glyph name: hcircumflex Contours detected: 3 Expected: 2 Glyph name: j Contours detected: 3 Expected: 2 Glyph name: jcircumflex Contours detected: 3 Expected: 2 Glyph name: l Contours detected: 2 Expected: 1 Glyph name: lacute Contours detected: 3 Expected: 2 Glyph name: lcaron Contours detected: 3 Expected: 2 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: ordfeminine Contours detected: 1 Expected: 2 or 3 Glyph name: oslash Contours detected: 4 Expected: 3 Glyph name: percent Contours detected: 3 Expected: 5 Glyph name: perthousand Contours detected: 4 Expected: 6 or 7 Glyph name: question Contours detected: 3 Expected: 2 Glyph name: questiondown Contours detected: 3 Expected: 2 Glyph name: s Contours detected: 3 Expected: 1 Glyph name: sacute Contours detected: 4 Expected: 2 Glyph name: scaron Contours detected: 4 Expected: 2 Glyph name: scircumflex Contours detected: 4 Expected: 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni0122 Contours detected: 4 Expected: 2 Glyph name: uni013B Contours detected: 4 Expected: 2 Glyph name: uni013C Contours detected: 3 Expected: 2 Glyph name: uni0218 Contours detected: 3 Expected: 2 Glyph name: uni0219 Contours detected: 4 Expected: 2 Glyph name: uni1E02 Contours detected: 5 Expected: 4 Glyph name: uni1E0B Contours detected: 2 Expected: 3 Glyph name: uni1E1E Contours detected: 3 Expected: 2 Glyph name: uni1E40 Contours detected: 3 Expected: 2 Glyph name: uni1E41 Contours detected: 3 Expected: 2 Glyph name: uni1E56 Contours detected: 4 Expected: 3 Glyph name: uni1E57 Contours detected: 4 Expected: 3 Glyph name: uni1E60 Contours detected: 4 Expected: 2 Glyph name: uni1E61 Contours detected: 5 Expected: 2 Glyph name: uni1E6A Contours detected: 3 Expected: 2 Glyph name: uni1E6B Contours detected: 3 Expected: 2 Glyph name: uni1E9E Contours detected: 5 Expected: 1 Glyph name: uni1EA0 Contours detected: 4 Expected: 3 Glyph name: uni1EA1 Contours detected: 2 Expected: 3 Glyph name: uni1EA2 Contours detected: 4 Expected: 3 Glyph name: uni1EA3 Contours detected: 2 Expected: 3 Glyph name: uni1EA4 Contours detected: 5 Expected: 4 Glyph name: uni1EA5 Contours detected: 3 Expected: 4 Glyph name: uni1EA6 Contours detected: 5 Expected: 4 Glyph name: uni1EA7 Contours detected: 3 Expected: 4 Glyph name: uni1EA8 Contours detected: 5 Expected: 4 Glyph name: uni1EA9 Contours detected: 3 Expected: 4 Glyph name: uni1EAA Contours detected: 5 Expected: 4 Glyph name: uni1EAB Contours detected: 3 Expected: 4 Glyph name: uni1EAC Contours detected: 5 Expected: 4 Glyph name: uni1EAD Contours detected: 3 Expected: 4 Glyph name: uni1EAE Contours detected: 5 Expected: 4 Glyph name: uni1EAF Contours detected: 3 Expected: 4 Glyph name: uni1EB0 Contours detected: 5 Expected: 4 Glyph name: uni1EB1 Contours detected: 3 Expected: 4 Glyph name: uni1EB2 Contours detected: 5 Expected: 4 Glyph name: uni1EB3 Contours detected: 3 Expected: 4 Glyph name: uni1EB4 Contours detected: 5 Expected: 4 Glyph name: uni1EB5 Contours detected: 3 Expected: 4 Glyph name: uni1EB6 Contours detected: 5 Expected: 4 Glyph name: uni1EB7 Contours detected: 3 Expected: 4 Glyph name: uni1EB8 Contours detected: 3 Expected: 2 Glyph name: uni1EBA Contours detected: 3 Expected: 2 Glyph name: uni1EBC Contours detected: 3 Expected: 2 Glyph name: uni1EBE Contours detected: 4 Expected: 3 Glyph name: uni1EC0 Contours detected: 4 Expected: 3 Glyph name: uni1EC2 Contours detected: 4 Expected: 3 Glyph name: uni1EC4 Contours detected: 4 Expected: 3 Glyph name: uni1EC6 Contours detected: 4 Expected: 3 Glyph name: uni1EC8 Contours detected: 3 Expected: 2 Glyph name: uni1ECA Contours detected: 3 Expected: 2 Glyph name: uni1ECC Contours detected: 2 Expected: 3 Glyph name: uni1ECE Contours detected: 2 Expected: 3 Glyph name: uni1ED0 Contours detected: 3 Expected: 4 Glyph name: uni1ED2 Contours detected: 3 Expected: 4 Glyph name: uni1ED4 Contours detected: 3 Expected: 4 Glyph name: uni1ED6 Contours detected: 3 Expected: 4 Glyph name: uni1ED8 Contours detected: 3 Expected: 4 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE0 Contours detected: 2 Expected: 3 or 4 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE8 Contours detected: 3 Expected: 2 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEA Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EEC Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEE Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF0 Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: uni1EF4 Contours detected: 3 Expected: 2 Glyph name: uni1EF5 Contours detected: 3 Expected: 2 Glyph name: uni1EF6 Contours detected: 3 Expected: 2 Glyph name: uni1EF7 Contours detected: 3 Expected: 2 Glyph name: uni1EF8 Contours detected: 3 Expected: 2 Glyph name: uni1EF9 Contours detected: 3 Expected: 2 Glyph name: y Contours detected: 2 Expected: 1 Glyph name: yacute Contours detected: 3 Expected: 2 Glyph name: ycircumflex Contours detected: 3 Expected: 2 Glyph name: ydieresis Contours detected: 4 Expected: 3 Glyph name: ygrave Contours detected: 3 Expected: 2 Glyph name: zdotaccent Contours detected: 3 Expected: 2 Glyph name: zero Contours detected: 1 Expected: 2 or 3 [code: contour-count]
WARN: Are there caret positions declared for every ligature? * [com.google.fonts/check/ligature_carets](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/ligature_carets)
--- Rationale ---

All ligatures in a font must have corresponding caret (text cursor) positions
defined in the GDEF table, otherwhise, users may experience issues with caret
rendering.

If using GlyphsApp, ligature carets can be set directly on canvas by accessing
the `Glyph -> Set Anchors` menu option or by pressing the `Cmd+U` keyboard
shortcut.

If designing with UFOs, (as of Oct 2020) ligature carets are not yet compiled
by ufo2ft, and therefore will not build via FontMake. See
googlefonts/ufo2ft/issues/329

* ⚠ **WARN** This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]
WARN: Is there kerning info for non-ligated sequences? * [com.google.fonts/check/kerning_for_non_ligated_sequences](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/kerning_for_non_ligated_sequences)
--- Rationale ---

Fonts with ligatures should have kerning on the corresponding non-ligated
sequences for text where ligatures aren't used (eg
https://github.com/impallari/Raleway/issues/14).

* ⚠ **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - c + s - d + s - e + s - f + f - f + i - i + l - g + s - o + r - r + s - y + l - l + p - p + r [code: lacks-kern-info]
WARN: Font contains '.notdef' as its first glyph? * [com.google.fonts/check/mandatory_glyphs](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/mandatory_glyphs)
--- Rationale ---

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.

* ⚠ **WARN** Glyph '.notdef' should contain a drawing, but it is empty. [code: empty]
WARN: Checking Vertical Metric Linegaps. * [com.google.fonts/check/linegaps](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/hhea.html#com.google.fonts/check/linegaps) * ⚠ **WARN** OS/2 sTypoLineGap is not equal to 0. [code: OS/2]
WARN: Do outlines contain any jaggy segments? * [com.google.fonts/check/outline_jaggy_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/.html#com.google.fonts/check/outline_jaggy_segments)
--- Rationale ---

This test 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.

* ⚠ **WARN** The following glyphs have jaggy segments: * A.001: B<<1084.0,-59.0>-<1070.0,-59.0>-<1067.0,-47.0>>/B<<1067.0,-47.0>-<1067.0,-48.0>-<1065.0,-36.0>> = 14.036243467926457 * A.001: B<<1088.0,98.0>-<1031.0,95.0>-<1004.0,96.0>>/L<<1004.0,96.0>--<1004.0,96.0>> = 2.1210963966614473 * A.001: B<<1427.0,624.0>-<1381.0,578.0>-<1325.0,494.0>>/B<<1325.0,494.0>-<1373.0,539.0>-<1416.0,585.0>> = 13.157542740014783 * A: B<<909.0,98.0>-<852.0,95.0>-<825.0,96.0>>/L<<825.0,96.0>--<825.0,96.0>> = 2.1210963966614473 * Aacute: B<<909.0,98.0>-<852.0,95.0>-<825.0,96.0>>/L<<825.0,96.0>--<825.0,96.0>> = 2.1210963966614473 * Abreve: B<<909.0,98.0>-<852.0,95.0>-<825.0,96.0>>/L<<825.0,96.0>--<825.0,96.0>> = 2.1210963966614473 * Acircumflex: B<<909.0,98.0>-<852.0,95.0>-<825.0,96.0>>/L<<825.0,96.0>--<825.0,96.0>> = 2.1210963966614473 * Acircumflex: B<<934.0,614.0>-<878.0,582.0>-<859.0,580.0>>/L<<859.0,580.0>--<859.0,580.0>> = 6.009005957494474 * Adieresis: B<<909.0,98.0>-<852.0,95.0>-<825.0,96.0>>/L<<825.0,96.0>--<825.0,96.0>> = 2.1210963966614473 * Agrave: B<<909.0,98.0>-<852.0,95.0>-<825.0,96.0>>/L<<825.0,96.0>--<825.0,96.0>> = 2.1210963966614473 and 451 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines? * [com.google.fonts/check/outline_semi_vertical](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/.html#com.google.fonts/check/outline_semi_vertical)
--- Rationale ---

This test 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 test is disabled for italic styles, which often contain nearly-upright
lines.

* ⚠ **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * logicalnot: L<<8.0,173.0>--<364.0,174.0>> * numbersign: L<<380.0,175.0>--<540.0,176.0>> * numbersign: L<<457.0,322.0>--<611.0,323.0>> * stanza.2: L<<1604.0,274.0>--<1982.0,273.0>> * stanza_notes.2: L<<2175.0,339.0>--<2174.0,207.0>> * underscore: L<<780.0,-117.0>--<13.0,-121.0>> * uni03A9: L<<371.0,32.0>--<494.0,33.0>> and uni2126: L<<371.0,32.0>--<494.0,33.0>> [code: found-semi-vertical]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 14 8 106 7 60 0
0% 7% 4% 54% 4% 31% 0%

Note: The following loglevels were omitted in this report: