Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Google Font QA report - Static fonts #5

Open
vv-monsalve opened this issue Feb 12, 2021 · 8 comments
Open

Google Font QA report - Static fonts #5

vv-monsalve opened this issue Feb 12, 2021 · 8 comments

Comments

@vv-monsalve
Copy link
Collaborator

Fontbakery report

Fontbakery version: 0.7.34

[17] MontaguSlab144pt-Bold.ttf
🔥 FAIL: Checking OS/2 fsType does not impose restrictions.
--- 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 8 meaning that:
    The font may be embedded but must only be installed temporarily on other systems.

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.
--- 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: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]
🔥 FAIL: Copyright notices match canonical pattern in fonts
🔥 FAIL: Checking OS/2 fsSelection value.
  • com.google.fonts/check/fsselection

  • 🔥 FAIL OS/2 fsSelection REGULAR bit should be unset. [code: bad-REGULAR]

  • 🔥 FAIL OS/2 fsSelection BOLD bit should be set. [code: bad-BOLD]

🔥 FAIL: Checking head.macStyle value.
--- Rationale ---

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.


  • 🔥 FAIL head macStyle BOLD bit should be set. [code: bad-BOLD]
🔥 FAIL: Check name table: FONT_FAMILY_NAME entries.
--- Rationale ---

Checks that the family name infered from the font filename matches the string
at nameID 1 (NAMEID_FONT_FAMILY_NAME) if it conforms to RIBBI and otherwise
checks that nameID 1 is the family name + the style name.


  • 🔥 FAIL Entry [FONT_FAMILY_NAME(1):WINDOWS(3)] on the "name" table: Expected "Montagu Slab 144pt" but got "Montagu Slab 144pt Bold". [code: mismatch]
🔥 FAIL: Check name table: FONT_SUBFAMILY_NAME entries.
🔥 FAIL: Check name table: TYPOGRAPHIC_FAMILY_NAME entries.
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 2466, but got 1800 instead [code: ascent]
  • 🔥 FAIL OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]
🔥 FAIL: Check glyphs do not have components which are themselves 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:
    • uni1EB2
    • uni1EB4
    • uni1EA8
    • uni1EAA
    • uni01C4
    • uni01C5
    • uni1EC2
    • uni1EC4
    • uni01C8
    • uni01CB and 33 more. [code: found-nested-components]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: aogonek Contours detected: 3 Expected: 2
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni01EA Contours detected: 3 Expected: 2
Glyph name: uni01EB Contours detected: 3 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: aogonek Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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?
--- 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Bold' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • I: X=654.0,Y=1501.0 (should be at cap-height 1500?)
    • I: X=234.0,Y=1501.0 (should be at cap-height 1500?)
    • Q: X=1158.0,Y=1.0 (should be at baseline 0?)
    • S: X=1136.0,Y=1501.0 (should be at cap-height 1500?)
    • S: X=1352.0,Y=1501.0 (should be at cap-height 1500?)
    • Cdotaccent: X=593.0,Y=1798.0 (should be at ascender 1800?)
    • Cdotaccent: X=1025.0,Y=1798.0 (should be at ascender 1800?)
    • Edotaccent: X=566.0,Y=1798.0 (should be at ascender 1800?)
    • Edotaccent: X=998.0,Y=1798.0 (should be at ascender 1800?)
    • Gdotaccent: X=597.0,Y=1798.0 (should be at ascender 1800?) and 75 more. [code: found-misalignments]
WARN: Do outlines contain any 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:
    • B: B<<1342.0,887.5>-<1243.0,801.0>-<1076.0,775.0>>/B<<1076.0,775.0>-<1282.0,762.0>-<1403.5,671.5>> = 12.460223110150562
    • R: L<<1036.0,698.0>--<936.0,698.0>>/B<<936.0,698.0>-<1108.0,685.0>-<1179.0,591.5>> = 4.322277059491009
    • Racute: L<<1036.0,698.0>--<936.0,698.0>>/B<<936.0,698.0>-<1108.0,685.0>-<1179.0,591.5>> = 4.322277059491009
    • Rcaron: L<<1036.0,698.0>--<936.0,698.0>>/B<<936.0,698.0>-<1108.0,685.0>-<1179.0,591.5>> = 4.322277059491009
    • braceleft: B<<461.5,643.0>-<371.0,602.0>-<240.0,590.0>>/B<<240.0,590.0>-<371.0,579.0>-<461.5,537.5>> = 10.033697761121097
    • braceright: B<<454.5,643.0>-<545.0,602.0>-<676.0,590.0>>/B<<676.0,590.0>-<545.0,579.0>-<454.5,537.5>> = 10.033697761121097
    • eng: L<<558.0,1140.0>--<558.0,901.0>>/B<<558.0,901.0>-<582.0,1025.0>-<663.0,1095.5>> = 10.954062643398332
    • m: L<<552.0,1140.0>--<552.0,902.0>>/B<<552.0,902.0>-<576.0,1025.0>-<655.0,1095.5>> = 11.04094018032372
    • n: L<<558.0,1140.0>--<558.0,901.0>>/B<<558.0,901.0>-<582.0,1025.0>-<663.0,1095.5>> = 10.954062643398332
    • nacute: L<<558.0,1140.0>--<558.0,901.0>>/B<<558.0,901.0>-<582.0,1025.0>-<663.0,1095.5>> = 10.954062643398332 and 35 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • k: L<<184.0,0.0>--<185.0,1500.0>>
    • k: L<<585.0,1500.0>--<584.0,652.0>>
    • kgreenlandic: L<<208.0,0.0>--<209.0,1140.0>>
    • uni0137: L<<184.0,0.0>--<185.0,1500.0>> and uni0137: L<<585.0,1500.0>--<584.0,652.0>> [code: found-semi-vertical]

[12] MontaguSlab144pt-ExtraLight.ttf
🔥 FAIL: Checking OS/2 fsType does not impose restrictions.
--- 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 8 meaning that:
    The font may be embedded but must only be installed temporarily on other systems.

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.
--- 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: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]
🔥 FAIL: Copyright notices match canonical pattern in fonts
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 2466, but got 1800 instead [code: ascent]
  • 🔥 FAIL OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]
🔥 FAIL: Check glyphs do not have components which are themselves 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:
    • uni1EB2
    • uni1EB4
    • uni1EA8
    • uni1EAA
    • uni01C4
    • uni01C5
    • uni1EC2
    • uni1EC4
    • uni01C8
    • uni01CB and 33 more. [code: found-nested-components]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: aogonek Contours detected: 3 Expected: 2
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni01EA Contours detected: 3 Expected: 2
Glyph name: uni01EB Contours detected: 3 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: aogonek Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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?
--- 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt ExtraLight' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • t: X=-9.0,Y=1086.0 (should be at x-height 1088?)
    • t: X=112.0,Y=1086.0 (should be at x-height 1088?)
    • uni1EA2: X=1004.5,Y=1799.5 (should be at ascender 1800?)
    • Aogonek: X=1445.0,Y=1.0 (should be at baseline 0?)
    • uni1EBA: X=938.5,Y=1799.5 (should be at ascender 1800?)
    • Eogonek: X=1238.0,Y=1.0 (should be at baseline 0?)
    • uni1EC8: X=526.5,Y=1799.5 (should be at ascender 1800?)
    • Iogonek: X=390.0,Y=1.0 (should be at baseline 0?)
    • uni1ECE: X=1033.5,Y=1799.5 (should be at ascender 1800?)
    • uni1EDE: X=1033.5,Y=1799.5 (should be at ascender 1800?) and 22 more. [code: found-misalignments]
WARN: Do outlines contain any 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:
    • B: B<<1236.5,880.5>-<1150.0,791.0>-<997.0,767.0>>/B<<997.0,767.0>-<1178.0,751.0>-<1280.5,658.0>> = 13.966616300910294
    • R: L<<935.0,722.0>--<847.0,722.0>>/B<<847.0,722.0>-<975.0,693.0>-<1031.5,603.0>> = 12.765565781058607
    • Racute: L<<935.0,722.0>--<847.0,722.0>>/B<<847.0,722.0>-<975.0,693.0>-<1031.5,603.0>> = 12.765565781058607
    • Rcaron: L<<935.0,722.0>--<847.0,722.0>>/B<<847.0,722.0>-<975.0,693.0>-<1031.5,603.0>> = 12.765565781058607
    • a: L<<861.0,187.0>--<861.0,308.0>>/B<<861.0,308.0>-<819.0,136.0>-<707.5,59.5>> = 13.722297133133548
    • aacute: L<<861.0,187.0>--<861.0,308.0>>/B<<861.0,308.0>-<819.0,136.0>-<707.5,59.5>> = 13.722297133133548
    • abreve: L<<861.0,187.0>--<861.0,308.0>>/B<<861.0,308.0>-<819.0,136.0>-<707.5,59.5>> = 13.722297133133548
    • acircumflex: L<<861.0,187.0>--<861.0,308.0>>/B<<861.0,308.0>-<819.0,136.0>-<707.5,59.5>> = 13.722297133133548
    • adieresis: L<<861.0,187.0>--<861.0,308.0>>/B<<861.0,308.0>-<819.0,136.0>-<707.5,59.5>> = 13.722297133133548
    • agrave: L<<861.0,187.0>--<861.0,308.0>>/B<<861.0,308.0>-<819.0,136.0>-<707.5,59.5>> = 13.722297133133548 and 63 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • dotlessi.ss01: L<<236.0,215.0>--<240.0,1088.0>>
    • i.loclTRK.ss01: L<<236.0,215.0>--<240.0,1088.0>>
    • i.ss01: L<<236.0,215.0>--<240.0,1088.0>>
    • iacute.ss01: L<<236.0,215.0>--<240.0,1088.0>>
    • icircumflex.ss01: L<<236.0,215.0>--<240.0,1088.0>>
    • idieresis.ss01: L<<236.0,215.0>--<240.0,1088.0>>
    • igrave.ss01: L<<236.0,215.0>--<240.0,1088.0>>
    • imacron.ss01: L<<236.0,215.0>--<240.0,1088.0>>
    • kgreenlandic: L<<352.0,399.0>--<351.0,0.0>>
    • l.ss01: L<<212.0,223.0>--<216.0,1500.0>> and 13 more. [code: found-semi-vertical]

[13] MontaguSlab144pt-Light.ttf
🔥 FAIL: Checking OS/2 fsType does not impose restrictions.
--- 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 8 meaning that:
    The font may be embedded but must only be installed temporarily on other systems.

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.
--- 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: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]
🔥 FAIL: Copyright notices match canonical pattern in fonts
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 2466, but got 1800 instead [code: ascent]
  • 🔥 FAIL OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]
🔥 FAIL: Check glyphs do not have components which are themselves 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:
    • uni1EB2
    • uni1EB4
    • uni1EA8
    • uni1EAA
    • uni01C4
    • uni01C5
    • uni1EC2
    • uni1EC4
    • uni01C8
    • uni01CB and 33 more. [code: found-nested-components]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: aogonek Contours detected: 3 Expected: 2
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni01EA Contours detected: 3 Expected: 2
Glyph name: uni01EB Contours detected: 3 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: aogonek Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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?
--- 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Light' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Aring: X=633.0,Y=1798.0 (should be at ascender 1800?)
    • Aring: X=1051.0,Y=1798.0 (should be at ascender 1800?)
    • Aring: X=965.0,Y=1798.0 (should be at ascender 1800?)
    • Aring: X=719.0,Y=1798.0 (should be at ascender 1800?)
    • Aringacute: X=633.0,Y=1798.0 (should be at ascender 1800?)
    • Aringacute: X=1051.0,Y=1798.0 (should be at ascender 1800?)
    • Aringacute: X=965.0,Y=1798.0 (should be at ascender 1800?)
    • Aringacute: X=719.0,Y=1798.0 (should be at ascender 1800?)
    • Ohorn: X=1558.5,Y=1501.5 (should be at cap-height 1500?)
    • uni1EDA: X=1558.5,Y=1501.5 (should be at cap-height 1500?) and 62 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---

This test looks for outline segments which seem particularly short (less than
0.006%% of the overall path length).

This test is not run for variable fonts, as they may legitimately have short
segments. As this test is liable to generate significant numbers of false
positives, the test will pass if there are more than 100 reported short
segments.


  • WARN The following glyphs have segments which seem very short:
    • e contains a short segment B<<238.0,582.0>-<237.0,570.0>-<237.0,558.0>>
    • AE contains a short segment L<<1721.0,1195.0>--<1800.0,1195.0>>
    • AE contains a short segment L<<1800.0,313.0>--<1721.0,313.0>>
    • AEacute contains a short segment L<<1721.0,1195.0>--<1800.0,1195.0>>
    • AEacute contains a short segment L<<1800.0,313.0>--<1721.0,313.0>>
    • Eng contains a short segment B<<1078.5,-117.0>-<1104.0,-136.0>-<1104.0,-171.0>>
    • ae contains a short segment B<<971.0,582.0>-<971.0,573.0>-<971.0,563.0>>
    • aeacute contains a short segment B<<971.0,582.0>-<971.0,573.0>-<971.0,563.0>>
    • uni20B5 contains a short segment B<<812.0,1526.0>-<816.0,1526.0>-<820.0,1526.0>>
    • dollar contains a short segment L<<815.0,827.0>--<850.0,821.0>> and 53 more. [code: found-short-segments]
WARN: Do outlines contain any 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:
    • B: B<<1253.0,882.0>-<1165.0,793.0>-<1009.0,768.0>>/B<<1009.0,768.0>-<1194.0,753.0>-<1299.5,660.0>> = 13.740064292304789
    • R: L<<950.0,719.0>--<865.0,719.0>>/B<<865.0,719.0>-<997.0,691.0>-<1055.0,600.5>> = 11.976132444203333
    • Racute: L<<950.0,719.0>--<865.0,719.0>>/B<<865.0,719.0>-<997.0,691.0>-<1055.0,600.5>> = 11.976132444203333
    • Rcaron: L<<950.0,719.0>--<865.0,719.0>>/B<<865.0,719.0>-<997.0,691.0>-<1055.0,600.5>> = 11.976132444203333
    • a: L<<845.0,208.0>--<845.0,298.0>>/B<<845.0,298.0>-<805.0,131.0>-<697.0,56.0>> = 13.469778229564175
    • aacute: L<<845.0,208.0>--<845.0,298.0>>/B<<845.0,298.0>-<805.0,131.0>-<697.0,56.0>> = 13.469778229564175
    • abreve: L<<845.0,208.0>--<845.0,298.0>>/B<<845.0,298.0>-<805.0,131.0>-<697.0,56.0>> = 13.469778229564175
    • acircumflex: L<<845.0,208.0>--<845.0,298.0>>/B<<845.0,298.0>-<805.0,131.0>-<697.0,56.0>> = 13.469778229564175
    • adieresis: L<<845.0,208.0>--<845.0,298.0>>/B<<845.0,298.0>-<805.0,131.0>-<697.0,56.0>> = 13.469778229564175
    • agrave: L<<845.0,208.0>--<845.0,298.0>>/B<<845.0,298.0>-<805.0,131.0>-<697.0,56.0>> = 13.469778229564175 and 63 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • dotlessi.ss01: L<<232.0,232.0>--<239.0,1096.0>>
    • i.loclTRK.ss01: L<<232.0,232.0>--<239.0,1096.0>>
    • i.ss01: L<<232.0,232.0>--<239.0,1096.0>>
    • iacute.ss01: L<<232.0,232.0>--<239.0,1096.0>>
    • icircumflex.ss01: L<<232.0,232.0>--<239.0,1096.0>>
    • idieresis.ss01: L<<232.0,232.0>--<239.0,1096.0>>
    • igrave.ss01: L<<232.0,232.0>--<239.0,1096.0>>
    • imacron.ss01: L<<232.0,232.0>--<239.0,1096.0>>
    • k: L<<235.0,0.0>--<236.0,1500.0>>
    • l.ss01: L<<202.0,248.0>--<211.0,1500.0>> and 7 more. [code: found-semi-vertical]

[12] MontaguSlab144pt-Medium.ttf
🔥 FAIL: Checking OS/2 fsType does not impose restrictions.
--- 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 8 meaning that:
    The font may be embedded but must only be installed temporarily on other systems.

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.
--- 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: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]
🔥 FAIL: Copyright notices match canonical pattern in fonts
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 2466, but got 1800 instead [code: ascent]
  • 🔥 FAIL OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]
🔥 FAIL: Check glyphs do not have components which are themselves 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:
    • uni1EB2
    • uni1EB4
    • uni1EA8
    • uni1EAA
    • uni01C4
    • uni01C5
    • uni1EC2
    • uni1EC4
    • uni01C8
    • uni01CB and 33 more. [code: found-nested-components]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: a Contours detected: 3 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: germandbls Contours detected: 0 Expected: 1
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: 4
Glyph name: ae Contours detected: 4 Expected: 3
Glyph name: amacron Contours detected: 4 Expected: 3
Glyph name: abreve Contours detected: 4 Expected: 3
Glyph name: aogonek Contours detected: 4 Expected: 2
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni01EA Contours detected: 3 Expected: 2
Glyph name: uni01EB Contours detected: 3 Expected: 2
Glyph name: aringacute Contours detected: 6 Expected: 4 or 5
Glyph name: aeacute Contours detected: 5 Expected: 4
Glyph name: uni0201 Contours detected: 5 Expected: 4
Glyph name: uni0203 Contours detected: 4 Expected: 3
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni1EA1 Contours detected: 4 Expected: 3
Glyph name: uni1EA3 Contours detected: 4 Expected: 3
Glyph name: uni1EA5 Contours detected: 5 Expected: 4
Glyph name: uni1EA7 Contours detected: 5 Expected: 4
Glyph name: uni1EA9 Contours detected: 5 Expected: 4
Glyph name: uni1EAB Contours detected: 5 Expected: 4
Glyph name: uni1EAD Contours detected: 5 Expected: 4
Glyph name: uni1EAF Contours detected: 5 Expected: 4
Glyph name: uni1EB1 Contours detected: 5 Expected: 4
Glyph name: uni1EB3 Contours detected: 5 Expected: 4
Glyph name: uni1EB5 Contours detected: 5 Expected: 4
Glyph name: uni1EB7 Contours detected: 5 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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: a Contours detected: 3 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: ae Contours detected: 4 Expected: 3
Glyph name: aeacute Contours detected: 5 Expected: 4
Glyph name: agrave Contours detected: 4 Expected: 3
Glyph name: amacron Contours detected: 4 Expected: 3
Glyph name: aogonek Contours detected: 4 Expected: 2
Glyph name: aring Contours detected: 5 Expected: 4
Glyph name: aringacute Contours detected: 6 Expected: 4 or 5
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: atilde Contours detected: 4 Expected: 3
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni1EA1 Contours detected: 4 Expected: 3
Glyph name: uni1EA3 Contours detected: 4 Expected: 3
Glyph name: uni1EA5 Contours detected: 5 Expected: 4
Glyph name: uni1EA7 Contours detected: 5 Expected: 4
Glyph name: uni1EA9 Contours detected: 5 Expected: 4
Glyph name: uni1EAB Contours detected: 5 Expected: 4
Glyph name: uni1EAD Contours detected: 5 Expected: 4
Glyph name: uni1EAF Contours detected: 5 Expected: 4
Glyph name: uni1EB1 Contours detected: 5 Expected: 4
Glyph name: uni1EB3 Contours detected: 5 Expected: 4
Glyph name: uni1EB5 Contours detected: 5 Expected: 4
Glyph name: uni1EB7 Contours detected: 5 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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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?
--- 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Medium' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are any segments inordinately short?
--- Rationale ---

This test looks for outline segments which seem particularly short (less than
0.006%% of the overall path length).

This test is not run for variable fonts, as they may legitimately have short
segments. As this test is liable to generate significant numbers of false
positives, the test will pass if there are more than 100 reported short
segments.


  • WARN The following glyphs have segments which seem very short:
    • uni20B5 contains a short segment B<<795.0,1529.0>-<810.0,1529.0>-<825.0,1529.0>>
    • dollar contains a short segment L<<700.0,623.0>--<680.0,627.0>>
    • dollar contains a short segment B<<880.0,-29.0>-<861.0,-29.0>-<843.0,-28.0>>
    • dollar contains a short segment B<<843.0,122.0>-<846.0,122.0>-<849.0,122.0>>
    • f_f contains a short segment L<<266.0,1119.0>--<266.0,1158.0>>
    • f_f_i contains a short segment L<<266.0,1119.0>--<266.0,1138.0>>
    • f_f_i contains a short segment B<<840.0,1199.0>-<797.0,1199.0>-<764.5,1219.0>>
    • f_f_i contains a short segment B<<764.5,1219.0>-<732.0,1239.0>-<732.0,1281.0>>
    • f_f_i contains a short segment B<<732.0,1281.0>-<732.0,1328.0>-<763.5,1349.0>>
    • f_f_i contains a short segment B<<763.5,1349.0>-<795.0,1370.0>-<845.0,1372.0>> and 13 more. [code: found-short-segments]
WARN: Do outlines contain any 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:
    • B: B<<1300.0,885.0>-<1206.0,797.0>-<1044.0,772.0>>/B<<1044.0,772.0>-<1240.0,758.0>-<1354.0,666.5>> = 12.858354077504298
    • R: L<<995.0,708.0>--<910.0,708.0>>/B<<910.0,708.0>-<1058.0,686.0>-<1121.5,594.5>> = 8.455027677177437
    • Racute: L<<995.0,708.0>--<910.0,708.0>>/B<<910.0,708.0>-<1058.0,686.0>-<1121.5,594.5>> = 8.455027677177437
    • Rcaron: L<<995.0,708.0>--<910.0,708.0>>/B<<910.0,708.0>-<1058.0,686.0>-<1121.5,594.5>> = 8.455027677177437
    • a: L<<801.0,269.0>--<801.0,270.0>>/B<<801.0,270.0>-<764.0,118.0>-<666.0,47.5>> = 13.680925359319371
    • aacute: L<<801.0,269.0>--<801.0,270.0>>/B<<801.0,270.0>-<764.0,118.0>-<666.0,47.5>> = 13.680925359319371
    • abreve: L<<801.0,269.0>--<801.0,270.0>>/B<<801.0,270.0>-<764.0,118.0>-<666.0,47.5>> = 13.680925359319371
    • acircumflex: L<<801.0,269.0>--<801.0,270.0>>/B<<801.0,270.0>-<764.0,118.0>-<666.0,47.5>> = 13.680925359319371
    • adieresis: L<<801.0,269.0>--<801.0,270.0>>/B<<801.0,270.0>-<764.0,118.0>-<666.0,47.5>> = 13.680925359319371
    • agrave: L<<801.0,269.0>--<801.0,270.0>>/B<<801.0,270.0>-<764.0,118.0>-<666.0,47.5>> = 13.680925359319371 and 60 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • k: L<<208.0,0.0>--<209.0,1500.0>>
    • k: L<<487.0,1500.0>--<486.0,583.0>>
    • kgreenlandic: L<<227.0,0.0>--<228.0,1119.0>>
    • kgreenlandic: L<<506.0,383.0>--<505.0,0.0>>
    • uni0137: L<<208.0,0.0>--<209.0,1500.0>> and uni0137: L<<487.0,1500.0>--<486.0,583.0>> [code: found-semi-vertical]

[12] MontaguSlab144pt-Regular.ttf
🔥 FAIL: Checking OS/2 fsType does not impose restrictions.
--- 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 8 meaning that:
    The font may be embedded but must only be installed temporarily on other systems.

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.
--- 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: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]
🔥 FAIL: Copyright notices match canonical pattern in fonts
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 2466, but got 1800 instead [code: ascent]
  • 🔥 FAIL OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]
🔥 FAIL: Check glyphs do not have components which are themselves 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:
    • uni1EB2
    • uni1EB4
    • uni1EA8
    • uni1EAA
    • uni01C4
    • uni01C5
    • uni1EC2
    • uni1EC4
    • uni01C8
    • uni01CB and 33 more. [code: found-nested-components]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: a Contours detected: 3 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: germandbls Contours detected: 0 Expected: 1
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: 4
Glyph name: ae Contours detected: 4 Expected: 3
Glyph name: amacron Contours detected: 4 Expected: 3
Glyph name: abreve Contours detected: 4 Expected: 3
Glyph name: aogonek Contours detected: 4 Expected: 2
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni01EA Contours detected: 3 Expected: 2
Glyph name: uni01EB Contours detected: 3 Expected: 2
Glyph name: aringacute Contours detected: 6 Expected: 4 or 5
Glyph name: aeacute Contours detected: 5 Expected: 4
Glyph name: uni0201 Contours detected: 5 Expected: 4
Glyph name: uni0203 Contours detected: 4 Expected: 3
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni1EA1 Contours detected: 4 Expected: 3
Glyph name: uni1EA3 Contours detected: 4 Expected: 3
Glyph name: uni1EA5 Contours detected: 5 Expected: 4
Glyph name: uni1EA7 Contours detected: 5 Expected: 4
Glyph name: uni1EA9 Contours detected: 5 Expected: 4
Glyph name: uni1EAB Contours detected: 5 Expected: 4
Glyph name: uni1EAD Contours detected: 5 Expected: 4
Glyph name: uni1EAF Contours detected: 5 Expected: 4
Glyph name: uni1EB1 Contours detected: 5 Expected: 4
Glyph name: uni1EB3 Contours detected: 5 Expected: 4
Glyph name: uni1EB5 Contours detected: 5 Expected: 4
Glyph name: uni1EB7 Contours detected: 5 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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: a Contours detected: 3 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: ae Contours detected: 4 Expected: 3
Glyph name: aeacute Contours detected: 5 Expected: 4
Glyph name: agrave Contours detected: 4 Expected: 3
Glyph name: amacron Contours detected: 4 Expected: 3
Glyph name: aogonek Contours detected: 4 Expected: 2
Glyph name: aring Contours detected: 5 Expected: 4
Glyph name: aringacute Contours detected: 6 Expected: 4 or 5
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: atilde Contours detected: 4 Expected: 3
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni1EA1 Contours detected: 4 Expected: 3
Glyph name: uni1EA3 Contours detected: 4 Expected: 3
Glyph name: uni1EA5 Contours detected: 5 Expected: 4
Glyph name: uni1EA7 Contours detected: 5 Expected: 4
Glyph name: uni1EA9 Contours detected: 5 Expected: 4
Glyph name: uni1EAB Contours detected: 5 Expected: 4
Glyph name: uni1EAD Contours detected: 5 Expected: 4
Glyph name: uni1EAF Contours detected: 5 Expected: 4
Glyph name: uni1EB1 Contours detected: 5 Expected: 4
Glyph name: uni1EB3 Contours detected: 5 Expected: 4
Glyph name: uni1EB5 Contours detected: 5 Expected: 4
Glyph name: uni1EB7 Contours detected: 5 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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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?
--- 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EA2: X=889.0,Y=1798.0 (should be at ascender 1800?)
    • Aring: X=622.0,Y=1801.0 (should be at ascender 1800?)
    • Aring: X=1083.0,Y=1801.0 (should be at ascender 1800?)
    • Aring: X=967.0,Y=1801.0 (should be at ascender 1800?)
    • Aring: X=738.0,Y=1801.0 (should be at ascender 1800?)
    • Aringacute: X=622.0,Y=1801.0 (should be at ascender 1800?)
    • Aringacute: X=1083.0,Y=1801.0 (should be at ascender 1800?)
    • Aringacute: X=967.0,Y=1801.0 (should be at ascender 1800?)
    • Aringacute: X=738.0,Y=1801.0 (should be at ascender 1800?)
    • uni1EBA: X=810.0,Y=1798.0 (should be at ascender 1800?) and 23 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---

This test looks for outline segments which seem particularly short (less than
0.006%% of the overall path length).

This test is not run for variable fonts, as they may legitimately have short
segments. As this test is liable to generate significant numbers of false
positives, the test will pass if there are more than 100 reported short
segments.


  • WARN The following glyphs have segments which seem very short:
    • e contains a short segment L<<294.0,579.0>--<294.0,572.0>>
    • uni20B5 contains a short segment B<<803.0,1528.0>-<813.0,1528.0>-<822.0,1528.0>>
    • dollar contains a short segment L<<715.0,660.0>--<670.0,667.0>>
    • dollar contains a short segment L<<829.0,859.0>--<841.0,857.0>>
    • dollar contains a short segment B<<872.0,-28.0>-<850.0,-28.0>-<829.0,-27.0>>
    • eacute contains a short segment L<<294.0,579.0>--<294.0,572.0>>
    • ebreve contains a short segment L<<294.0,579.0>--<294.0,572.0>>
    • ecaron contains a short segment L<<294.0,579.0>--<294.0,572.0>>
    • ecircumflex contains a short segment L<<294.0,579.0>--<294.0,572.0>>
    • uni1EBF contains a short segment L<<294.0,579.0>--<294.0,572.0>> and 36 more. [code: found-short-segments]
WARN: Do outlines contain any 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:
    • B: B<<1276.5,883.5>-<1185.0,795.0>-<1027.0,770.0>>/B<<1027.0,770.0>-<1217.0,755.0>-<1327.0,663.0>> = 13.505235735067235
    • R: L<<973.0,713.0>--<889.0,713.0>>/B<<889.0,713.0>-<1028.0,688.0>-<1089.0,597.0>> = 10.195988247286765
    • Racute: L<<973.0,713.0>--<889.0,713.0>>/B<<889.0,713.0>-<1028.0,688.0>-<1089.0,597.0>> = 10.195988247286765
    • Rcaron: L<<973.0,713.0>--<889.0,713.0>>/B<<889.0,713.0>-<1028.0,688.0>-<1089.0,597.0>> = 10.195988247286765
    • a: L<<823.0,239.0>--<823.0,284.0>>/B<<823.0,284.0>-<784.0,124.0>-<681.0,51.5>> = 13.698717007084463
    • aacute: L<<823.0,239.0>--<823.0,284.0>>/B<<823.0,284.0>-<784.0,124.0>-<681.0,51.5>> = 13.698717007084463
    • abreve: L<<823.0,239.0>--<823.0,284.0>>/B<<823.0,284.0>-<784.0,124.0>-<681.0,51.5>> = 13.698717007084463
    • acircumflex: L<<823.0,239.0>--<823.0,284.0>>/B<<823.0,284.0>-<784.0,124.0>-<681.0,51.5>> = 13.698717007084463
    • adieresis: L<<823.0,239.0>--<823.0,284.0>>/B<<823.0,284.0>-<784.0,124.0>-<681.0,51.5>> = 13.698717007084463
    • agrave: L<<823.0,239.0>--<823.0,284.0>>/B<<823.0,284.0>-<784.0,124.0>-<681.0,51.5>> = 13.698717007084463 and 64 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • R: L<<939.0,273.0>--<938.0,423.0>>
    • Racute: L<<939.0,273.0>--<938.0,423.0>>
    • Rcaron: L<<939.0,273.0>--<938.0,423.0>>
    • kgreenlandic: L<<238.0,0.0>--<239.0,1108.0>>
    • kgreenlandic: L<<450.0,1108.0>--<449.0,545.0>>
    • uni0156: L<<939.0,273.0>--<938.0,423.0>>
    • uni0210: L<<939.0,273.0>--<938.0,423.0>>
    • uni0212: L<<939.0,273.0>--<938.0,423.0>>
    • uni1E5A: L<<939.0,273.0>--<938.0,423.0>> and uni1E5E: L<<939.0,273.0>--<938.0,423.0>> [code: found-semi-vertical]

[13] MontaguSlab144pt-SemiBold.ttf
🔥 FAIL: Checking OS/2 fsType does not impose restrictions.
--- 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 8 meaning that:
    The font may be embedded but must only be installed temporarily on other systems.

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.
--- 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: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]
🔥 FAIL: Copyright notices match canonical pattern in fonts
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 2466, but got 1800 instead [code: ascent]
  • 🔥 FAIL OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]
🔥 FAIL: Check glyphs do not have components which are themselves 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:
    • uni1EB2
    • uni1EB4
    • uni1EA8
    • uni1EAA
    • uni01C4
    • uni01C5
    • uni1EC2
    • uni1EC4
    • uni01C8
    • uni01CB and 33 more. [code: found-nested-components]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: a Contours detected: 3 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: germandbls Contours detected: 0 Expected: 1
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: 4
Glyph name: ae Contours detected: 4 Expected: 3
Glyph name: amacron Contours detected: 4 Expected: 3
Glyph name: abreve Contours detected: 4 Expected: 3
Glyph name: aogonek Contours detected: 4 Expected: 2
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni01EA Contours detected: 3 Expected: 2
Glyph name: uni01EB Contours detected: 3 Expected: 2
Glyph name: aringacute Contours detected: 6 Expected: 4 or 5
Glyph name: aeacute Contours detected: 5 Expected: 4
Glyph name: uni0201 Contours detected: 5 Expected: 4
Glyph name: uni0203 Contours detected: 4 Expected: 3
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni1EA1 Contours detected: 4 Expected: 3
Glyph name: uni1EA3 Contours detected: 4 Expected: 3
Glyph name: uni1EA5 Contours detected: 5 Expected: 4
Glyph name: uni1EA7 Contours detected: 5 Expected: 4
Glyph name: uni1EA9 Contours detected: 5 Expected: 4
Glyph name: uni1EAB Contours detected: 5 Expected: 4
Glyph name: uni1EAD Contours detected: 5 Expected: 4
Glyph name: uni1EAF Contours detected: 5 Expected: 4
Glyph name: uni1EB1 Contours detected: 5 Expected: 4
Glyph name: uni1EB3 Contours detected: 5 Expected: 4
Glyph name: uni1EB5 Contours detected: 5 Expected: 4
Glyph name: uni1EB7 Contours detected: 5 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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: a Contours detected: 3 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: ae Contours detected: 4 Expected: 3
Glyph name: aeacute Contours detected: 5 Expected: 4
Glyph name: agrave Contours detected: 4 Expected: 3
Glyph name: amacron Contours detected: 4 Expected: 3
Glyph name: aogonek Contours detected: 4 Expected: 2
Glyph name: aring Contours detected: 5 Expected: 4
Glyph name: aringacute Contours detected: 6 Expected: 4 or 5
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: atilde Contours detected: 4 Expected: 3
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni1EA1 Contours detected: 4 Expected: 3
Glyph name: uni1EA3 Contours detected: 4 Expected: 3
Glyph name: uni1EA5 Contours detected: 5 Expected: 4
Glyph name: uni1EA7 Contours detected: 5 Expected: 4
Glyph name: uni1EA9 Contours detected: 5 Expected: 4
Glyph name: uni1EAB Contours detected: 5 Expected: 4
Glyph name: uni1EAD Contours detected: 5 Expected: 4
Glyph name: uni1EAF Contours detected: 5 Expected: 4
Glyph name: uni1EB1 Contours detected: 5 Expected: 4
Glyph name: uni1EB3 Contours detected: 5 Expected: 4
Glyph name: uni1EB5 Contours detected: 5 Expected: 4
Glyph name: uni1EB7 Contours detected: 5 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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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?
--- 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt SemiBold' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • I: X=600.0,Y=1501.0 (should be at cap-height 1500?)
    • I: X=250.0,Y=1501.0 (should be at cap-height 1500?)
    • S: X=1155.0,Y=1501.0 (should be at cap-height 1500?)
    • S: X=1338.0,Y=1501.0 (should be at cap-height 1500?)
    • Iacute: X=600.0,Y=1501.0 (should be at cap-height 1500?)
    • Iacute: X=250.0,Y=1501.0 (should be at cap-height 1500?)
    • Ibreve: X=600.0,Y=1501.0 (should be at cap-height 1500?)
    • Ibreve: X=250.0,Y=1501.0 (should be at cap-height 1500?)
    • Icircumflex: X=600.0,Y=1501.0 (should be at cap-height 1500?)
    • Icircumflex: X=250.0,Y=1501.0 (should be at cap-height 1500?) and 52 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---

This test looks for outline segments which seem particularly short (less than
0.006%% of the overall path length).

This test is not run for variable fonts, as they may legitimately have short
segments. As this test is liable to generate significant numbers of false
positives, the test will pass if there are more than 100 reported short
segments.


  • WARN The following glyphs have segments which seem very short:
    • uni20B5 contains a short segment B<<787.0,1531.0>-<808.0,1531.0>-<827.0,1530.0>>
    • dollar contains a short segment B<<633.0,1531.0>-<660.0,1531.0>-<687.0,1529.0>>
    • dollar contains a short segment B<<887.0,-31.0>-<871.0,-31.0>-<855.0,-30.0>>
    • dollar contains a short segment B<<687.0,1352.0>-<684.0,1352.0>-<681.0,1352.0>>
    • f_f contains a short segment L<<244.0,1129.0>--<244.0,1166.0>>
    • f_f_i contains a short segment L<<244.0,1129.0>--<244.0,1142.0>>
    • f_f_i contains a short segment B<<836.0,1197.0>-<788.0,1197.0>-<751.5,1218.5>>
    • f_f_i contains a short segment B<<751.5,1218.5>-<715.0,1240.0>-<715.0,1286.0>>
    • f_f_i contains a short segment B<<715.0,1286.0>-<715.0,1336.0>-<747.5,1358.5>>
    • f_f_i contains a short segment B<<747.5,1358.5>-<780.0,1381.0>-<830.0,1384.0>> and 10 more. [code: found-short-segments]
WARN: Do outlines contain any 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:
    • B: B<<1319.5,886.0>-<1223.0,799.0>-<1059.0,774.0>>/B<<1059.0,774.0>-<1259.0,759.0>-<1376.5,668.5>> = 12.956540508774497
    • R: L<<1014.0,703.0>--<925.0,703.0>>/B<<925.0,703.0>-<1082.0,684.0>-<1148.5,592.0>> = 6.900328169277245
    • Racute: L<<1014.0,703.0>--<925.0,703.0>>/B<<925.0,703.0>-<1082.0,684.0>-<1148.5,592.0>> = 6.900328169277245
    • Rcaron: L<<1014.0,703.0>--<925.0,703.0>>/B<<925.0,703.0>-<1082.0,684.0>-<1148.5,592.0>> = 6.900328169277245
    • braceleft: B<<439.5,635.5>-<354.0,596.0>-<232.0,586.0>>/B<<232.0,586.0>-<354.0,576.0>-<439.5,537.0>> = 9.37179967900539
    • braceright: B<<465.5,635.5>-<551.0,596.0>-<673.0,586.0>>/B<<673.0,586.0>-<551.0,576.0>-<465.5,537.0>> = 9.37179967900539
    • eng: L<<511.0,1129.0>--<511.0,878.0>>/B<<511.0,878.0>-<539.0,1010.0>-<625.5,1081.5>> = 11.976132444203333
    • m: L<<506.0,1129.0>--<506.0,897.0>>/B<<506.0,897.0>-<532.0,1019.0>-<611.5,1086.0>> = 12.030596096537845
    • n: L<<511.0,1129.0>--<511.0,878.0>>/B<<511.0,878.0>-<539.0,1010.0>-<625.5,1081.5>> = 11.976132444203333
    • nacute: L<<511.0,1129.0>--<511.0,878.0>>/B<<511.0,878.0>-<539.0,1010.0>-<625.5,1081.5>> = 11.976132444203333 and 35 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • k: L<<197.0,0.0>--<198.0,1500.0>>
    • k: L<<532.0,378.0>--<531.0,0.0>>
    • kgreenlandic: L<<218.0,0.0>--<219.0,1129.0>>
    • kgreenlandic: L<<554.0,1129.0>--<553.0,614.0>>
    • uni0137: L<<197.0,0.0>--<198.0,1500.0>> and uni0137: L<<532.0,378.0>--<531.0,0.0>> [code: found-semi-vertical]

[11] MontaguSlab144pt-Thin.ttf
🔥 FAIL: Checking OS/2 fsType does not impose restrictions.
--- 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 8 meaning that:
    The font may be embedded but must only be installed temporarily on other systems.

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.
--- 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: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]
🔥 FAIL: Copyright notices match canonical pattern in fonts
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 2466, but got 1800 instead [code: ascent]
  • 🔥 FAIL OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]
🔥 FAIL: Check glyphs do not have components which are themselves 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:
    • uni1EB2
    • uni1EB4
    • uni1EA8
    • uni1EAA
    • uni01C4
    • uni01C5
    • uni1EC2
    • uni1EC4
    • uni01C8
    • uni01CB and 33 more. [code: found-nested-components]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: aogonek Contours detected: 3 Expected: 2
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni01EA Contours detected: 3 Expected: 2
Glyph name: uni01EB Contours detected: 3 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: Dcroat Contours detected: 3 Expected: 2
Glyph name: Eth Contours detected: 3 Expected: 2
Glyph name: Euro Contours detected: 0 Expected: 1 or 2
Glyph name: Lslash Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: Uogonek Contours detected: 2 Expected: 1
Glyph name: aogonek Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: eogonek Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: lslash Contours detected: 2 Expected: 1
Glyph name: ohorn Contours detected: 3 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uhorn Contours detected: 2 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
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: uni1EE1 Contours detected: 4 Expected: 3
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE9 Contours detected: 3 Expected: 2
Glyph name: uni1EEB Contours detected: 3 Expected: 2
Glyph name: uni1EED Contours detected: 3 Expected: 2
Glyph name: uni1EEF Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uogonek Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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?
--- 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Thin' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Q: X=1060.0,Y=-1.0 (should be at baseline 0?)
    • g: X=190.0,Y=-1.0 (should be at baseline 0?)
    • uni1EA9: X=866.0,Y=1802.0 (should be at ascender 1800?)
    • uni1EA9: X=732.0,Y=1801.0 (should be at ascender 1800?)
    • uni02BC: X=127.0,Y=1502.0 (should be at cap-height 1500?)
    • aring: X=438.5,Y=1501.0 (should be at cap-height 1500?)
    • aring: X=693.5,Y=1501.0 (should be at cap-height 1500?)
    • aringacute: X=438.5,Y=1501.0 (should be at cap-height 1500?)
    • aringacute: X=693.5,Y=1501.0 (should be at cap-height 1500?)
    • uni03020309: X=643.0,Y=1802.0 (should be at ascender 1800?) and 33 more. [code: found-misalignments]
WARN: Do outlines contain any 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:
    • B: B<<1220.5,879.5>-<1136.0,790.0>-<985.0,766.0>>/B<<985.0,766.0>-<1162.0,750.0>-<1261.5,656.0>> = 14.196312841436377
    • R: L<<919.0,726.0>--<829.0,726.0>>/B<<829.0,726.0>-<952.0,696.0>-<1007.5,606.0>> = 13.70696100407981
    • Racute: L<<919.0,726.0>--<829.0,726.0>>/B<<829.0,726.0>-<952.0,696.0>-<1007.5,606.0>> = 13.70696100407981
    • Rcaron: L<<919.0,726.0>--<829.0,726.0>>/B<<829.0,726.0>-<952.0,696.0>-<1007.5,606.0>> = 13.70696100407981
    • a: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322
    • aacute: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322
    • abreve: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322
    • acircumflex: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322
    • adieresis: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322
    • agrave: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322 and 61 more. [code: found-jaggy-segments]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 40 50 624 43 518 0
0% 3% 4% 49% 3% 41% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG
@vv-monsalve vv-monsalve changed the title Google Font QA report Google Font QA report - Static fonts Feb 12, 2021
@mightybart
Copy link
Collaborator

Fontbakery report

Fontbakery version: 0.7.34

[1] Family checks
WARN: Is the command `ftxvalidator` (Apple Font Tool Suite) available?
--- Rationale ---

There's no reasonable (and legal) way to run the command `ftxvalidator` of the
Apple Font Tool Suite on a non-macOS machine. I.e. on GNU+Linux or Windows etc.

If Font Bakery is not running on an OSX machine, the machine running Font
Bakery could access `ftxvalidator` on OSX, e.g. via ssh or a remote procedure
call (rpc).

There's an ssh example implementation at:
https://github.com/googlefonts/fontbakery/blob/master/prebuilt/workarounds
/ftxvalidator/ssh-implementation/ftxvalidator


  • WARN Could not find ftxvalidator.

[5] MontaguSlab14pt-Bold.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Cdotaccent: X=625.0,Y=1798.0 (should be at ascender 1800?)
    • Cdotaccent: X=1113.0,Y=1798.0 (should be at ascender 1800?)
    • Edotaccent: X=583.0,Y=1798.0 (should be at ascender 1800?)
    • Edotaccent: X=1071.0,Y=1798.0 (should be at ascender 1800?)
    • Gdotaccent: X=605.0,Y=1798.0 (should be at ascender 1800?)
    • Gdotaccent: X=1093.0,Y=1798.0 (should be at ascender 1800?)
    • Idotaccent: X=204.0,Y=1798.0 (should be at ascender 1800?)
    • Idotaccent: X=692.0,Y=1798.0 (should be at ascender 1800?)
    • uni1E44: X=684.0,Y=1798.0 (should be at ascender 1800?)
    • uni1E44: X=1172.0,Y=1798.0 (should be at ascender 1800?) and 24 more. [code: found-misalignments]
WARN: Do outlines contain any 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:
    • braceleft: B<<497.5,678.0>-<416.0,641.0>-<298.0,630.0>>/B<<298.0,630.0>-<416.0,620.0>-<497.5,582.5>> = 10.169740999848386
    • braceright: B<<468.5,582.5>-<550.0,620.0>-<668.0,630.0>>/B<<668.0,630.0>-<550.0,641.0>-<468.5,678.0>> = 10.169740999848386
    • eng: L<<587.0,1160.0>--<587.0,911.0>>/B<<587.0,911.0>-<615.0,1040.0>-<702.0,1113.5>> = 12.246332859680393
    • m: L<<581.0,1160.0>--<581.0,900.0>>/B<<581.0,900.0>-<605.0,1034.0>-<687.5,1110.0>> = 10.154266580200266
    • n: L<<587.0,1160.0>--<587.0,911.0>>/B<<587.0,911.0>-<615.0,1040.0>-<702.0,1113.5>> = 12.246332859680393
    • nacute: L<<587.0,1160.0>--<587.0,911.0>>/B<<587.0,911.0>-<615.0,1040.0>-<702.0,1113.5>> = 12.246332859680393
    • ncaron: L<<587.0,1160.0>--<587.0,911.0>>/B<<587.0,911.0>-<615.0,1040.0>-<702.0,1113.5>> = 12.246332859680393
    • ntilde: L<<587.0,1160.0>--<587.0,911.0>>/B<<587.0,911.0>-<615.0,1040.0>-<702.0,1113.5>> = 12.246332859680393
    • u: L<<962.0,0.0>--<962.0,250.0>>/B<<962.0,250.0>-<934.0,121.0>-<847.0,47.5>> = 12.246332859680393
    • uacute: L<<962.0,0.0>--<962.0,250.0>>/B<<962.0,250.0>-<934.0,121.0>-<847.0,47.5>> = 12.246332859680393 and 25 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • k: L<<222.0,210.0>--<223.0,1370.0>>
    • k: L<<623.0,1580.0>--<622.0,644.0>>
    • uni0137: L<<222.0,210.0>--<223.0,1370.0>> and uni0137: L<<623.0,1580.0>--<622.0,644.0>> [code: found-semi-vertical]

[6] MontaguSlab14pt-ExtraLight.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 14pt ExtraLight' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EA2: X=1024.5,Y=1801.5 (should be at ascender 1800?)
    • Atilde: X=864.0,Y=1802.0 (should be at ascender 1800?)
    • uni1EBA: X=979.5,Y=1801.5 (should be at ascender 1800?)
    • uni1EBC: X=818.0,Y=1802.0 (should be at ascender 1800?)
    • uni1EC8: X=534.5,Y=1801.5 (should be at ascender 1800?)
    • Itilde: X=374.0,Y=1802.0 (should be at ascender 1800?)
    • Ntilde: X=924.0,Y=1802.0 (should be at ascender 1800?)
    • uni1ECE: X=1082.5,Y=1801.5 (should be at ascender 1800?)
    • uni1EDE: X=1082.5,Y=1801.5 (should be at ascender 1800?)
    • uni1EE0: X=921.0,Y=1802.0 (should be at ascender 1800?) and 88 more. [code: found-misalignments]
WARN: Do outlines contain any 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:
    • braceleft: B<<452.0,656.5>-<375.0,586.0>-<248.0,578.0>>/B<<248.0,578.0>-<375.0,570.0>-<452.0,499.5>> = 7.2088410783514005
    • braceright: B<<477.0,499.5>-<554.0,570.0>-<681.0,578.0>>/B<<681.0,578.0>-<554.0,586.0>-<476.5,656.5>> = 7.2088410783514005
    • eth: B<<894.5,1055.5>-<1004.0,999.0>-<1067.0,882.0>>/B<<1067.0,882.0>-<1032.0,1011.0>-<972.5,1119.0>> = 13.120828331480157
    • nine.lf: B<<1111.5,549.0>-<1148.0,729.0>-<1129.0,987.0>>/B<<1129.0,987.0>-<1113.0,796.0>-<987.5,679.0>> = 9.0003200404022
    • nine: B<<1111.5,549.0>-<1148.0,729.0>-<1129.0,987.0>>/B<<1129.0,987.0>-<1113.0,796.0>-<987.5,679.0>> = 9.0003200404022
    • six.dnom: B<<188.5,523.5>-<154.0,437.0>-<162.0,300.0>>/B<<162.0,300.0>-<174.0,366.0>-<236.5,416.5>> = 13.646790326027142
    • six.lf: B<<254.0,951.0>-<218.0,771.0>-<237.0,513.0>>/B<<237.0,513.0>-<253.0,704.0>-<378.0,821.0>> = 9.0003200404022
    • six.numr: B<<188.5,1291.5>-<154.0,1205.0>-<162.0,1068.0>>/B<<162.0,1068.0>-<174.0,1134.0>-<236.5,1184.5>> = 13.646790326027142
    • six: B<<254.0,951.0>-<218.0,771.0>-<237.0,513.0>>/B<<237.0,513.0>-<253.0,704.0>-<378.0,821.0>> = 9.0003200404022
    • uni2076: B<<188.5,1291.5>-<154.0,1205.0>-<162.0,1068.0>>/B<<162.0,1068.0>-<174.0,1134.0>-<236.5,1184.5>> = 13.646790326027142 and uni2086: B<<188.5,103.5>-<154.0,17.0>-<162.0,-120.0>>/B<<162.0,-120.0>-<174.0,-54.0>-<236.5,-3.5>> = 13.646790326027142 [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • dotlessi.ss01: L<<263.0,217.0>--<266.0,1044.0>>
    • i.loclTRK.ss01: L<<263.0,217.0>--<266.0,1044.0>>
    • i.ss01: L<<263.0,217.0>--<266.0,1044.0>>
    • iacute.ss01: L<<263.0,217.0>--<266.0,1044.0>>
    • icircumflex.ss01: L<<263.0,217.0>--<266.0,1044.0>>
    • idieresis.ss01: L<<263.0,217.0>--<266.0,1044.0>>
    • igrave.ss01: L<<263.0,217.0>--<266.0,1044.0>>
    • imacron.ss01: L<<263.0,217.0>--<266.0,1044.0>>
    • l.ss01: L<<260.0,225.0>--<263.0,1498.0>>
    • lacute.ss01: L<<260.0,225.0>--<263.0,1498.0>> and 12 more. [code: found-semi-vertical]

[6] MontaguSlab14pt-Light.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: perthousand Contours detected: 5 Expected: 6 or 7
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: percent Contours detected: 3 Expected: 5
Glyph name: perthousand Contours detected: 5 Expected: 6 or 7
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 14pt Light' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EA2: X=911.0,Y=1798.0 (should be at ascender 1800?)
    • uni1EA2: X=1045.0,Y=1798.5 (should be at ascender 1800?)
    • Atilde: X=782.0,Y=1800.5 (should be at ascender 1800?)
    • uni1EBA: X=860.0,Y=1798.0 (should be at ascender 1800?)
    • uni1EBA: X=993.0,Y=1798.5 (should be at ascender 1800?)
    • uni1EBC: X=731.0,Y=1800.5 (should be at ascender 1800?)
    • uni1EC8: X=425.0,Y=1798.0 (should be at ascender 1800?)
    • uni1EC8: X=559.0,Y=1798.5 (should be at ascender 1800?)
    • Itilde: X=296.0,Y=1800.5 (should be at ascender 1800?)
    • Ntilde: X=835.0,Y=1800.5 (should be at ascender 1800?) and 61 more. [code: found-misalignments]
WARN: Do outlines contain any 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:
    • braceleft: B<<470.0,667.0>-<390.0,595.0>-<255.0,586.0>>/B<<255.0,586.0>-<390.0,577.0>-<470.0,505.0>> = 7.628149668580618
    • braceright: B<<464.5,505.0>-<544.0,577.0>-<679.0,586.0>>/B<<679.0,586.0>-<544.0,595.0>-<464.0,667.0>> = 7.628149668580618
    • nine.lf: B<<1089.0,543.0>-<1123.0,712.0>-<1106.0,952.0>>/B<<1106.0,952.0>-<1085.0,776.0>-<965.5,667.5>> = 10.855943400436837
    • nine: B<<1089.0,543.0>-<1123.0,712.0>-<1106.0,952.0>>/B<<1106.0,952.0>-<1085.0,776.0>-<965.5,667.5>> = 10.855943400436837
    • six.lf: B<<296.5,957.0>-<262.0,788.0>-<279.0,548.0>>/B<<279.0,548.0>-<300.0,724.0>-<420.0,832.5>> = 10.855943400436837 and six: B<<296.5,957.0>-<262.0,788.0>-<279.0,548.0>>/B<<279.0,548.0>-<300.0,724.0>-<420.0,832.5>> = 10.855943400436837 [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • dotlessi.ss01: L<<260.0,237.0>--<266.0,1029.0>>
    • i.loclTRK.ss01: L<<260.0,237.0>--<266.0,1029.0>>
    • i.ss01: L<<260.0,237.0>--<266.0,1029.0>>
    • iacute.ss01: L<<260.0,237.0>--<266.0,1029.0>>
    • icircumflex.ss01: L<<260.0,237.0>--<266.0,1029.0>>
    • idieresis.ss01: L<<260.0,237.0>--<266.0,1029.0>>
    • igrave.ss01: L<<260.0,237.0>--<266.0,1029.0>>
    • imacron.ss01: L<<260.0,237.0>--<266.0,1029.0>>
    • k: L<<273.0,87.0>--<274.0,1479.0>>
    • l.ss01: L<<249.0,253.0>--<257.0,1479.0>> and 6 more. [code: found-semi-vertical]

[7] MontaguSlab14pt-Medium.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: perthousand Contours detected: 4 Expected: 6 or 7
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: percent Contours detected: 3 Expected: 5
Glyph name: perthousand Contours detected: 4 Expected: 6 or 7
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 14pt Medium' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni01EA: X=1184.0,Y=-2.0 (should be at baseline 0?)
    • Q: X=1191.0,Y=2.0 (should be at baseline 0?)
    • uni1EA9: X=830.0,Y=1798.0 (should be at ascender 1800?)
    • uni1EA3: X=531.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EC3: X=828.0,Y=1798.0 (should be at ascender 1800?)
    • uni1EBB: X=529.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EC9: X=253.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1ED5: X=896.0,Y=1798.0 (should be at ascender 1800?)
    • uni1ECF: X=597.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EDF: X=597.0,Y=1501.0 (should be at cap-height 1500?) and 9 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---

This test looks for outline segments which seem particularly short (less than
0.006%% of the overall path length).

This test is not run for variable fonts, as they may legitimately have short
segments. As this test is liable to generate significant numbers of false
positives, the test will pass if there are more than 100 reported short
segments.


  • WARN The following glyphs have segments which seem very short:
    • Aogonek contains a short segment B<<1520.0,-298.0>-<1547.0,-298.0>-<1565.5,-291.5>>
    • Aogonek contains a short segment B<<1565.5,-291.5>-<1584.0,-285.0>-<1606.0,-272.0>>
    • Ccedilla contains a short segment B<<933.0,-259.0>-<933.0,-232.0>-<913.5,-219.0>>
    • Ccedilla contains a short segment B<<913.5,-219.0>-<894.0,-206.0>-<864.0,-206.0>>
    • Ccedilla contains a short segment L<<890.0,-105.0>--<905.0,-105.0>>
    • Eogonek contains a short segment B<<1272.0,-207.0>-<1272.0,-251.0>-<1299.5,-274.5>>
    • Eogonek contains a short segment B<<1299.5,-274.5>-<1327.0,-298.0>-<1370.0,-298.0>>
    • Eogonek contains a short segment B<<1370.0,-298.0>-<1396.0,-298.0>-<1415.0,-291.5>>
    • Eogonek contains a short segment B<<1415.0,-291.5>-<1434.0,-285.0>-<1455.0,-272.0>>
    • Scedilla contains a short segment B<<910.0,-29.0>-<895.0,-29.0>-<880.0,-29.0>> and 69 more. [code: found-short-segments]
WARN: Do outlines contain any 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:
    • braceleft: B<<457.0,653.0>-<383.0,618.0>-<278.0,609.0>>/B<<278.0,609.0>-<383.0,601.0>-<457.0,565.5>> = 9.25606745963407
    • braceright: B<<494.5,565.5>-<569.0,601.0>-<673.0,609.0>>/B<<673.0,609.0>-<569.0,618.0>-<494.5,653.0>> = 9.344671902099696
    • dollar: B<<1021.5,563.5>-<951.0,588.0>-<866.0,600.0>>/L<<866.0,600.0>--<866.0,600.0>> = 8.035710710534744
    • m: L<<504.0,1139.0>--<504.0,897.0>>/B<<504.0,897.0>-<536.0,1025.0>-<621.5,1093.5>> = 14.036243467926484
    • u: L<<995.0,0.0>--<995.0,279.0>>/B<<995.0,279.0>-<959.0,131.0>-<860.5,54.0>> = 13.67130713219584
    • uacute: L<<995.0,0.0>--<995.0,279.0>>/B<<995.0,279.0>-<959.0,131.0>-<860.5,54.0>> = 13.67130713219584
    • ubreve: L<<995.0,0.0>--<995.0,279.0>>/B<<995.0,279.0>-<959.0,131.0>-<860.5,54.0>> = 13.67130713219584
    • ucircumflex: L<<995.0,0.0>--<995.0,279.0>>/B<<995.0,279.0>-<959.0,131.0>-<860.5,54.0>> = 13.67130713219584
    • udieresis: L<<995.0,0.0>--<995.0,279.0>>/B<<995.0,279.0>-<959.0,131.0>-<860.5,54.0>> = 13.67130713219584
    • ugrave: L<<995.0,0.0>--<995.0,279.0>>/B<<995.0,279.0>-<959.0,131.0>-<860.5,54.0>> = 13.67130713219584 and 16 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • k: L<<246.0,152.0>--<247.0,1421.0>>
    • k: L<<525.0,1573.0>--<524.0,578.0>>
    • uni0137: L<<246.0,152.0>--<247.0,1421.0>> and uni0137: L<<525.0,1573.0>--<524.0,578.0>> [code: found-semi-vertical]

[5] MontaguSlab14pt-Regular.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Abreve: X=720.5,Y=1800.5 (should be at ascender 1800?)
    • Abreve: X=1034.0,Y=1800.5 (should be at ascender 1800?)
    • uni1EAE: X=720.5,Y=1800.5 (should be at ascender 1800?)
    • uni1EAE: X=1034.0,Y=1800.5 (should be at ascender 1800?)
    • uni1EB6: X=720.5,Y=1800.5 (should be at ascender 1800?)
    • uni1EB6: X=1034.0,Y=1800.5 (should be at ascender 1800?)
    • uni1EB0: X=720.5,Y=1800.5 (should be at ascender 1800?)
    • uni1EB0: X=1034.0,Y=1800.5 (should be at ascender 1800?)
    • uni1EB2: X=720.5,Y=1800.5 (should be at ascender 1800?)
    • uni1EB2: X=1034.0,Y=1800.5 (should be at ascender 1800?) and 47 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---

This test looks for outline segments which seem particularly short (less than
0.006%% of the overall path length).

This test is not run for variable fonts, as they may legitimately have short
segments. As this test is liable to generate significant numbers of false
positives, the test will pass if there are more than 100 reported short
segments.


  • WARN The following glyphs have segments which seem very short:
    • Ccedilla contains a short segment B<<952.0,-263.0>-<952.0,-231.0>-<929.0,-215.5>>
    • Ccedilla contains a short segment B<<929.0,-215.5>-<906.0,-200.0>-<871.0,-200.0>>
    • Ccedilla contains a short segment L<<882.0,-116.0>--<902.0,-116.0>>
    • Eogonek contains a short segment B<<1345.0,-315.0>-<1375.0,-315.0>-<1396.0,-307.0>>
    • Eogonek contains a short segment B<<1396.0,-307.0>-<1417.0,-299.0>-<1441.0,-283.0>>
    • Scedilla contains a short segment B<<898.0,-28.0>-<881.0,-28.0>-<865.0,-27.0>>
    • Scedilla contains a short segment L<<852.0,-116.0>--<872.0,-116.0>>
    • Scedilla contains a short segment B<<897.5,-318.5>-<922.0,-298.0>-<922.0,-263.0>>
    • Scedilla contains a short segment B<<922.0,-263.0>-<922.0,-231.0>-<899.5,-215.5>>
    • Scedilla contains a short segment B<<899.5,-215.5>-<877.0,-200.0>-<842.0,-200.0>> and 63 more. [code: found-short-segments]
WARN: Do outlines contain any 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:
    • braceleft: B<<497.0,683.0>-<413.0,609.0>-<267.0,598.0>>/B<<267.0,598.0>-<413.0,587.0>-<497.0,513.0>> = 8.617329833049736
    • braceright: B<<446.0,513.0>-<530.0,587.0>-<676.0,598.0>>/B<<676.0,598.0>-<530.0,609.0>-<446.0,683.0>> = 8.617329833049736
    • nine.lf: B<<1031.0,439.5>-<1092.0,617.0>-<1073.0,899.0>>/B<<1073.0,899.0>-<1045.0,746.0>-<933.0,651.0>> = 14.225269954002863
    • nine: B<<1031.0,439.5>-<1092.0,617.0>-<1073.0,899.0>>/B<<1073.0,899.0>-<1045.0,746.0>-<933.0,651.0>> = 14.225269954002863
    • percent: B<<1093.0,1027.0>-<1062.0,1037.0>-<1027.0,1039.0>>/B<<1027.0,1039.0>-<1061.0,1034.0>-<1091.0,1025.0>> = 5.095398200849013
    • percent: B<<864.0,474.0>-<894.0,463.0>-<930.0,461.0>>/B<<930.0,461.0>-<896.0,466.0>-<865.0,476.0>> = 5.186056004168259
    • perthousand: B<<1093.0,1027.0>-<1062.0,1037.0>-<1027.0,1039.0>>/B<<1027.0,1039.0>-<1061.0,1034.0>-<1091.0,1025.0>> = 5.095398200849013
    • perthousand: B<<864.0,474.0>-<889.0,465.0>-<918.0,462.0>>/B<<918.0,462.0>-<890.0,466.0>-<864.0,474.0>> = 2.2239612403853224
    • perthousand: B<<918.0,462.0>-<890.0,466.0>-<864.0,474.0>>/B<<864.0,474.0>-<889.0,465.0>-<918.0,462.0>> = 2.6961473854724685
    • six.lf: B<<383.0,1060.5>-<322.0,883.0>-<341.0,601.0>>/B<<341.0,601.0>-<369.0,754.0>-<481.0,849.0>> = 14.225269954002863 and 22 more. [code: found-jaggy-segments]

[6] MontaguSlab14pt-SemiBold.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: perthousand Contours detected: 5 Expected: 6 or 7
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: percent Contours detected: 3 Expected: 5
Glyph name: perthousand Contours detected: 5 Expected: 6 or 7
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 14pt SemiBold' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • parenleft: X=384.5,Y=1501.0 (should be at cap-height 1500?)
    • parenright: X=359.0,Y=1501.0 (should be at cap-height 1500?)
    • uni0328: X=198.0,Y=-0.5 (should be at baseline 0?) and ogonek: X=198.0,Y=-0.5 (should be at baseline 0?) [code: found-misalignments]
WARN: Do outlines contain any 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:
    • braceleft: B<<476.0,664.0>-<398.0,628.0>-<287.0,619.0>>/B<<287.0,619.0>-<398.0,609.0>-<476.0,573.0>> = 9.783348251038905
    • braceright: B<<482.0,573.0>-<560.0,609.0>-<671.0,619.0>>/B<<671.0,619.0>-<560.0,628.0>-<482.0,664.0>> = 9.783348251038905
    • eng: L<<545.0,1149.0>--<545.0,888.0>>/B<<545.0,888.0>-<577.0,1025.0>-<670.0,1099.5>> = 13.147242375269487
    • m: L<<540.0,1149.0>--<540.0,899.0>>/B<<540.0,899.0>-<568.0,1029.0>-<652.5,1101.0>> = 12.154941697222226
    • n: L<<545.0,1149.0>--<545.0,888.0>>/B<<545.0,888.0>-<577.0,1025.0>-<670.0,1099.5>> = 13.147242375269487
    • nacute: L<<545.0,1149.0>--<545.0,888.0>>/B<<545.0,888.0>-<577.0,1025.0>-<670.0,1099.5>> = 13.147242375269487
    • ncaron: L<<545.0,1149.0>--<545.0,888.0>>/B<<545.0,888.0>-<577.0,1025.0>-<670.0,1099.5>> = 13.147242375269487
    • ntilde: L<<545.0,1149.0>--<545.0,888.0>>/B<<545.0,888.0>-<577.0,1025.0>-<670.0,1099.5>> = 13.147242375269487
    • u: L<<980.0,0.0>--<980.0,266.0>>/B<<980.0,266.0>-<948.0,127.0>-<855.0,51.5>> = 12.964508660419233
    • uacute: L<<980.0,0.0>--<980.0,266.0>>/B<<980.0,266.0>-<948.0,127.0>-<855.0,51.5>> = 12.964508660419233 and 25 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • k: L<<235.0,179.0>--<236.0,1398.0>> and uni0137: L<<235.0,179.0>--<236.0,1398.0>> [code: found-semi-vertical]

[5] MontaguSlab14pt-Thin.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 14pt Thin' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni01EA: X=1116.0,Y=-1.0 (should be at baseline 0?)
    • Q: X=1086.0,Y=-2.0 (should be at baseline 0?)
    • Uogonek: X=1103.0,Y=-1.0 (should be at baseline 0?)
    • eogonek: X=785.0,Y=-1.0 (should be at baseline 0?)
    • u: X=72.0,Y=1102.0 (should be at x-height 1100?)
    • u: X=306.0,Y=1102.0 (should be at x-height 1100?)
    • uni2082: X=597.0,Y=-1.5 (should be at baseline 0?)
    • uni2085: X=576.0,Y=-2.0 (should be at baseline 0?)
    • uni2086: X=381.0,Y=1.0 (should be at baseline 0?)
    • period: X=142.0,Y=1.5 (should be at baseline 0?) and 20 more. [code: found-misalignments]
WARN: Do outlines contain any 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:
    • braceleft: B<<434.0,646.0>-<359.0,577.0>-<240.0,570.0>>/B<<240.0,570.0>-<359.0,563.0>-<434.0,494.0>> = 6.732921326859609
    • braceright: B<<489.5,494.0>-<564.0,563.0>-<683.0,570.0>>/B<<683.0,570.0>-<564.0,577.0>-<489.5,646.0>> = 6.732921326859609
    • eth: B<<909.5,1055.5>-<1022.0,995.0>-<1085.0,873.0>>/B<<1085.0,873.0>-<1049.0,1012.0>-<983.0,1126.0>> = 12.791384733230128
    • nine.dnom: B<<583.5,204.0>-<620.0,296.0>-<611.0,442.0>>/B<<611.0,442.0>-<601.0,371.0>-<536.5,316.0>> = 11.544561124029443
    • nine.lf: B<<1134.0,554.5>-<1172.0,746.0>-<1151.0,1023.0>>/B<<1151.0,1023.0>-<1140.0,816.0>-<1009.5,690.0>> = 7.377272242458543
    • nine.numr: B<<583.5,984.0>-<620.0,1076.0>-<611.0,1222.0>>/B<<611.0,1222.0>-<601.0,1151.0>-<536.5,1096.0>> = 11.544561124029443
    • nine: B<<1134.0,554.5>-<1172.0,746.0>-<1151.0,1023.0>>/B<<1151.0,1023.0>-<1140.0,816.0>-<1009.5,690.0>> = 7.377272242458543
    • six.dnom: B<<160.0,516.5>-<124.0,425.0>-<132.0,278.0>>/B<<132.0,278.0>-<142.0,349.0>-<206.5,404.0>> = 11.132157833560836
    • six.lf: B<<212.0,945.5>-<174.0,754.0>-<195.0,477.0>>/B<<195.0,477.0>-<206.0,684.0>-<336.5,810.0>> = 7.377272242458543
    • six.numr: B<<160.0,1296.5>-<124.0,1205.0>-<132.0,1058.0>>/B<<132.0,1058.0>-<142.0,1129.0>-<206.5,1184.0>> = 11.132157833560836 and 5 more. [code: found-jaggy-segments]

[5] MontaguSlab144pt-Bold.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Cdotaccent: X=619.0,Y=1798.0 (should be at ascender 1800?)
    • Cdotaccent: X=1051.0,Y=1798.0 (should be at ascender 1800?)
    • Edotaccent: X=572.0,Y=1798.0 (should be at ascender 1800?)
    • Edotaccent: X=1004.0,Y=1798.0 (should be at ascender 1800?)
    • Gdotaccent: X=631.0,Y=1798.0 (should be at ascender 1800?)
    • Gdotaccent: X=1063.0,Y=1798.0 (should be at ascender 1800?)
    • Idotaccent: X=238.0,Y=1798.0 (should be at ascender 1800?)
    • Idotaccent: X=670.0,Y=1798.0 (should be at ascender 1800?)
    • uni1E44: X=669.0,Y=1798.0 (should be at ascender 1800?)
    • uni1E44: X=1101.0,Y=1798.0 (should be at ascender 1800?) and 27 more. [code: found-misalignments]
WARN: Do outlines contain any 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:
    • B: B<<1351.5,896.5>-<1256.0,810.0>-<1095.0,786.0>>/B<<1095.0,786.0>-<1298.0,770.0>-<1414.5,682.5>> = 12.98515885733826
    • R: L<<1042.0,708.0>--<947.0,708.0>>/B<<947.0,708.0>-<1100.0,697.0>-<1176.0,619.0>> = 4.112228844718457
    • Racute: L<<1042.0,708.0>--<947.0,708.0>>/B<<947.0,708.0>-<1100.0,697.0>-<1176.0,619.0>> = 4.112228844718457
    • Rcaron: L<<1042.0,708.0>--<947.0,708.0>>/B<<947.0,708.0>-<1100.0,697.0>-<1176.0,619.0>> = 4.112228844718457
    • braceleft: B<<461.5,643.0>-<371.0,602.0>-<240.0,590.0>>/B<<240.0,590.0>-<371.0,579.0>-<461.5,537.5>> = 10.033697761121097
    • braceright: B<<460.5,537.5>-<551.0,579.0>-<682.0,590.0>>/B<<682.0,590.0>-<551.0,602.0>-<460.5,643.0>> = 10.033697761121097
    • eng: L<<558.0,1140.0>--<558.0,901.0>>/B<<558.0,901.0>-<582.0,1025.0>-<663.0,1095.5>> = 10.954062643398332
    • m: L<<546.0,1140.0>--<546.0,902.0>>/B<<546.0,902.0>-<570.0,1025.0>-<649.0,1095.5>> = 11.04094018032372
    • n: L<<558.0,1140.0>--<558.0,901.0>>/B<<558.0,901.0>-<582.0,1025.0>-<663.0,1095.5>> = 10.954062643398332
    • nacute: L<<558.0,1140.0>--<558.0,901.0>>/B<<558.0,901.0>-<582.0,1025.0>-<663.0,1095.5>> = 10.954062643398332 and 35 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • k: L<<204.0,192.0>--<205.0,1308.0>>
    • k: L<<34.0,0.0>--<35.0,192.0>>
    • k: L<<605.0,1500.0>--<604.0,650.0>>
    • uni0137: L<<204.0,192.0>--<205.0,1308.0>>
    • uni0137: L<<34.0,0.0>--<35.0,192.0>> and uni0137: L<<605.0,1500.0>--<604.0,650.0>> [code: found-semi-vertical]

[6] MontaguSlab144pt-ExtraLight.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt ExtraLight' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • A: X=798.0,Y=1501.0 (should be at cap-height 1500?)
    • A: X=876.0,Y=1501.0 (should be at cap-height 1500?)
    • Aacute: X=798.0,Y=1501.0 (should be at cap-height 1500?)
    • Aacute: X=876.0,Y=1501.0 (should be at cap-height 1500?)
    • Abreve: X=798.0,Y=1501.0 (should be at cap-height 1500?)
    • Abreve: X=876.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EAE: X=798.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EAE: X=876.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EB6: X=798.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EB6: X=876.0,Y=1501.0 (should be at cap-height 1500?) and 71 more. [code: found-misalignments]
WARN: Do outlines contain any 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:
    • B: B<<1237.0,881.0>-<1150.0,792.0>-<995.0,769.0>>/B<<995.0,769.0>-<1177.0,754.0>-<1280.5,661.0>> = 13.151896221608181
    • R: L<<935.0,724.0>--<849.0,724.0>>/B<<849.0,724.0>-<974.0,695.0>-<1031.0,606.5>> = 13.0615510833281
    • Racute: L<<935.0,724.0>--<849.0,724.0>>/B<<849.0,724.0>-<974.0,695.0>-<1031.0,606.5>> = 13.0615510833281
    • Rcaron: L<<935.0,724.0>--<849.0,724.0>>/B<<849.0,724.0>-<974.0,695.0>-<1031.0,606.5>> = 13.0615510833281
    • a: L<<862.0,187.0>--<862.0,308.0>>/B<<862.0,308.0>-<820.0,136.0>-<708.5,59.5>> = 13.722297133133548
    • aacute: L<<862.0,187.0>--<862.0,308.0>>/B<<862.0,308.0>-<820.0,136.0>-<708.5,59.5>> = 13.722297133133548
    • abreve: L<<862.0,187.0>--<862.0,308.0>>/B<<862.0,308.0>-<820.0,136.0>-<708.5,59.5>> = 13.722297133133548
    • acircumflex: L<<862.0,187.0>--<862.0,308.0>>/B<<862.0,308.0>-<820.0,136.0>-<708.5,59.5>> = 13.722297133133548
    • adieresis: L<<862.0,187.0>--<862.0,308.0>>/B<<862.0,308.0>-<820.0,136.0>-<708.5,59.5>> = 13.722297133133548
    • agrave: L<<862.0,187.0>--<862.0,308.0>>/B<<862.0,308.0>-<820.0,136.0>-<708.5,59.5>> = 13.722297133133548 and 71 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • R: L<<997.0,214.0>--<996.0,392.0>>
    • Racute: L<<997.0,214.0>--<996.0,392.0>>
    • Rcaron: L<<997.0,214.0>--<996.0,392.0>>
    • dotlessi.ss01: L<<236.0,215.0>--<239.0,1031.0>>
    • i.loclTRK.ss01: L<<236.0,215.0>--<239.0,1031.0>>
    • i.ss01: L<<236.0,215.0>--<239.0,1031.0>>
    • iacute.ss01: L<<236.0,215.0>--<239.0,1031.0>>
    • icircumflex.ss01: L<<236.0,215.0>--<239.0,1031.0>>
    • idieresis.ss01: L<<236.0,215.0>--<239.0,1031.0>>
    • igrave.ss01: L<<236.0,215.0>--<239.0,1031.0>> and 20 more. [code: found-semi-vertical]

[5] MontaguSlab144pt-Light.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: perthousand Contours detected: 5 Expected: 6 or 7
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: percent Contours detected: 3 Expected: 5
Glyph name: perthousand Contours detected: 5 Expected: 6 or 7
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Light' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Do outlines contain any 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:
    • B: B<<1254.5,883.5>-<1166.0,795.0>-<1010.0,771.0>>/B<<1010.0,771.0>-<1196.0,756.0>-<1301.0,664.0>> = 13.35681158121582
    • R: L<<952.0,721.0>--<869.0,721.0>>/B<<869.0,721.0>-<996.0,695.0>-<1054.5,607.5>> = 11.569972047901999
    • Racute: L<<952.0,721.0>--<869.0,721.0>>/B<<869.0,721.0>-<996.0,695.0>-<1054.5,607.5>> = 11.569972047901999
    • Rcaron: L<<952.0,721.0>--<869.0,721.0>>/B<<869.0,721.0>-<996.0,695.0>-<1054.5,607.5>> = 11.569972047901999
    • a: L<<849.0,208.0>--<849.0,298.0>>/B<<849.0,298.0>-<808.0,131.0>-<700.0,56.0>> = 13.793808612176546
    • aacute: L<<849.0,208.0>--<849.0,298.0>>/B<<849.0,298.0>-<808.0,131.0>-<700.0,56.0>> = 13.793808612176546
    • abreve: L<<849.0,208.0>--<849.0,298.0>>/B<<849.0,298.0>-<808.0,131.0>-<700.0,56.0>> = 13.793808612176546
    • acircumflex: L<<849.0,208.0>--<849.0,298.0>>/B<<849.0,298.0>-<808.0,131.0>-<700.0,56.0>> = 13.793808612176546
    • adieresis: L<<849.0,208.0>--<849.0,298.0>>/B<<849.0,298.0>-<808.0,131.0>-<700.0,56.0>> = 13.793808612176546
    • agrave: L<<849.0,208.0>--<849.0,298.0>>/B<<849.0,298.0>-<808.0,131.0>-<700.0,56.0>> = 13.793808612176546 and 63 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • dotlessi.ss01: L<<231.0,232.0>--<236.0,1018.0>>
    • i.loclTRK.ss01: L<<231.0,232.0>--<236.0,1018.0>>
    • i.ss01: L<<231.0,232.0>--<236.0,1018.0>>
    • iacute.ss01: L<<231.0,232.0>--<236.0,1018.0>>
    • icircumflex.ss01: L<<231.0,232.0>--<236.0,1018.0>>
    • idieresis.ss01: L<<231.0,232.0>--<236.0,1018.0>>
    • igrave.ss01: L<<231.0,232.0>--<236.0,1018.0>>
    • imacron.ss01: L<<231.0,232.0>--<236.0,1018.0>>
    • l.ss01: L<<206.0,248.0>--<214.0,1422.0>>
    • lacute.ss01: L<<206.0,248.0>--<214.0,1422.0>> and 5 more. [code: found-semi-vertical]

[7] MontaguSlab144pt-Medium.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: perthousand Contours detected: 4 Expected: 6 or 7
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: percent Contours detected: 3 Expected: 5
Glyph name: perthousand Contours detected: 4 Expected: 6 or 7
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Medium' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Acircumflex: X=856.0,Y=1801.0 (should be at ascender 1800?)
    • uni1EA4: X=856.0,Y=1801.0 (should be at ascender 1800?)
    • uni1EAC: X=856.0,Y=1801.0 (should be at ascender 1800?)
    • uni1EA6: X=856.0,Y=1801.0 (should be at ascender 1800?)
    • uni1EA8: X=856.0,Y=1801.0 (should be at ascender 1800?)
    • uni1EAA: X=856.0,Y=1801.0 (should be at ascender 1800?)
    • uni0202: X=877.0,Y=1801.0 (should be at ascender 1800?)
    • Amacron: X=534.0,Y=1799.0 (should be at ascender 1800?)
    • Amacron: X=1219.0,Y=1799.0 (should be at ascender 1800?)
    • Ccircumflex: X=819.0,Y=1801.0 (should be at ascender 1800?) and 59 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---

This test looks for outline segments which seem particularly short (less than
0.006%% of the overall path length).

This test is not run for variable fonts, as they may legitimately have short
segments. As this test is liable to generate significant numbers of false
positives, the test will pass if there are more than 100 reported short
segments.


  • WARN The following glyphs have segments which seem very short:
    • Aogonek contains a short segment B<<1489.0,-311.0>-<1516.0,-311.0>-<1534.5,-304.5>>
    • Aogonek contains a short segment B<<1534.5,-304.5>-<1553.0,-298.0>-<1574.0,-285.0>>
    • Ccedilla contains a short segment B<<881.0,-308.5>-<903.0,-290.0>-<903.0,-258.0>>
    • Ccedilla contains a short segment B<<903.0,-258.0>-<903.0,-229.0>-<882.5,-214.5>>
    • Ccedilla contains a short segment B<<882.5,-214.5>-<862.0,-200.0>-<831.0,-200.0>>
    • Ccedilla contains a short segment L<<854.0,-105.0>--<872.0,-105.0>>
    • Eogonek contains a short segment B<<1222.0,-286.0>-<1249.0,-311.0>-<1292.0,-311.0>>
    • Eogonek contains a short segment B<<1292.0,-311.0>-<1319.0,-311.0>-<1337.5,-304.5>>
    • Eogonek contains a short segment B<<1337.5,-304.5>-<1356.0,-298.0>-<1378.0,-285.0>>
    • Scedilla contains a short segment B<<870.0,-29.0>-<862.0,-29.0>-<855.0,-29.0>> and 64 more. [code: found-short-segments]
WARN: Do outlines contain any 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:
    • B: B<<1305.5,890.5>-<1213.0,803.0>-<1054.0,779.0>>/B<<1054.0,779.0>-<1250.0,763.0>-<1361.0,673.5>> = 13.250479851552916
    • R: L<<999.0,714.0>--<919.0,714.0>>/B<<919.0,714.0>-<1055.0,695.0>-<1120.5,611.5>> = 7.953081971438419
    • Racute: L<<999.0,714.0>--<919.0,714.0>>/B<<919.0,714.0>-<1055.0,695.0>-<1120.5,611.5>> = 7.953081971438419
    • Rcaron: L<<999.0,714.0>--<919.0,714.0>>/B<<919.0,714.0>-<1055.0,695.0>-<1120.5,611.5>> = 7.953081971438419
    • a: L<<809.0,269.0>--<809.0,270.0>>/B<<809.0,270.0>-<772.0,118.0>-<674.0,47.5>> = 13.680925359319371
    • aacute: L<<809.0,269.0>--<809.0,270.0>>/B<<809.0,270.0>-<772.0,118.0>-<674.0,47.5>> = 13.680925359319371
    • abreve: L<<809.0,269.0>--<809.0,270.0>>/B<<809.0,270.0>-<772.0,118.0>-<674.0,47.5>> = 13.680925359319371
    • acircumflex: L<<809.0,269.0>--<809.0,270.0>>/B<<809.0,270.0>-<772.0,118.0>-<674.0,47.5>> = 13.680925359319371
    • adieresis: L<<809.0,269.0>--<809.0,270.0>>/B<<809.0,270.0>-<772.0,118.0>-<674.0,47.5>> = 13.680925359319371
    • agrave: L<<809.0,269.0>--<809.0,270.0>>/B<<809.0,270.0>-<772.0,118.0>-<674.0,47.5>> = 13.680925359319371 and 60 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • k: L<<221.0,138.0>--<222.0,1362.0>> and uni0137: L<<221.0,138.0>--<222.0,1362.0>> [code: found-semi-vertical]

[5] MontaguSlab144pt-Regular.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: perthousand Contours detected: 4 Expected: 6 or 7
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: percent Contours detected: 3 Expected: 5
Glyph name: perthousand Contours detected: 4 Expected: 6 or 7
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EA2: X=898.0,Y=1798.0 (should be at ascender 1800?)
    • Aring: X=631.0,Y=1802.0 (should be at ascender 1800?)
    • Aring: X=1093.0,Y=1802.0 (should be at ascender 1800?)
    • Aring: X=977.0,Y=1802.0 (should be at ascender 1800?)
    • Aring: X=748.0,Y=1802.0 (should be at ascender 1800?)
    • Aringacute: X=631.0,Y=1802.0 (should be at ascender 1800?)
    • Aringacute: X=1093.0,Y=1802.0 (should be at ascender 1800?)
    • Aringacute: X=977.0,Y=1802.0 (should be at ascender 1800?)
    • Aringacute: X=748.0,Y=1802.0 (should be at ascender 1800?)
    • uni1EBA: X=812.0,Y=1798.0 (should be at ascender 1800?) and 29 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---

This test looks for outline segments which seem particularly short (less than
0.006%% of the overall path length).

This test is not run for variable fonts, as they may legitimately have short
segments. As this test is liable to generate significant numbers of false
positives, the test will pass if there are more than 100 reported short
segments.


  • WARN The following glyphs have segments which seem very short:
    • Ccedilla contains a short segment B<<914.0,-262.0>-<914.0,-228.0>-<890.5,-212.0>>
    • Ccedilla contains a short segment B<<890.5,-212.0>-<867.0,-196.0>-<832.0,-196.0>>
    • Ccedilla contains a short segment L<<840.0,-117.0>--<862.0,-117.0>>
    • Eogonek contains a short segment B<<1269.0,-325.0>-<1299.0,-325.0>-<1320.0,-316.5>>
    • Eogonek contains a short segment B<<1320.0,-316.5>-<1341.0,-308.0>-<1366.0,-292.0>>
    • Eogonek contains a short segment B<<1402.0,-363.0>-<1376.0,-383.0>-<1333.5,-399.5>>
    • Eng contains a short segment B<<1094.5,-104.5>-<1128.0,-127.0>-<1128.0,-171.0>>
    • Scedilla contains a short segment B<<865.0,-28.0>-<854.0,-28.0>-<843.0,-27.0>>
    • Scedilla contains a short segment L<<831.0,-117.0>--<854.0,-117.0>>
    • Scedilla contains a short segment B<<880.0,-320.0>-<905.0,-299.0>-<905.0,-262.0>> and 82 more. [code: found-short-segments]
WARN: Do outlines contain any 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:
    • B: B<<1280.5,887.0>-<1190.0,799.0>-<1033.0,775.0>>/B<<1033.0,775.0>-<1223.0,760.0>-<1331.5,669.0>> = 13.205295993886088
    • R: L<<976.0,718.0>--<895.0,718.0>>/B<<895.0,718.0>-<1027.0,694.0>-<1089.0,609.0>> = 10.304846468766009
    • Racute: L<<976.0,718.0>--<895.0,718.0>>/B<<895.0,718.0>-<1027.0,694.0>-<1089.0,609.0>> = 10.304846468766009
    • Rcaron: L<<976.0,718.0>--<895.0,718.0>>/B<<895.0,718.0>-<1027.0,694.0>-<1089.0,609.0>> = 10.304846468766009
    • a: L<<828.0,239.0>--<828.0,284.0>>/B<<828.0,284.0>-<790.0,124.0>-<687.0,51.5>> = 13.360218444764461
    • aacute: L<<828.0,239.0>--<828.0,284.0>>/B<<828.0,284.0>-<790.0,124.0>-<687.0,51.5>> = 13.360218444764461
    • abreve: L<<828.0,239.0>--<828.0,284.0>>/B<<828.0,284.0>-<790.0,124.0>-<687.0,51.5>> = 13.360218444764461
    • acircumflex: L<<828.0,239.0>--<828.0,284.0>>/B<<828.0,284.0>-<790.0,124.0>-<687.0,51.5>> = 13.360218444764461
    • adieresis: L<<828.0,239.0>--<828.0,284.0>>/B<<828.0,284.0>-<790.0,124.0>-<687.0,51.5>> = 13.360218444764461
    • agrave: L<<828.0,239.0>--<828.0,284.0>>/B<<828.0,284.0>-<790.0,124.0>-<687.0,51.5>> = 13.360218444764461 and 64 more. [code: found-jaggy-segments]

[7] MontaguSlab144pt-SemiBold.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: perthousand Contours detected: 5 Expected: 6 or 7
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: percent Contours detected: 3 Expected: 5
Glyph name: perthousand Contours detected: 5 Expected: 6 or 7
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt SemiBold' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • atilde: X=341.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EBD: X=328.0,Y=1501.0 (should be at cap-height 1500?)
    • itilde: X=76.5,Y=1501.0 (should be at cap-height 1500?)
    • ntilde: X=404.5,Y=1501.0 (should be at cap-height 1500?)
    • uni1EE1: X=381.0,Y=1501.0 (should be at cap-height 1500?)
    • otilde: X=381.0,Y=1501.0 (should be at cap-height 1500?)
    • uni022D: X=381.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EEF: X=370.0,Y=1501.0 (should be at cap-height 1500?)
    • utilde: X=370.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EF9: X=420.5,Y=1501.0 (should be at cap-height 1500?) and 4 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---

This test looks for outline segments which seem particularly short (less than
0.006%% of the overall path length).

This test is not run for variable fonts, as they may legitimately have short
segments. As this test is liable to generate significant numbers of false
positives, the test will pass if there are more than 100 reported short
segments.


  • WARN The following glyphs have segments which seem very short:
    • Aogonek contains a short segment B<<1505.0,-300.0>-<1528.0,-300.0>-<1545.0,-294.5>>
    • Aogonek contains a short segment B<<1545.0,-294.5>-<1562.0,-289.0>-<1581.0,-278.0>>
    • AE contains a short segment L<<1432.0,862.0>--<1508.0,862.0>>
    • AEacute contains a short segment L<<1432.0,862.0>--<1508.0,862.0>>
    • Ccedilla contains a short segment B<<894.0,-255.0>-<894.0,-229.0>-<876.0,-216.5>>
    • Ccedilla contains a short segment B<<876.0,-216.5>-<858.0,-204.0>-<831.0,-204.0>>
    • Ccedilla contains a short segment L<<867.0,-96.0>--<881.0,-96.0>>
    • Eogonek contains a short segment B<<1243.0,-276.0>-<1270.0,-300.0>-<1311.0,-300.0>>
    • Eogonek contains a short segment B<<1311.0,-300.0>-<1335.0,-300.0>-<1352.0,-294.5>>
    • Eogonek contains a short segment B<<1352.0,-294.5>-<1369.0,-289.0>-<1387.0,-278.0>> and 64 more. [code: found-short-segments]
WARN: Do outlines contain any 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:
    • B: B<<1326.5,893.0>-<1233.0,806.0>-<1073.0,782.0>>/B<<1073.0,782.0>-<1272.0,766.0>-<1385.5,677.5>> = 13.127573139657596
    • R: L<<1019.0,711.0>--<936.0,711.0>>/B<<936.0,711.0>-<1078.0,695.0>-<1147.5,614.0>> = 6.4287477488297915
    • Racute: L<<1019.0,711.0>--<936.0,711.0>>/B<<936.0,711.0>-<1078.0,695.0>-<1147.5,614.0>> = 6.4287477488297915
    • Rcaron: L<<1019.0,711.0>--<936.0,711.0>>/B<<936.0,711.0>-<1078.0,695.0>-<1147.5,614.0>> = 6.4287477488297915
    • braceleft: B<<439.5,635.5>-<354.0,596.0>-<232.0,586.0>>/B<<232.0,586.0>-<354.0,576.0>-<439.5,537.0>> = 9.37179967900539
    • braceright: B<<470.0,537.0>-<555.0,576.0>-<677.0,586.0>>/B<<677.0,586.0>-<555.0,596.0>-<470.0,635.5>> = 9.37179967900539
    • eng: L<<511.0,1129.0>--<511.0,878.0>>/B<<511.0,878.0>-<539.0,1010.0>-<625.5,1081.5>> = 11.976132444203333
    • m: L<<502.0,1129.0>--<502.0,897.0>>/B<<502.0,897.0>-<527.0,1019.0>-<606.5,1086.0>> = 11.5806191822281
    • n: L<<511.0,1129.0>--<511.0,878.0>>/B<<511.0,878.0>-<539.0,1010.0>-<625.5,1081.5>> = 11.976132444203333
    • nacute: L<<511.0,1129.0>--<511.0,878.0>>/B<<511.0,878.0>-<539.0,1010.0>-<625.5,1081.5>> = 11.976132444203333 and 35 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- 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:
    • k: L<<213.0,163.0>--<214.0,1337.0>>
    • k: L<<32.0,0.0>--<33.0,163.0>>
    • uni0137: L<<213.0,163.0>--<214.0,1337.0>> and uni0137: L<<32.0,0.0>--<33.0,163.0>> [code: found-semi-vertical]

[5] MontaguSlab144pt-Thin.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: multiply Contours detected: 2 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---

According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.

After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.

[1]
https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179


  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Thin' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test 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, the test also checks for points near the x-height (but only for lower
case 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 test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni01EA: X=1057.0,Y=-1.0 (should be at baseline 0?)
    • Q: X=1060.0,Y=-1.0 (should be at baseline 0?)
    • Uogonek: X=1046.0,Y=-2.0 (should be at baseline 0?)
    • uni1EA9: X=866.0,Y=1802.0 (should be at ascender 1800?)
    • uni1EA9: X=732.0,Y=1801.0 (should be at ascender 1800?)
    • aring: X=438.5,Y=1501.0 (should be at cap-height 1500?)
    • aring: X=693.5,Y=1501.0 (should be at cap-height 1500?)
    • aringacute: X=438.5,Y=1501.0 (should be at cap-height 1500?)
    • aringacute: X=693.5,Y=1501.0 (should be at cap-height 1500?)
    • uni1EC3: X=879.0,Y=1802.0 (should be at ascender 1800?) and 39 more. [code: found-misalignments]
WARN: Do outlines contain any 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:
    • B: B<<1219.0,878.5>-<1133.0,789.0>-<980.0,766.0>>/B<<980.0,766.0>-<1159.0,751.0>-<1260.0,657.5>> = 13.339207542781917
    • R: L<<919.0,726.0>--<829.0,726.0>>/B<<829.0,726.0>-<952.0,696.0>-<1007.5,606.0>> = 13.70696100407981
    • Racute: L<<919.0,726.0>--<829.0,726.0>>/B<<829.0,726.0>-<952.0,696.0>-<1007.5,606.0>> = 13.70696100407981
    • Rcaron: L<<919.0,726.0>--<829.0,726.0>>/B<<829.0,726.0>-<952.0,696.0>-<1007.5,606.0>> = 13.70696100407981
    • a: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322
    • aacute: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322
    • abreve: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322
    • acircumflex: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322
    • adieresis: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322
    • agrave: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322 and 69 more. [code: found-jaggy-segments]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 0 81 1261 85 1108 0
0% 0% 3% 50% 3% 44% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@mightybart
Copy link
Collaborator

mightybart commented May 5, 2021

Not sure how to solve the 27 character limit.

According to the specs, the name table should be OK:

Full font name that reflects all family and relevant subfamily descriptors. The full font name is generally a combination of name IDs 1 and 2, or of name IDs 16 and 17, or a similar human-readable variant.

For fonts in extended typographic families (that is, families that include more than regular, italic, bold, and bold italic variants), values for name IDs 1 and 2 are normally chosen to provide compatibility with certain applications that assume a family has at most four style-linked fonts. In that case, some fonts may end up with a Subfamily name (name ID 2) of “Regular” even though the font would not be considered, typographically, a regular font. For such non-regular fonts in which name ID 2 is specified as “Regular”, the “Regular” descriptor would generally be omitted from name ID 4. For example, the Arial Black font has a Font Family name (name ID 1) of “Arial Black” and a Subfamily name (name ID 2) of “Regular”, but has a full font name (name ID 4) of “Arial Black”. Note that name IDs 16 and 17 should also be included in these fonts, and that name ID 4 would typically be a combination of name IDs 16 and 17, without needing any additional qualifications regarding “Regular”.

For example MontaguSlab14pt-Medium.ttf
ID 1: Montagu Slab 14pt Medium
ID 2: Regular (I thought this is some error, but should be all right)
ID 4: Montagu Slab 14pt Medium
ID 6: MontaguSlab14pt-Medium
ID 16: Montagu Slab 14pt
ID 17: Medium

According to this thread fonttools/fontbakery#2179 only ID 4 & 6 should be less than 27 char, but the test counts ID 2 as well. So, really need some help here, don't know what I'm missing :)

@vv-monsalve
Copy link
Collaborator Author

vv-monsalve commented May 13, 2021

@mightybart That check has a Warn loglevel for now as we are waiting for a confirmation on the more recent status on this (we haven't received complaints about it so far). At the same time, I've followed the Glyphs app suggestions to change name ID 4 and 6 with some abbreviations, but FB complains about them. So, please ignore that Warn.

There is a new version of FontBakery, 0.7.35. Under it, there is a new fail reported for all the fonts (VF + statics).
This is the new full Report for 16pt statics:

Fontbakery report

Fontbakery version: 0.7.35

[8] MontaguSlab16pt-Bold.ttf
🔥 FAIL: Ensure Stylistic Sets have description.
--- Rationale ---
Stylistic sets must provide description text. Programs such as InDesign,
TextEdit and Inkscape use that info to display to the users so that they know
what a given stylistic set offers.
  • 🔥 FAIL The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Eng: X=1308.0,Y=-2.0 (should be at baseline 0?)
    • one.numr: X=301.0,Y=1498.0 (should be at cap-height 1500?)
    • uni00B9: X=301.0,Y=1498.0 (should be at cap-height 1500?)
    • onehalf: X=301.0,Y=1498.0 (should be at cap-height 1500?)
    • onequarter: X=301.0,Y=1498.0 (should be at cap-height 1500?)
    • questiondown: X=436.0,Y=-2.0 (should be at baseline 0?)
    • colonmonetary: X=607.0,Y=-1.0 (should be at baseline 0?)
    • dollar: X=902.0,Y=1499.0 (should be at cap-height 1500?) and uni20B2: X=1104.0,Y=-2.0 (should be at baseline 0?) [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<1099.0,696.0>--<1065.0,696.0>>/B<<1065.0,696.0>-<1196.0,677.0>-<1250.5,591.5>> = 8.252529047136063
    • Racute: L<<1099.0,696.0>--<1065.0,696.0>>/B<<1065.0,696.0>-<1196.0,677.0>-<1250.5,591.5>> = 8.252529047136063
    • Rcaron: L<<1099.0,696.0>--<1065.0,696.0>>/B<<1065.0,696.0>-<1196.0,677.0>-<1250.5,591.5>> = 8.252529047136063
    • braceleft.case: B<<544.0,826.0>-<479.0,755.0>-<330.0,750.0>>/B<<330.0,750.0>-<479.0,745.0>-<544.0,674.0>> = 3.843911917862876
    • braceleft: B<<598.0,750.5>-<533.0,648.0>-<340.0,640.0>>/B<<340.0,640.0>-<533.0,633.0>-<598.0,530.0>> = 4.450770567399401
    • braceright.case: B<<318.5,674.0>-<384.0,745.0>-<532.0,750.0>>/B<<532.0,750.0>-<384.0,755.0>-<318.5,826.0>> = 3.869864619105556
    • braceright: B<<364.0,530.0>-<429.0,633.0>-<622.0,640.0>>/B<<622.0,640.0>-<429.0,648.0>-<364.0,750.5>> = 4.450770567399401
    • eng: L<<591.0,1160.0>--<591.0,900.0>>/B<<591.0,900.0>-<620.0,1030.0>-<711.5,1104.5>> = 12.575465499744425
    • eth: B<<813.5,1055.5>-<906.0,1005.0>-<956.0,886.0>>/B<<956.0,886.0>-<939.0,993.0>-<908.0,1083.0>> = 13.762977891069923
    • m: L<<585.0,1160.0>--<585.0,891.0>>/B<<585.0,891.0>-<609.0,1025.0>-<692.5,1101.5>> = 10.154266580200266 and 36 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • k: L<<222.0,210.0>--<223.0,1370.0>>
  • k: L<<623.0,1580.0>--<622.0,633.0>>
  • uni0137: L<<222.0,210.0>--<223.0,1370.0>> and uni0137: L<<623.0,1580.0>--<622.0,633.0>> [code: found-semi-vertical]

[9] MontaguSlab16pt-ExtraLight.ttf
🔥 FAIL: Ensure Stylistic Sets have description.
--- Rationale ---
Stylistic sets must provide description text. Programs such as InDesign,
TextEdit and Inkscape use that info to display to the users so that they know
what a given stylistic set offers.
  • 🔥 FAIL The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt ExtraLight' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=602.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EB4: X=954.5,Y=2160.5 (should be at ascender 2160?)
    • uni1EA4: X=1275.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EA4: X=1369.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EA6: X=1036.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EA6: X=1130.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EAA: X=602.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EAA: X=954.5,Y=2160.5 (should be at ascender 2160?)
    • uni1EBE: X=1212.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EBE: X=1305.0,Y=2159.0 (should be at ascender 2160?) and 80 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • braceleft.case: B<<398.0,819.5>-<336.0,756.0>-<226.0,750.0>>/B<<226.0,750.0>-<336.0,744.0>-<398.0,680.5>> = 6.244260924231415
    • braceleft: B<<435.0,713.0>-<367.0,638.0>-<243.0,631.0>>/B<<243.0,631.0>-<367.0,624.0>-<435.0,549.5>> = 6.462019800736384
    • braceright.case: B<<423.5,680.5>-<486.0,744.0>-<595.0,750.0>>/B<<595.0,750.0>-<486.0,756.0>-<423.5,819.5>> = 6.301432826535456
    • braceright: B<<466.0,549.5>-<534.0,624.0>-<658.0,631.0>>/B<<658.0,631.0>-<534.0,638.0>-<466.0,713.0>> = 6.462019800736384
    • eth: B<<897.5,1054.0>-<1008.0,993.0>-<1068.0,867.0>>/B<<1068.0,867.0>-<1035.0,1004.0>-<974.0,1116.0>> = 11.920168419426853
    • nine.lf: B<<1106.5,548.0>-<1142.0,726.0>-<1123.0,979.0>>/B<<1123.0,979.0>-<1106.0,791.0>-<982.0,676.0>> = 9.461732176690402
    • nine: B<<1106.5,548.0>-<1142.0,726.0>-<1123.0,979.0>>/B<<1123.0,979.0>-<1106.0,791.0>-<982.0,676.0>> = 9.461732176690402
    • six.lf: B<<263.5,952.0>-<228.0,774.0>-<247.0,521.0>>/B<<247.0,521.0>-<264.0,709.0>-<388.0,824.0>> = 9.461732176690402
    • six: B<<263.5,952.0>-<228.0,774.0>-<247.0,521.0>>/B<<247.0,521.0>-<264.0,709.0>-<388.0,824.0>> = 9.461732176690402 and yen: L<<803.0,592.0>--<668.0,780.0>>/L<<668.0,780.0>--<680.0,761.0>> = 3.405920114930088 [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • dotlessi.ss01: L<<265.0,222.0>--<268.0,1040.0>>
  • i.loclTRK.ss01: L<<265.0,222.0>--<268.0,1040.0>>
  • i.ss01: L<<265.0,222.0>--<268.0,1040.0>>
  • iacute.ss01: L<<265.0,222.0>--<268.0,1040.0>>
  • icircumflex.ss01: L<<265.0,222.0>--<268.0,1040.0>>
  • idieresis.ss01: L<<265.0,222.0>--<268.0,1040.0>>
  • igrave.ss01: L<<265.0,222.0>--<268.0,1040.0>>
  • imacron.ss01: L<<265.0,222.0>--<268.0,1040.0>>
  • l.ss01: L<<258.0,232.0>--<262.0,1494.0>>
  • lacute.ss01: L<<258.0,232.0>--<262.0,1494.0>> and 5 more. [code: found-semi-vertical]

[9] MontaguSlab16pt-Light.ttf
🔥 FAIL: Ensure Stylistic Sets have description.
--- Rationale ---
Stylistic sets must provide description text. Programs such as InDesign,
TextEdit and Inkscape use that info to display to the users so that they know
what a given stylistic set offers.
  • 🔥 FAIL The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt Light' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Ohorn: X=1649.5,Y=1498.5 (should be at cap-height 1500?)
    • uni1EDA: X=1649.5,Y=1498.5 (should be at cap-height 1500?)
    • uni1EE2: X=1649.5,Y=1498.5 (should be at cap-height 1500?)
    • uni1EDC: X=1649.5,Y=1498.5 (should be at cap-height 1500?)
    • uni1EDE: X=1649.5,Y=1498.5 (should be at cap-height 1500?)
    • uni1EE0: X=1649.5,Y=1498.5 (should be at cap-height 1500?)
    • R: X=77.0,Y=1502.0 (should be at cap-height 1500?)
    • R: X=1005.0,Y=1502.0 (should be at cap-height 1500?)
    • Racute: X=77.0,Y=1502.0 (should be at cap-height 1500?)
    • Racute: X=1005.0,Y=1502.0 (should be at cap-height 1500?) and 27 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<1006.0,700.0>--<932.0,700.0>>/B<<932.0,700.0>-<1050.0,670.0>-<1103.0,581.0>> = 14.264512298079882
    • Racute: L<<1006.0,700.0>--<932.0,700.0>>/B<<932.0,700.0>-<1050.0,670.0>-<1103.0,581.0>> = 14.264512298079882
    • Rcaron: L<<1006.0,700.0>--<932.0,700.0>>/B<<932.0,700.0>-<1050.0,670.0>-<1103.0,581.0>> = 14.264512298079882
    • braceleft.case: B<<420.5,820.5>-<358.0,756.0>-<242.0,750.0>>/B<<242.0,750.0>-<358.0,744.0>-<420.5,679.5>> = 5.921872268327562
    • braceleft: B<<460.0,719.0>-<392.0,640.0>-<258.0,633.0>>/B<<258.0,633.0>-<392.0,626.0>-<460.0,547.0>> = 5.980689950330773
    • braceright.case: B<<407.5,679.5>-<470.0,744.0>-<586.0,750.0>>/B<<586.0,750.0>-<470.0,756.0>-<407.5,820.5>> = 5.921872268327562
    • braceright: B<<450.0,547.0>-<518.0,626.0>-<652.0,633.0>>/B<<652.0,633.0>-<518.0,640.0>-<450.0,719.0>> = 5.980689950330773
    • eth: B<<884.5,1054.0>-<992.0,995.0>-<1050.0,870.0>>/B<<1050.0,870.0>-<1020.0,1003.0>-<964.5,1111.5>> = 12.18016755933628
    • nine.lf: B<<1085.0,542.5>-<1119.0,709.0>-<1102.0,945.0>>/B<<1102.0,945.0>-<1080.0,772.0>-<961.0,665.0>> = 11.367390806004797
    • nine: B<<1085.0,542.5>-<1119.0,709.0>-<1102.0,945.0>>/B<<1102.0,945.0>-<1080.0,772.0>-<961.0,665.0>> = 11.367390806004797 and 7 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • dotlessi.ss01: L<<262.0,241.0>--<268.0,1026.0>>
  • i.loclTRK.ss01: L<<262.0,241.0>--<268.0,1026.0>>
  • i.ss01: L<<262.0,241.0>--<268.0,1026.0>>
  • iacute.ss01: L<<262.0,241.0>--<268.0,1026.0>>
  • icircumflex.ss01: L<<262.0,241.0>--<268.0,1026.0>>
  • idieresis.ss01: L<<262.0,241.0>--<268.0,1026.0>>
  • igrave.ss01: L<<262.0,241.0>--<268.0,1026.0>>
  • imacron.ss01: L<<262.0,241.0>--<268.0,1026.0>>
  • l.ss01: L<<248.0,258.0>--<256.0,1475.0>>
  • lacute.ss01: L<<248.0,258.0>--<256.0,1475.0>> and 4 more. [code: found-semi-vertical]

[9] MontaguSlab16pt-Medium.ttf
🔥 FAIL: Ensure Stylistic Sets have description.
--- Rationale ---
Stylistic sets must provide description text. Programs such as InDesign,
TextEdit and Inkscape use that info to display to the users so that they know
what a given stylistic set offers.
  • 🔥 FAIL The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt Medium' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EA8: X=1075.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EC2: X=993.0,Y=2159.0 (should be at ascender 2160?)
    • uni1ED4: X=1112.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EA3: X=550.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EBB: X=525.0,Y=1501.0 (should be at cap-height 1500?)
    • g: X=932.0,Y=-1.0 (should be at baseline 0?)
    • g: X=454.0,Y=-1.0 (should be at baseline 0?)
    • gbreve: X=932.0,Y=-1.0 (should be at baseline 0?)
    • gbreve: X=454.0,Y=-1.0 (should be at baseline 0?)
    • gcaron: X=932.0,Y=-1.0 (should be at baseline 0?) and 21 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---
This check looks for outline segments which seem particularly short (less than
0.006%% 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.
  • WARN The following glyphs have segments which seem very short:
    • Aogonek contains a short segment B<<1541.0,-297.0>-<1568.0,-297.0>-<1586.5,-290.5>>
    • Aogonek contains a short segment B<<1586.5,-290.5>-<1605.0,-284.0>-<1626.0,-271.0>>
    • Ccedilla contains a short segment B<<944.0,-259.0>-<944.0,-232.0>-<925.0,-219.0>>
    • Ccedilla contains a short segment B<<925.0,-219.0>-<906.0,-206.0>-<876.0,-206.0>>
    • Ccedilla contains a short segment L<<903.0,-104.0>--<918.0,-104.0>>
    • Eogonek contains a short segment B<<1281.0,-207.0>-<1281.0,-250.0>-<1308.0,-273.5>>
    • Eogonek contains a short segment B<<1308.0,-273.5>-<1335.0,-297.0>-<1378.0,-297.0>>
    • Eogonek contains a short segment B<<1378.0,-297.0>-<1404.0,-297.0>-<1422.5,-290.5>>
    • Eogonek contains a short segment B<<1422.5,-290.5>-<1441.0,-284.0>-<1463.0,-271.0>>
    • Scedilla contains a short segment B<<929.0,-25.0>-<914.0,-25.0>-<900.0,-25.0>> and 68 more. [code: found-short-segments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<1055.0,698.0>--<1005.0,698.0>>/B<<1005.0,698.0>-<1128.0,673.0>-<1181.5,586.0>> = 11.488981202159193
    • Racute: L<<1055.0,698.0>--<1005.0,698.0>>/B<<1005.0,698.0>-<1128.0,673.0>-<1181.5,586.0>> = 11.488981202159193
    • Rcaron: L<<1055.0,698.0>--<1005.0,698.0>>/B<<1005.0,698.0>-<1128.0,673.0>-<1181.5,586.0>> = 11.488981202159193
    • braceleft.case: B<<485.0,823.5>-<421.0,756.0>-<288.0,750.0>>/B<<288.0,750.0>-<421.0,744.0>-<485.0,676.5>> = 5.166041337270114
    • braceleft: B<<532.5,735.5>-<466.0,644.0>-<301.0,637.0>>/B<<301.0,637.0>-<466.0,629.0>-<532.5,537.5>> = 5.205076772283028
    • braceright.case: B<<360.0,676.5>-<424.0,744.0>-<557.0,750.0>>/B<<557.0,750.0>-<424.0,756.0>-<360.0,823.5>> = 5.166041337270114
    • braceright: B<<404.5,537.5>-<471.0,629.0>-<636.0,637.0>>/B<<636.0,637.0>-<471.0,644.0>-<404.5,735.5>> = 5.205076772283028
    • eng: L<<513.0,1140.0>--<513.0,862.0>>/B<<513.0,862.0>-<549.0,1007.0>-<649.5,1082.5>> = 13.943230920553672
    • eth: B<<846.5,1055.0>-<946.0,1001.0>-<1000.0,879.0>>/B<<1000.0,879.0>-<977.0,998.0>-<935.5,1096.5>> = 12.936189670735347
    • m: L<<509.0,1139.0>--<509.0,891.0>>/B<<509.0,891.0>-<540.0,1019.0>-<626.0,1088.0>> = 13.614182744829332 and 36 more. [code: found-jaggy-segments]

[9] MontaguSlab16pt-Regular.ttf
🔥 FAIL: Ensure Stylistic Sets have description.
--- Rationale ---
Stylistic sets must provide description text. Programs such as InDesign,
TextEdit and Inkscape use that info to display to the users so that they know
what a given stylistic set offers.
  • 🔥 FAIL The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • adieresis: X=804.5,Y=1498.5 (should be at cap-height 1500?)
    • adieresis: X=985.0,Y=1498.5 (should be at cap-height 1500?)
    • adieresis: X=351.5,Y=1498.5 (should be at cap-height 1500?)
    • adieresis: X=532.5,Y=1498.5 (should be at cap-height 1500?)
    • edieresis: X=788.0,Y=1498.5 (should be at cap-height 1500?)
    • edieresis: X=968.0,Y=1498.5 (should be at cap-height 1500?)
    • edieresis: X=335.0,Y=1498.5 (should be at cap-height 1500?)
    • edieresis: X=515.5,Y=1498.5 (should be at cap-height 1500?)
    • eogonek: X=848.0,Y=2.0 (should be at baseline 0?)
    • uni0123: X=670.0,Y=1499.0 (should be at cap-height 1500?) and 32 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---
This check looks for outline segments which seem particularly short (less than
0.006%% 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.
  • WARN The following glyphs have segments which seem very short:
    • Ccedilla contains a short segment B<<959.0,-262.0>-<959.0,-231.0>-<936.5,-215.5>>
    • Ccedilla contains a short segment B<<936.5,-215.5>-<914.0,-200.0>-<880.0,-200.0>>
    • Ccedilla contains a short segment L<<892.0,-115.0>--<911.0,-115.0>>
    • Eogonek contains a short segment B<<1352.0,-314.0>-<1382.0,-314.0>-<1402.5,-306.0>>
    • Eogonek contains a short segment B<<1402.5,-306.0>-<1423.0,-298.0>-<1448.0,-282.0>>
    • Scedilla contains a short segment B<<918.0,-25.0>-<901.0,-25.0>-<885.0,-24.0>>
    • Scedilla contains a short segment L<<873.0,-115.0>--<893.0,-115.0>>
    • Scedilla contains a short segment B<<940.0,-262.0>-<940.0,-231.0>-<917.5,-215.5>>
    • Scedilla contains a short segment B<<917.5,-215.5>-<895.0,-200.0>-<861.0,-200.0>>
    • uni0162 contains a short segment L<<902.0,-115.0>--<922.0,-115.0>> and 71 more. [code: found-short-segments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<1031.0,699.0>--<970.0,699.0>>/B<<970.0,699.0>-<1090.0,671.0>-<1143.0,583.0>> = 13.134022306396327
    • Racute: L<<1031.0,699.0>--<970.0,699.0>>/B<<970.0,699.0>-<1090.0,671.0>-<1143.0,583.0>> = 13.134022306396327
    • Rcaron: L<<1031.0,699.0>--<970.0,699.0>>/B<<970.0,699.0>-<1090.0,671.0>-<1143.0,583.0>> = 13.134022306396327
    • braceleft.case: B<<453.5,822.0>-<390.0,756.0>-<266.0,750.0>>/B<<266.0,750.0>-<390.0,744.0>-<453.5,678.0>> = 5.540431594400349
    • braceleft: B<<497.0,727.5>-<430.0,642.0>-<280.0,635.0>>/B<<280.0,635.0>-<430.0,628.0>-<497.0,542.5>> = 5.343729186545131
    • braceright.case: B<<383.5,678.0>-<447.0,744.0>-<571.0,750.0>>/B<<571.0,750.0>-<447.0,756.0>-<383.5,822.0>> = 5.540431594400349
    • braceright: B<<427.0,542.5>-<494.0,628.0>-<644.0,635.0>>/B<<644.0,635.0>-<494.0,642.0>-<427.0,727.5>> = 5.343729186545131
    • eth: B<<865.0,1054.5>-<968.0,998.0>-<1025.0,875.0>>/B<<1025.0,875.0>-<998.0,1000.0>-<950.0,1103.5>> = 12.675063369819934
    • uni0156: L<<1031.0,699.0>--<970.0,699.0>>/B<<970.0,699.0>-<1090.0,671.0>-<1143.0,583.0>> = 13.134022306396327
    • uni0210: L<<1031.0,699.0>--<970.0,699.0>>/B<<970.0,699.0>-<1090.0,671.0>-<1143.0,583.0>> = 13.134022306396327 and 3 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • k: L<<258.0,123.0>--<259.0,1446.0>> and uni0137: L<<258.0,123.0>--<259.0,1446.0>> [code: found-semi-vertical]

[10] MontaguSlab16pt-SemiBold.ttf
🔥 FAIL: Ensure Stylistic Sets have description.
--- Rationale ---
Stylistic sets must provide description text. Programs such as InDesign,
TextEdit and Inkscape use that info to display to the users so that they know
what a given stylistic set offers.
  • 🔥 FAIL The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt SemiBold' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Eng: X=1335.0,Y=-2.0 (should be at baseline 0?)
    • eth: X=624.5,Y=1498.0 (should be at cap-height 1500?)
    • v: X=559.0,Y=-2.0 (should be at baseline 0?)
    • v: X=841.0,Y=-2.0 (should be at baseline 0?)
    • w: X=520.0,Y=-2.0 (should be at baseline 0?)
    • w: X=1507.0,Y=-2.0 (should be at baseline 0?)
    • w: X=1236.0,Y=-2.0 (should be at baseline 0?)
    • w: X=793.0,Y=-2.0 (should be at baseline 0?)
    • wacute: X=520.0,Y=-2.0 (should be at baseline 0?)
    • wacute: X=1507.0,Y=-2.0 (should be at baseline 0?) and 27 more. [code: found-misalignments]
WARN: Do any segments have colinear vectors?
--- Rationale ---
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.
  • WARN The following glyphs have colinear vectors:
    • uhorn: L<<813.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>>
    • uni1EE9: L<<813.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>>
    • uni1EEB: L<<813.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>>
    • uni1EED: L<<813.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>>
    • uni1EEF: L<<813.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> and uni1EF1: L<<813.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> [code: found-colinear-vectors]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<1075.0,697.0>--<1034.0,697.0>>/B<<1034.0,697.0>-<1160.0,675.0>-<1213.5,588.5>> = 9.904183212973862
    • Racute: L<<1075.0,697.0>--<1034.0,697.0>>/B<<1034.0,697.0>-<1160.0,675.0>-<1213.5,588.5>> = 9.904183212973862
    • Rcaron: L<<1075.0,697.0>--<1034.0,697.0>>/B<<1034.0,697.0>-<1160.0,675.0>-<1213.5,588.5>> = 9.904183212973862
    • braceleft.case: B<<512.5,824.5>-<448.0,755.0>-<308.0,750.0>>/B<<308.0,750.0>-<448.0,745.0>-<512.5,675.5>> = 4.0908169777744545
    • braceleft: B<<563.0,742.0>-<497.0,645.0>-<319.0,638.0>>/B<<319.0,638.0>-<497.0,631.0>-<563.0,534.5>> = 4.504088690805056
    • braceright.case: B<<341.0,675.5>-<406.0,745.0>-<546.0,750.0>>/B<<546.0,750.0>-<406.0,755.0>-<341.0,824.5>> = 4.0908169777744545
    • braceright: B<<386.0,534.5>-<452.0,631.0>-<630.0,638.0>>/B<<630.0,638.0>-<452.0,645.0>-<386.0,742.0>> = 4.504088690805056
    • eng: L<<549.0,1149.0>--<549.0,880.0>>/B<<549.0,880.0>-<582.0,1018.0>-<678.0,1093.0>> = 13.448615051686525
    • eth: B<<831.0,1055.5>-<927.0,1003.0>-<980.0,882.0>>/B<<980.0,882.0>-<960.0,996.0>-<923.5,1090.5>> = 13.703586662958596
    • m: L<<544.0,1149.0>--<544.0,892.0>>/B<<544.0,892.0>-<572.0,1022.0>-<657.0,1094.0>> = 12.154941697222226 and 36 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • k: L<<235.0,180.0>--<236.0,1397.0>>
  • k: L<<572.0,1576.0>--<571.0,601.0>>
  • uni0137: L<<235.0,180.0>--<236.0,1397.0>> and uni0137: L<<572.0,1576.0>--<571.0,601.0>> [code: found-semi-vertical]

[9] MontaguSlab16pt-Thin.ttf
🔥 FAIL: Ensure Stylistic Sets have description.
--- Rationale ---
Stylistic sets must provide description text. Programs such as InDesign,
TextEdit and Inkscape use that info to display to the users so that they know
what a given stylistic set offers.
  • 🔥 FAIL The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt Thin' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=650.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EAA: X=650.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EC4: X=591.0,Y=2158.0 (should be at ascender 2160?)
    • uni1ED6: X=691.0,Y=2158.0 (should be at ascender 2160?)
    • Q: X=1154.0,Y=-2.0 (should be at baseline 0?)
    • Uogonek: X=1124.0,Y=-1.0 (should be at baseline 0?)
    • uni1EA3: X=774.0,Y=1498.0 (should be at cap-height 1500?)
    • uni1EA3: X=554.0,Y=1498.0 (should be at cap-height 1500?)
    • uni1EBB: X=778.0,Y=1498.0 (should be at cap-height 1500?)
    • uni1EBB: X=558.0,Y=1498.0 (should be at cap-height 1500?) and 39 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • braceleft.case: B<<375.5,818.5>-<314.0,756.0>-<210.0,750.0>>/B<<210.0,750.0>-<314.0,744.0>-<375.5,681.5>> = 6.603731348869935
    • braceleft: B<<409.5,707.5>-<341.0,637.0>-<228.0,630.0>>/B<<228.0,630.0>-<341.0,623.0>-<409.5,553.0>> = 7.089532911189703
    • braceright.case: B<<440.0,681.5>-<502.0,744.0>-<605.0,750.0>>/B<<605.0,750.0>-<502.0,756.0>-<440.0,818.5>> = 6.667701323073103
    • braceright: B<<481.5,553.0>-<550.0,623.0>-<663.0,630.0>>/B<<663.0,630.0>-<550.0,637.0>-<481.5,707.5>> = 7.089532911189703
    • eth: B<<910.5,1053.5>-<1024.0,991.0>-<1085.0,864.0>>/B<<1085.0,864.0>-<1049.0,1006.0>-<982.5,1121.5>> = 11.42970682912706
    • nine.dnom: B<<582.0,204.5>-<618.0,295.0>-<610.0,439.0>>/B<<610.0,439.0>-<600.0,369.0>-<536.0,315.5>> = 11.309932474020162
    • nine.lf: B<<1128.5,553.5>-<1166.0,742.0>-<1145.0,1014.0>>/B<<1145.0,1014.0>-<1132.0,811.0>-<1003.0,687.0>> = 8.078997569467882
    • nine.numr: B<<582.0,981.5>-<618.0,1072.0>-<610.0,1216.0>>/B<<610.0,1216.0>-<600.0,1146.0>-<536.0,1092.5>> = 11.309932474020162
    • nine: B<<1128.5,553.5>-<1166.0,742.0>-<1145.0,1014.0>>/B<<1145.0,1014.0>-<1132.0,811.0>-<1003.0,687.0>> = 8.078997569467882
    • six.dnom: B<<167.5,518.5>-<132.0,428.0>-<140.0,284.0>>/B<<140.0,284.0>-<151.0,354.0>-<214.5,407.5>> = 12.110420220283205 and 8 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • dotlessi.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • i.loclTRK.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • i.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • iacute.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • icircumflex.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • idieresis.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • igrave.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • imacron.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • l.ss01: L<<268.0,205.0>--<269.0,1513.0>>
  • lacute.ss01: L<<268.0,205.0>--<269.0,1513.0>> and 12 more. [code: found-semi-vertical]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 7 56 673 43 559 0
0% 1% 4% 50% 3% 42% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@mightybart
Copy link
Collaborator

Fixed the last FAIL

Fontbakery report

Fontbakery version: 0.7.36

[1] Family checks
WARN: Is the command `ftxvalidator` (Apple Font Tool Suite) available?
--- Rationale ---
There's no reasonable (and legal) way to run the command `ftxvalidator` of the
Apple Font Tool Suite on a non-macOS machine. I.e. on GNU+Linux or Windows etc.
If Font Bakery is not running on an OSX machine, the machine running Font Bakery
could access `ftxvalidator` on OSX, e.g. via ssh or a remote procedure call
(rpc).
There's an ssh example implementation at:
https://github.com/googlefonts/fontbakery/blob/main/prebuilt/workarounds
/ftxvalidator/ssh-implementation/ftxvalidator
  • WARN Could not find ftxvalidator. [code: ftxvalidator-available]

[7] MontaguSlab16pt-Bold.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Eng: X=1308.0,Y=-2.0 (should be at baseline 0?)
    • one.numr: X=301.0,Y=1498.0 (should be at cap-height 1500?)
    • uni00B9: X=301.0,Y=1498.0 (should be at cap-height 1500?)
    • onehalf: X=301.0,Y=1498.0 (should be at cap-height 1500?)
    • onequarter: X=301.0,Y=1498.0 (should be at cap-height 1500?)
    • questiondown: X=436.0,Y=-2.0 (should be at baseline 0?)
    • colonmonetary: X=607.0,Y=-1.0 (should be at baseline 0?)
    • dollar: X=902.0,Y=1499.0 (should be at cap-height 1500?) and uni20B2: X=1104.0,Y=-2.0 (should be at baseline 0?) [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<1099.0,696.0>--<1065.0,696.0>>/B<<1065.0,696.0>-<1196.0,677.0>-<1250.5,591.5>> = 8.252529047136063
    • Racute: L<<1099.0,696.0>--<1065.0,696.0>>/B<<1065.0,696.0>-<1196.0,677.0>-<1250.5,591.5>> = 8.252529047136063
    • Rcaron: L<<1099.0,696.0>--<1065.0,696.0>>/B<<1065.0,696.0>-<1196.0,677.0>-<1250.5,591.5>> = 8.252529047136063
    • braceleft.case: B<<544.0,826.0>-<479.0,755.0>-<330.0,750.0>>/B<<330.0,750.0>-<479.0,745.0>-<544.0,674.0>> = 3.843911917862876
    • braceleft: B<<598.0,750.5>-<533.0,648.0>-<340.0,640.0>>/B<<340.0,640.0>-<533.0,633.0>-<598.0,530.0>> = 4.450770567399401
    • braceright.case: B<<318.5,674.0>-<384.0,745.0>-<532.0,750.0>>/B<<532.0,750.0>-<384.0,755.0>-<318.5,826.0>> = 3.869864619105556
    • braceright: B<<364.0,530.0>-<429.0,633.0>-<622.0,640.0>>/B<<622.0,640.0>-<429.0,648.0>-<364.0,750.5>> = 4.450770567399401
    • eng: L<<591.0,1160.0>--<591.0,900.0>>/B<<591.0,900.0>-<620.0,1030.0>-<711.5,1104.5>> = 12.575465499744425
    • eth: B<<813.5,1055.5>-<906.0,1005.0>-<956.0,886.0>>/B<<956.0,886.0>-<939.0,993.0>-<908.0,1083.0>> = 13.762977891069923
    • m: L<<585.0,1160.0>--<585.0,891.0>>/B<<585.0,891.0>-<609.0,1025.0>-<692.5,1101.5>> = 10.154266580200266 and 36 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • k: L<<222.0,210.0>--<223.0,1370.0>>
  • k: L<<623.0,1580.0>--<622.0,633.0>>
  • uni0137: L<<222.0,210.0>--<223.0,1370.0>> and uni0137: L<<623.0,1580.0>--<622.0,633.0>> [code: found-semi-vertical]

[8] MontaguSlab16pt-ExtraLight.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt ExtraLight' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=602.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EB4: X=954.5,Y=2160.5 (should be at ascender 2160?)
    • uni1EA4: X=1276.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EA4: X=1369.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EA6: X=1036.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EA6: X=1130.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EAA: X=602.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EAA: X=954.5,Y=2160.5 (should be at ascender 2160?)
    • uni1EBE: X=1212.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EBE: X=1305.0,Y=2159.0 (should be at ascender 2160?) and 79 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • braceleft.case: B<<397.5,819.5>-<335.0,756.0>-<226.0,750.0>>/B<<226.0,750.0>-<335.0,744.0>-<397.5,680.5>> = 6.301432826535456
    • braceleft: B<<435.0,713.0>-<367.0,638.0>-<243.0,631.0>>/B<<243.0,631.0>-<367.0,624.0>-<435.0,549.5>> = 6.462019800736384
    • braceright.case: B<<423.5,680.5>-<486.0,744.0>-<595.0,750.0>>/B<<595.0,750.0>-<486.0,756.0>-<423.5,819.5>> = 6.301432826535456
    • braceright: B<<465.5,549.5>-<534.0,624.0>-<658.0,631.0>>/B<<658.0,631.0>-<534.0,638.0>-<465.5,713.0>> = 6.462019800736384
    • eth: B<<897.5,1054.0>-<1008.0,993.0>-<1067.0,867.0>>/B<<1067.0,867.0>-<1034.0,1004.0>-<973.5,1116.5>> = 11.548353067229039
    • nine.lf: B<<1106.5,548.0>-<1142.0,726.0>-<1123.0,979.0>>/B<<1123.0,979.0>-<1106.0,791.0>-<982.0,676.0>> = 9.461732176690402
    • nine: B<<1106.5,548.0>-<1142.0,726.0>-<1123.0,979.0>>/B<<1123.0,979.0>-<1106.0,791.0>-<982.0,676.0>> = 9.461732176690402
    • six.lf: B<<263.5,952.0>-<228.0,774.0>-<247.0,521.0>>/B<<247.0,521.0>-<264.0,709.0>-<388.0,824.0>> = 9.461732176690402
    • six: B<<263.5,952.0>-<228.0,774.0>-<247.0,521.0>>/B<<247.0,521.0>-<264.0,709.0>-<388.0,824.0>> = 9.461732176690402 and yen: L<<803.0,593.0>--<668.0,780.0>>/L<<668.0,780.0>--<680.0,761.0>> = 3.5508202431404676 [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • dotlessi.ss01: L<<265.0,222.0>--<269.0,1042.0>>
  • i.loclTRK.ss01: L<<265.0,222.0>--<269.0,1042.0>>
  • i.ss01: L<<265.0,222.0>--<269.0,1042.0>>
  • iacute.ss01: L<<265.0,222.0>--<269.0,1042.0>>
  • icircumflex.ss01: L<<265.0,222.0>--<269.0,1042.0>>
  • idieresis.ss01: L<<265.0,222.0>--<269.0,1042.0>>
  • igrave.ss01: L<<265.0,222.0>--<269.0,1042.0>>
  • imacron.ss01: L<<265.0,222.0>--<269.0,1042.0>>
  • l.ss01: L<<258.0,231.0>--<263.0,1496.0>>
  • lacute.ss01: L<<258.0,231.0>--<263.0,1496.0>> and 5 more. [code: found-semi-vertical]

[8] MontaguSlab16pt-Light.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt Light' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Ohorn: X=1649.5,Y=1498.5 (should be at cap-height 1500?)
    • uni1EDA: X=1649.5,Y=1498.5 (should be at cap-height 1500?)
    • uni1EE2: X=1649.5,Y=1498.5 (should be at cap-height 1500?)
    • uni1EDC: X=1649.5,Y=1498.5 (should be at cap-height 1500?)
    • uni1EDE: X=1649.5,Y=1498.5 (should be at cap-height 1500?)
    • uni1EE0: X=1649.5,Y=1498.5 (should be at cap-height 1500?)
    • R: X=74.0,Y=1502.0 (should be at cap-height 1500?)
    • R: X=1006.0,Y=1502.0 (should be at cap-height 1500?)
    • Racute: X=74.0,Y=1502.0 (should be at cap-height 1500?)
    • Racute: X=1006.0,Y=1502.0 (should be at cap-height 1500?) and 28 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<1006.0,700.0>--<932.0,700.0>>/B<<932.0,700.0>-<1050.0,670.0>-<1103.0,581.0>> = 14.264512298079882
    • Racute: L<<1006.0,700.0>--<932.0,700.0>>/B<<932.0,700.0>-<1050.0,670.0>-<1103.0,581.0>> = 14.264512298079882
    • Rcaron: L<<1006.0,700.0>--<932.0,700.0>>/B<<932.0,700.0>-<1050.0,670.0>-<1103.0,581.0>> = 14.264512298079882
    • braceleft.case: B<<420.0,821.0>-<357.0,756.0>-<242.0,750.0>>/B<<242.0,750.0>-<357.0,744.0>-<420.0,679.0>> = 5.973273980950297
    • braceleft: B<<460.0,719.0>-<392.0,640.0>-<258.0,633.0>>/B<<258.0,633.0>-<392.0,626.0>-<460.0,547.0>> = 5.980689950330773
    • braceright.case: B<<407.5,679.0>-<470.0,744.0>-<585.0,750.0>>/B<<585.0,750.0>-<470.0,756.0>-<407.5,821.0>> = 5.973273980950297
    • braceright: B<<450.0,547.0>-<518.0,626.0>-<652.0,633.0>>/B<<652.0,633.0>-<518.0,640.0>-<450.0,719.0>> = 5.980689950330773
    • eth: B<<883.5,1054.5>-<991.0,996.0>-<1050.0,871.0>>/B<<1050.0,871.0>-<1020.0,1003.0>-<964.5,1111.5>> = 12.463044435052213
    • nine.lf: B<<1085.0,542.0>-<1119.0,709.0>-<1102.0,945.0>>/B<<1102.0,945.0>-<1080.0,772.0>-<961.0,665.0>> = 11.367390806004797
    • nine: B<<1085.0,542.0>-<1119.0,709.0>-<1102.0,945.0>>/B<<1102.0,945.0>-<1080.0,772.0>-<961.0,665.0>> = 11.367390806004797 and 7 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • dotlessi.ss01: L<<262.0,240.0>--<268.0,1030.0>>
  • i.loclTRK.ss01: L<<262.0,240.0>--<268.0,1030.0>>
  • i.ss01: L<<262.0,240.0>--<268.0,1030.0>>
  • iacute.ss01: L<<262.0,240.0>--<268.0,1030.0>>
  • icircumflex.ss01: L<<262.0,240.0>--<268.0,1030.0>>
  • idieresis.ss01: L<<262.0,240.0>--<268.0,1030.0>>
  • igrave.ss01: L<<262.0,240.0>--<268.0,1030.0>>
  • imacron.ss01: L<<262.0,240.0>--<268.0,1030.0>>
  • l.ss01: L<<248.0,258.0>--<257.0,1479.0>>
  • lacute.ss01: L<<248.0,258.0>--<257.0,1479.0>> and 4 more. [code: found-semi-vertical]

[9] MontaguSlab16pt-Medium.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt Medium' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EA8: X=1075.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EC2: X=992.0,Y=2159.0 (should be at ascender 2160?)
    • uni1ED4: X=1112.0,Y=2159.0 (should be at ascender 2160?)
    • uni1EA3: X=550.0,Y=1502.0 (should be at cap-height 1500?)
    • uni1EBB: X=525.0,Y=1502.0 (should be at cap-height 1500?)
    • g: X=932.0,Y=-1.0 (should be at baseline 0?)
    • g: X=454.0,Y=-1.0 (should be at baseline 0?)
    • gbreve: X=932.0,Y=-1.0 (should be at baseline 0?)
    • gbreve: X=454.0,Y=-1.0 (should be at baseline 0?)
    • gcaron: X=932.0,Y=-1.0 (should be at baseline 0?) and 24 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---
This check looks for outline segments which seem particularly short (less than
0.006%% 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.
  • WARN The following glyphs have segments which seem very short:
    • Aogonek contains a short segment B<<1541.0,-297.0>-<1568.0,-297.0>-<1586.5,-290.5>>
    • Aogonek contains a short segment B<<1586.5,-290.5>-<1605.0,-284.0>-<1626.0,-271.0>>
    • Ccedilla contains a short segment B<<944.0,-259.0>-<944.0,-232.0>-<925.0,-219.0>>
    • Ccedilla contains a short segment B<<925.0,-219.0>-<906.0,-206.0>-<876.0,-206.0>>
    • Ccedilla contains a short segment L<<903.0,-104.0>--<918.0,-104.0>>
    • Eogonek contains a short segment B<<1281.0,-207.0>-<1281.0,-250.0>-<1308.0,-273.5>>
    • Eogonek contains a short segment B<<1308.0,-273.5>-<1335.0,-297.0>-<1378.0,-297.0>>
    • Eogonek contains a short segment B<<1378.0,-297.0>-<1404.0,-297.0>-<1422.5,-290.5>>
    • Eogonek contains a short segment B<<1422.5,-290.5>-<1441.0,-284.0>-<1462.0,-271.0>>
    • Eng contains a short segment B<<1123.0,-322.0>-<1146.0,-326.0>-<1172.0,-326.0>> and 76 more. [code: found-short-segments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<1055.0,698.0>--<1005.0,698.0>>/B<<1005.0,698.0>-<1128.0,673.0>-<1181.5,586.0>> = 11.488981202159193
    • Racute: L<<1055.0,698.0>--<1005.0,698.0>>/B<<1005.0,698.0>-<1128.0,673.0>-<1181.5,586.0>> = 11.488981202159193
    • Rcaron: L<<1055.0,698.0>--<1005.0,698.0>>/B<<1005.0,698.0>-<1128.0,673.0>-<1181.5,586.0>> = 11.488981202159193
    • braceleft.case: B<<485.5,824.0>-<421.0,756.0>-<289.0,750.0>>/B<<289.0,750.0>-<421.0,744.0>-<485.5,676.0>> = 5.205124404999463
    • braceleft: B<<532.5,735.5>-<466.0,644.0>-<301.0,637.0>>/B<<301.0,637.0>-<466.0,629.0>-<532.5,537.5>> = 5.205076772283028
    • braceright.case: B<<360.5,676.0>-<425.0,744.0>-<557.0,750.0>>/B<<557.0,750.0>-<425.0,756.0>-<360.5,824.0>> = 5.205124404999463
    • braceright: B<<404.5,537.5>-<471.0,629.0>-<636.0,637.0>>/B<<636.0,637.0>-<471.0,644.0>-<404.5,735.5>> = 5.205076772283028
    • eng: L<<513.0,1140.0>--<513.0,861.0>>/B<<513.0,861.0>-<549.0,1006.0>-<649.0,1082.0>> = 13.943230920553672
    • eth: B<<846.5,1055.0>-<946.0,1001.0>-<1000.0,879.0>>/B<<1000.0,879.0>-<977.0,998.0>-<935.5,1096.5>> = 12.936189670735347
    • m: L<<509.0,1139.0>--<509.0,889.0>>/B<<509.0,889.0>-<540.0,1018.0>-<626.0,1087.5>> = 13.512530635785994 and 36 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • k: L<<245.0,149.0>--<246.0,1424.0>> and uni0137: L<<245.0,149.0>--<246.0,1424.0>> [code: found-semi-vertical]

[8] MontaguSlab16pt-Regular.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • adieresis: X=804.0,Y=1499.0 (should be at cap-height 1500?)
    • adieresis: X=984.5,Y=1499.0 (should be at cap-height 1500?)
    • adieresis: X=351.5,Y=1499.0 (should be at cap-height 1500?)
    • adieresis: X=532.0,Y=1499.0 (should be at cap-height 1500?)
    • uni0203: X=433.0,Y=1500.5 (should be at cap-height 1500?)
    • uni0203: X=905.5,Y=1500.5 (should be at cap-height 1500?)
    • edieresis: X=788.0,Y=1499.0 (should be at cap-height 1500?)
    • edieresis: X=968.5,Y=1499.0 (should be at cap-height 1500?)
    • edieresis: X=335.5,Y=1499.0 (should be at cap-height 1500?)
    • edieresis: X=516.0,Y=1499.0 (should be at cap-height 1500?) and 44 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---
This check looks for outline segments which seem particularly short (less than
0.006%% 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.
  • WARN The following glyphs have segments which seem very short:
    • Ccedilla contains a short segment B<<959.0,-262.0>-<959.0,-230.0>-<937.0,-215.0>>
    • Ccedilla contains a short segment B<<937.0,-215.0>-<915.0,-200.0>-<880.0,-200.0>>
    • Ccedilla contains a short segment L<<892.0,-115.0>--<912.0,-115.0>>
    • Eogonek contains a short segment B<<1352.0,-314.0>-<1382.0,-314.0>-<1402.5,-306.0>>
    • Eogonek contains a short segment B<<1402.5,-306.0>-<1423.0,-298.0>-<1447.0,-282.0>>
    • Eng contains a short segment B<<1127.5,-190.5>-<1160.0,-212.0>-<1160.0,-253.0>>
    • Eng contains a short segment B<<1160.0,-253.0>-<1160.0,-286.0>-<1144.0,-306.5>>
    • Eng contains a short segment B<<1144.0,-306.5>-<1128.0,-327.0>-<1102.0,-337.0>>
    • Scedilla contains a short segment B<<918.0,-25.0>-<901.0,-25.0>-<885.0,-24.0>>
    • Scedilla contains a short segment L<<873.0,-115.0>--<893.0,-115.0>> and 67 more. [code: found-short-segments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<1031.0,699.0>--<969.0,699.0>>/B<<969.0,699.0>-<1090.0,672.0>-<1143.0,584.0>> = 12.578935237493035
    • Racute: L<<1031.0,699.0>--<969.0,699.0>>/B<<969.0,699.0>-<1090.0,672.0>-<1143.0,584.0>> = 12.578935237493035
    • Rcaron: L<<1031.0,699.0>--<969.0,699.0>>/B<<969.0,699.0>-<1090.0,672.0>-<1143.0,584.0>> = 12.578935237493035
    • braceleft.case: B<<453.5,822.5>-<390.0,756.0>-<266.0,750.0>>/B<<266.0,750.0>-<390.0,744.0>-<453.5,677.5>> = 5.540431594400349
    • braceleft: B<<497.0,727.5>-<430.0,642.0>-<280.0,635.0>>/B<<280.0,635.0>-<430.0,628.0>-<497.0,542.5>> = 5.343729186545131
    • braceright.case: B<<383.5,677.5>-<447.0,744.0>-<571.0,750.0>>/B<<571.0,750.0>-<447.0,756.0>-<383.5,822.5>> = 5.540431594400349
    • braceright: B<<427.0,542.5>-<494.0,628.0>-<644.0,635.0>>/B<<644.0,635.0>-<494.0,642.0>-<427.0,727.5>> = 5.343729186545131
    • eth: B<<864.5,1055.0>-<968.0,999.0>-<1024.0,876.0>>/B<<1024.0,876.0>-<998.0,1001.0>-<950.0,1104.0>> = 12.72905741338642
    • uni0156: L<<1031.0,699.0>--<969.0,699.0>>/B<<969.0,699.0>-<1090.0,672.0>-<1143.0,584.0>> = 12.578935237493035
    • uni0210: L<<1031.0,699.0>--<969.0,699.0>>/B<<969.0,699.0>-<1090.0,672.0>-<1143.0,584.0>> = 12.578935237493035 and 3 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • k: L<<258.0,116.0>--<259.0,1453.0>> and uni0137: L<<258.0,116.0>--<259.0,1453.0>> [code: found-semi-vertical]

[9] MontaguSlab16pt-SemiBold.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt SemiBold' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • eth: X=624.5,Y=1498.0 (should be at cap-height 1500?)
    • v: X=559.0,Y=-2.0 (should be at baseline 0?)
    • v: X=842.0,Y=-2.0 (should be at baseline 0?)
    • w: X=520.0,Y=-2.0 (should be at baseline 0?)
    • w: X=1507.0,Y=-2.0 (should be at baseline 0?)
    • w: X=1236.0,Y=-2.0 (should be at baseline 0?)
    • w: X=793.0,Y=-2.0 (should be at baseline 0?)
    • wacute: X=520.0,Y=-2.0 (should be at baseline 0?)
    • wacute: X=1507.0,Y=-2.0 (should be at baseline 0?)
    • wacute: X=1236.0,Y=-2.0 (should be at baseline 0?) and 26 more. [code: found-misalignments]
WARN: Do any segments have colinear vectors?
--- Rationale ---
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.
  • WARN The following glyphs have colinear vectors:
    • uhorn: L<<811.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>>
    • uni1EE9: L<<811.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>>
    • uni1EEB: L<<811.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>>
    • uni1EED: L<<811.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>>
    • uni1EEF: L<<811.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> and uni1EF1: L<<811.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> [code: found-colinear-vectors]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<1075.0,697.0>--<1033.0,697.0>>/B<<1033.0,697.0>-<1160.0,675.0>-<1213.5,588.5>> = 9.827724011163108
    • Racute: L<<1075.0,697.0>--<1033.0,697.0>>/B<<1033.0,697.0>-<1160.0,675.0>-<1213.5,588.5>> = 9.827724011163108
    • Rcaron: L<<1075.0,697.0>--<1033.0,697.0>>/B<<1033.0,697.0>-<1160.0,675.0>-<1213.5,588.5>> = 9.827724011163108
    • braceleft.case: B<<512.5,825.0>-<448.0,756.0>-<308.0,750.0>>/B<<308.0,750.0>-<448.0,744.0>-<512.5,675.0>> = 4.908063349054138
    • braceleft: B<<563.0,742.5>-<497.0,646.0>-<319.0,638.0>>/B<<319.0,638.0>-<497.0,631.0>-<563.0,534.5>> = 4.825403808579327
    • braceright.case: B<<341.0,675.0>-<406.0,744.0>-<546.0,750.0>>/B<<546.0,750.0>-<406.0,756.0>-<341.0,825.0>> = 4.908063349054138
    • braceright: B<<386.0,534.5>-<452.0,631.0>-<630.0,638.0>>/B<<630.0,638.0>-<452.0,646.0>-<386.0,742.5>> = 4.825403808579327
    • eng: L<<549.0,1149.0>--<549.0,879.0>>/B<<549.0,879.0>-<582.0,1017.0>-<678.0,1092.5>> = 13.448615051686525
    • eth: B<<831.0,1055.5>-<927.0,1003.0>-<979.0,882.0>>/B<<979.0,882.0>-<960.0,996.0>-<923.5,1090.5>> = 13.79339269298903
    • m: L<<544.0,1149.0>--<544.0,891.0>>/B<<544.0,891.0>-<572.0,1022.0>-<657.0,1094.5>> = 12.06488441052542 and 36 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • k: L<<235.0,177.0>--<236.0,1399.0>>
  • k: L<<572.0,1576.0>--<571.0,602.0>>
  • uni0137: L<<235.0,177.0>--<236.0,1399.0>> and uni0137: L<<572.0,1576.0>--<571.0,602.0>> [code: found-semi-vertical]

[8] MontaguSlab16pt-Thin.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt Thin' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=650.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EAA: X=650.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EC4: X=591.0,Y=2158.0 (should be at ascender 2160?)
    • uni1ED6: X=691.0,Y=2158.0 (should be at ascender 2160?)
    • Q: X=1154.0,Y=-2.0 (should be at baseline 0?)
    • Uogonek: X=1124.0,Y=-1.0 (should be at baseline 0?)
    • uni1EA3: X=774.0,Y=1498.0 (should be at cap-height 1500?)
    • uni1EA3: X=554.0,Y=1498.0 (should be at cap-height 1500?)
    • uni1EBB: X=778.0,Y=1498.0 (should be at cap-height 1500?)
    • uni1EBB: X=558.0,Y=1498.0 (should be at cap-height 1500?) and 37 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • braceleft.case: B<<375.5,818.5>-<314.0,756.0>-<210.0,750.0>>/B<<210.0,750.0>-<314.0,744.0>-<375.5,681.5>> = 6.603731348869935
    • braceleft: B<<409.5,707.5>-<341.0,637.0>-<228.0,630.0>>/B<<228.0,630.0>-<341.0,623.0>-<409.5,553.0>> = 7.089532911189703
    • braceright.case: B<<440.0,681.5>-<502.0,744.0>-<605.0,750.0>>/B<<605.0,750.0>-<502.0,756.0>-<440.0,818.5>> = 6.667701323073103
    • braceright: B<<481.5,553.0>-<550.0,623.0>-<663.0,630.0>>/B<<663.0,630.0>-<550.0,637.0>-<481.5,707.5>> = 7.089532911189703
    • eth: B<<910.5,1053.5>-<1024.0,991.0>-<1085.0,864.0>>/B<<1085.0,864.0>-<1049.0,1006.0>-<982.5,1121.5>> = 11.42970682912706
    • nine.dnom: B<<582.0,204.5>-<618.0,295.0>-<610.0,439.0>>/B<<610.0,439.0>-<600.0,369.0>-<536.0,315.5>> = 11.309932474020162
    • nine.lf: B<<1128.5,553.5>-<1166.0,742.0>-<1145.0,1014.0>>/B<<1145.0,1014.0>-<1132.0,811.0>-<1003.0,687.0>> = 8.078997569467882
    • nine.numr: B<<582.0,981.5>-<618.0,1072.0>-<610.0,1216.0>>/B<<610.0,1216.0>-<600.0,1146.0>-<536.0,1092.5>> = 11.309932474020162
    • nine: B<<1128.5,553.5>-<1166.0,742.0>-<1145.0,1014.0>>/B<<1145.0,1014.0>-<1132.0,811.0>-<1003.0,687.0>> = 8.078997569467882
    • six.dnom: B<<167.5,518.5>-<132.0,428.0>-<140.0,284.0>>/B<<140.0,284.0>-<151.0,354.0>-<214.5,407.5>> = 12.110420220283205 and 8 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • dotlessi.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • i.loclTRK.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • i.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • iacute.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • icircumflex.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • idieresis.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • igrave.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • imacron.ss01: L<<268.0,203.0>--<269.0,1054.0>>
  • l.ss01: L<<268.0,205.0>--<269.0,1513.0>>
  • lacute.ss01: L<<268.0,205.0>--<269.0,1513.0>> and 12 more. [code: found-semi-vertical]

[7] MontaguSlab144pt-Bold.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: c Contours detected: 2 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: cacute Contours detected: 3 Expected: 2
Glyph name: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: ccaron Contours detected: 3 Expected: 2
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
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: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EA9: X=1219.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EA3: X=608.0,Y=1499.5 (should be at cap-height 1500?)
    • uni1EC3: X=1190.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EBB: X=579.0,Y=1499.5 (should be at cap-height 1500?)
    • uni1EC9: X=341.0,Y=1499.5 (should be at cap-height 1500?)
    • uni1ED5: X=1249.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1ECF: X=638.0,Y=1499.5 (should be at cap-height 1500?)
    • uni1EDF: X=638.0,Y=1499.5 (should be at cap-height 1500?)
    • scedilla: X=542.0,Y=2.0 (should be at baseline 0?)
    • uni1EE7: X=626.0,Y=1499.5 (should be at cap-height 1500?) and 7 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<1392.5,896.5>-<1298.0,810.0>-<1139.0,786.0>>/B<<1139.0,786.0>-<1341.0,769.0>-<1456.0,681.5>> = 13.394207674479551
    • braceleft.case: B<<545.0,837.5>-<479.0,755.0>-<312.0,750.0>>/B<<312.0,750.0>-<479.0,745.0>-<545.0,662.5>> = 3.4298603910528938
    • braceleft: B<<503.0,654.0>-<418.0,605.0>-<262.0,600.0>>/B<<262.0,600.0>-<418.0,595.0>-<503.0,546.0>> = 3.6715494810911826
    • braceright.case: B<<335.5,662.5>-<402.0,745.0>-<568.0,750.0>>/B<<568.0,750.0>-<402.0,755.0>-<335.5,837.5>> = 3.4505097509451392
    • braceright: B<<457.0,546.0>-<542.0,595.0>-<698.0,600.0>>/B<<698.0,600.0>-<542.0,605.0>-<457.0,654.0>> = 3.6715494810911826
    • eng: L<<558.0,1140.0>--<558.0,870.0>>/B<<558.0,870.0>-<578.0,1005.0>-<657.0,1082.5>> = 8.426969021480678
    • eth: B<<730.0,1075.5>-<811.0,1035.0>-<853.0,935.0>>/B<<853.0,935.0>-<814.0,1112.0>-<722.0,1257.0>> = 10.356462865054173
    • m: L<<546.0,1140.0>--<546.0,869.0>>/B<<546.0,869.0>-<565.0,1004.0>-<641.5,1082.0>> = 8.01123161285598
    • n: L<<558.0,1140.0>--<558.0,870.0>>/B<<558.0,870.0>-<578.0,1005.0>-<657.0,1082.5>> = 8.426969021480678
    • nacute: L<<558.0,1140.0>--<558.0,870.0>>/B<<558.0,870.0>-<578.0,1005.0>-<657.0,1082.5>> = 8.426969021480678 and 30 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • k: L<<204.0,192.0>--<205.0,1308.0>>
  • k: L<<34.0,0.0>--<35.0,192.0>>
  • k: L<<605.0,1500.0>--<604.0,647.0>>
  • uni0137: L<<204.0,192.0>--<205.0,1308.0>>
  • uni0137: L<<34.0,0.0>--<35.0,192.0>> and uni0137: L<<605.0,1500.0>--<604.0,647.0>> [code: found-semi-vertical]

[8] MontaguSlab144pt-ExtraLight.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt ExtraLight' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=626.0,Y=2162.0 (should be at ascender 2160?)
    • uni1EA4: X=1239.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EA4: X=1320.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EA6: X=1003.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EA6: X=1084.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EAA: X=626.0,Y=2162.0 (should be at ascender 2160?)
    • uni1EBE: X=1163.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EBE: X=1244.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EC0: X=927.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EC0: X=1009.0,Y=2158.0 (should be at ascender 2160?) and 23 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<1244.0,881.0>-<1157.0,792.0>-<1003.0,769.0>>/B<<1003.0,769.0>-<1185.0,753.0>-<1288.0,660.0>> = 13.518451048348528
    • R: L<<936.0,725.0>--<846.0,725.0>>/B<<846.0,725.0>-<973.0,697.0>-<1031.0,608.0>> = 12.433235188095638
    • Racute: L<<936.0,725.0>--<846.0,725.0>>/B<<846.0,725.0>-<973.0,697.0>-<1031.0,608.0>> = 12.433235188095638
    • Rcaron: L<<936.0,725.0>--<846.0,725.0>>/B<<846.0,725.0>-<973.0,697.0>-<1031.0,608.0>> = 12.433235188095638
    • a: L<<870.0,190.0>--<870.0,317.0>>/B<<870.0,317.0>-<830.0,140.0>-<719.0,61.5>> = 12.734290795347581
    • aacute: L<<870.0,190.0>--<870.0,317.0>>/B<<870.0,317.0>-<830.0,140.0>-<719.0,61.5>> = 12.734290795347581
    • abreve: L<<870.0,190.0>--<870.0,317.0>>/B<<870.0,317.0>-<830.0,140.0>-<719.0,61.5>> = 12.734290795347581
    • acircumflex: L<<870.0,190.0>--<870.0,317.0>>/B<<870.0,317.0>-<830.0,140.0>-<719.0,61.5>> = 12.734290795347581
    • adieresis: L<<870.0,190.0>--<870.0,317.0>>/B<<870.0,317.0>-<830.0,140.0>-<719.0,61.5>> = 12.734290795347581
    • agrave: L<<870.0,190.0>--<870.0,317.0>>/B<<870.0,317.0>-<830.0,140.0>-<719.0,61.5>> = 12.734290795347581 and 77 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • dotlessi.ss01: L<<243.0,215.0>--<246.0,1032.0>>
  • i.loclTRK.ss01: L<<243.0,215.0>--<246.0,1032.0>>
  • i.ss01: L<<243.0,215.0>--<246.0,1032.0>>
  • iacute.ss01: L<<243.0,215.0>--<246.0,1032.0>>
  • icircumflex.ss01: L<<243.0,215.0>--<246.0,1032.0>>
  • idieresis.ss01: L<<243.0,215.0>--<246.0,1032.0>>
  • igrave.ss01: L<<243.0,215.0>--<246.0,1032.0>>
  • imacron.ss01: L<<243.0,215.0>--<246.0,1032.0>>
  • l.ss01: L<<219.0,223.0>--<223.0,1444.0>>
  • lacute.ss01: L<<219.0,223.0>--<223.0,1444.0>> and 13 more. [code: found-semi-vertical]

[8] MontaguSlab144pt-Light.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Light' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=568.0,Y=2161.0 (should be at ascender 2160?)
    • uni1EAA: X=568.0,Y=2161.0 (should be at ascender 2160?)
    • uni1EC4: X=486.0,Y=2161.0 (should be at ascender 2160?)
    • uni1ED6: X=578.0,Y=2161.0 (should be at ascender 2160?)
    • Ohorn: X=1557.5,Y=1501.5 (should be at cap-height 1500?)
    • uni1EDA: X=1557.5,Y=1501.5 (should be at cap-height 1500?)
    • uni1EE2: X=1557.5,Y=1501.5 (should be at cap-height 1500?)
    • uni1EDC: X=1557.5,Y=1501.5 (should be at cap-height 1500?)
    • uni1EDE: X=1557.5,Y=1501.5 (should be at cap-height 1500?)
    • uni1EE0: X=1557.5,Y=1501.5 (should be at cap-height 1500?) and 47 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<1267.0,883.5>-<1179.0,795.0>-<1025.0,771.0>>/B<<1025.0,771.0>-<1209.0,755.0>-<1313.5,663.0>> = 13.827699491738633
    • R: L<<950.0,724.0>--<860.0,724.0>>/B<<860.0,724.0>-<992.0,698.0>-<1052.5,610.0>> = 11.142889858339293
    • Racute: L<<950.0,724.0>--<860.0,724.0>>/B<<860.0,724.0>-<992.0,698.0>-<1052.5,610.0>> = 11.142889858339293
    • Rcaron: L<<950.0,724.0>--<860.0,724.0>>/B<<860.0,724.0>-<992.0,698.0>-<1052.5,610.0>> = 11.142889858339293
    • a: L<<858.0,211.0>--<858.0,307.0>>/B<<858.0,307.0>-<820.0,135.0>-<711.0,58.0>> = 12.458246440004897
    • aacute: L<<858.0,211.0>--<858.0,307.0>>/B<<858.0,307.0>-<820.0,135.0>-<711.0,58.0>> = 12.458246440004897
    • abreve: L<<858.0,211.0>--<858.0,307.0>>/B<<858.0,307.0>-<820.0,135.0>-<711.0,58.0>> = 12.458246440004897
    • acircumflex: L<<858.0,211.0>--<858.0,307.0>>/B<<858.0,307.0>-<820.0,135.0>-<711.0,58.0>> = 12.458246440004897
    • adieresis: L<<858.0,211.0>--<858.0,307.0>>/B<<858.0,307.0>-<820.0,135.0>-<711.0,58.0>> = 12.458246440004897
    • agrave: L<<858.0,211.0>--<858.0,307.0>>/B<<858.0,307.0>-<820.0,135.0>-<711.0,58.0>> = 12.458246440004897 and 71 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • l.ss01: L<<211.0,247.0>--<219.0,1425.0>>
  • lacute.ss01: L<<211.0,247.0>--<219.0,1425.0>>
  • lcaron.ss01: L<<211.0,247.0>--<219.0,1425.0>> and uni013C.ss01: L<<211.0,247.0>--<219.0,1425.0>> [code: found-semi-vertical]

[9] MontaguSlab144pt-Medium.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: c Contours detected: 2 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: cacute Contours detected: 3 Expected: 2
Glyph name: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: ccaron Contours detected: 3 Expected: 2
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
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: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Medium' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Eng: X=1308.0,Y=-1.0 (should be at baseline 0?)
    • eogonek: X=811.0,Y=2.0 (should be at baseline 0?)
    • uni01EB: X=856.0,Y=-1.0 (should be at baseline 0?)
    • uni2082: X=376.0,Y=2.0 (should be at baseline 0?)
    • dollar: X=843.0,Y=1499.0 (should be at cap-height 1500?) and florin: X=627.0,Y=-2.0 (should be at baseline 0?) [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---
This check looks for outline segments which seem particularly short (less than
0.006%% 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.
  • WARN The following glyphs have segments which seem very short:
    • Aogonek contains a short segment B<<1491.0,-312.0>-<1518.0,-312.0>-<1536.5,-305.0>>
    • Aogonek contains a short segment B<<1536.5,-305.0>-<1555.0,-298.0>-<1577.0,-285.0>>
    • Ccedilla contains a short segment B<<898.0,-258.0>-<898.0,-229.0>-<877.5,-214.5>>
    • Ccedilla contains a short segment B<<877.5,-214.5>-<857.0,-200.0>-<826.0,-200.0>>
    • Ccedilla contains a short segment L<<849.0,-105.0>--<867.0,-105.0>>
    • Eogonek contains a short segment B<<1293.0,-312.0>-<1319.0,-312.0>-<1338.0,-305.0>>
    • Eogonek contains a short segment B<<1338.0,-305.0>-<1357.0,-298.0>-<1378.0,-285.0>>
    • Eng contains a short segment B<<1112.0,-234.0>-<1112.0,-272.0>-<1091.5,-295.5>>
    • Eng contains a short segment B<<1091.5,-295.5>-<1071.0,-319.0>-<1036.0,-329.0>>
    • Scedilla contains a short segment B<<871.0,-29.0>-<864.0,-29.0>-<857.0,-29.0>> and 61 more. [code: found-short-segments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<1333.0,890.5>-<1242.0,803.0>-<1086.0,779.0>>/B<<1086.0,779.0>-<1279.0,762.0>-<1389.0,672.5>> = 13.779949218755245
    • R: L<<993.0,722.0>--<891.0,722.0>>/B<<891.0,722.0>-<1040.0,704.0>-<1111.5,618.5>> = 6.888258276994703
    • Racute: L<<993.0,722.0>--<891.0,722.0>>/B<<891.0,722.0>-<1040.0,704.0>-<1111.5,618.5>> = 6.888258276994703
    • Rcaron: L<<993.0,722.0>--<891.0,722.0>>/B<<891.0,722.0>-<1040.0,704.0>-<1111.5,618.5>> = 6.888258276994703
    • a: L<<824.0,270.0>--<824.0,276.0>>/B<<824.0,276.0>-<788.0,121.0>-<686.5,49.0>> = 13.075581099089868
    • aacute: L<<824.0,270.0>--<824.0,276.0>>/B<<824.0,276.0>-<788.0,121.0>-<686.5,49.0>> = 13.075581099089868
    • abreve: L<<824.0,270.0>--<824.0,276.0>>/B<<824.0,276.0>-<788.0,121.0>-<686.5,49.0>> = 13.075581099089868
    • acircumflex: L<<824.0,270.0>--<824.0,276.0>>/B<<824.0,276.0>-<788.0,121.0>-<686.5,49.0>> = 13.075581099089868
    • adieresis: L<<824.0,270.0>--<824.0,276.0>>/B<<824.0,276.0>-<788.0,121.0>-<686.5,49.0>> = 13.075581099089868
    • agrave: L<<824.0,270.0>--<824.0,276.0>>/B<<824.0,276.0>-<788.0,121.0>-<686.5,49.0>> = 13.075581099089868 and 75 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • k: L<<225.0,135.0>--<226.0,1365.0>>
  • k: L<<31.0,0.0>--<32.0,135.0>>
  • k: L<<504.0,1500.0>--<503.0,580.0>>
  • uni0137: L<<225.0,135.0>--<226.0,1365.0>>
  • uni0137: L<<31.0,0.0>--<32.0,135.0>> and uni0137: L<<504.0,1500.0>--<503.0,580.0>> [code: found-semi-vertical]

[7] MontaguSlab144pt-Regular.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: c Contours detected: 2 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: cacute Contours detected: 3 Expected: 2
Glyph name: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: ccaron Contours detected: 3 Expected: 2
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
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: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=824.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EAA: X=824.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EC4: X=734.0,Y=2158.0 (should be at ascender 2160?)
    • Eng: X=1329.0,Y=-2.0 (should be at baseline 0?)
    • uni1ED6: X=836.0,Y=2158.0 (should be at ascender 2160?)
    • uni1EBD: X=555.0,Y=1501.5 (should be at cap-height 1500?)
    • itilde: X=274.0,Y=1501.5 (should be at cap-height 1500?)
    • ntilde: X=613.0,Y=1501.5 (should be at cap-height 1500?)
    • uni1EE1: X=597.0,Y=1501.5 (should be at cap-height 1500?)
    • otilde: X=597.0,Y=1501.5 (should be at cap-height 1500?) and 8 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<1301.0,887.0>-<1212.0,799.0>-<1057.0,775.0>>/B<<1057.0,775.0>-<1245.0,759.0>-<1352.0,668.0>> = 13.666222760968326
    • R: L<<972.0,723.0>--<878.0,723.0>>/B<<878.0,723.0>-<1017.0,701.0>-<1083.0,614.0>> = 8.993792398755563
    • Racute: L<<972.0,723.0>--<878.0,723.0>>/B<<878.0,723.0>-<1017.0,701.0>-<1083.0,614.0>> = 8.993792398755563
    • Rcaron: L<<972.0,723.0>--<878.0,723.0>>/B<<878.0,723.0>-<1017.0,701.0>-<1083.0,614.0>> = 8.993792398755563
    • a: L<<841.0,241.0>--<841.0,292.0>>/B<<841.0,292.0>-<803.0,128.0>-<698.0,53.5>> = 13.04563706294857
    • aacute: L<<841.0,241.0>--<841.0,292.0>>/B<<841.0,292.0>-<803.0,128.0>-<698.0,53.5>> = 13.04563706294857
    • abreve: L<<841.0,241.0>--<841.0,292.0>>/B<<841.0,292.0>-<803.0,128.0>-<698.0,53.5>> = 13.04563706294857
    • acircumflex: L<<841.0,241.0>--<841.0,292.0>>/B<<841.0,292.0>-<803.0,128.0>-<698.0,53.5>> = 13.04563706294857
    • adieresis: L<<841.0,241.0>--<841.0,292.0>>/B<<841.0,292.0>-<803.0,128.0>-<698.0,53.5>> = 13.04563706294857
    • agrave: L<<841.0,241.0>--<841.0,292.0>>/B<<841.0,292.0>-<803.0,128.0>-<698.0,53.5>> = 13.04563706294857 and 79 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • k: L<<236.0,104.0>--<237.0,1396.0>>
  • k: L<<448.0,1500.0>--<447.0,544.0>>
  • uni0137: L<<236.0,104.0>--<237.0,1396.0>> and uni0137: L<<448.0,1500.0>--<447.0,544.0>> [code: found-semi-vertical]

[9] MontaguSlab144pt-SemiBold.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: c Contours detected: 2 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: cacute Contours detected: 3 Expected: 2
Glyph name: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: ccaron Contours detected: 3 Expected: 2
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
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: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt SemiBold' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Q: X=1175.0,Y=2.0 (should be at baseline 0?)
    • atilde: X=351.0,Y=1498.0 (should be at cap-height 1500?)
    • uni1EBD: X=331.0,Y=1501.0 (should be at cap-height 1500?)
    • itilde: X=78.0,Y=1501.0 (should be at cap-height 1500?)
    • ntilde: X=406.0,Y=1501.0 (should be at cap-height 1500?)
    • uni1EE1: X=384.0,Y=1501.0 (should be at cap-height 1500?)
    • uni01EB: X=884.0,Y=1.0 (should be at baseline 0?)
    • otilde: X=384.0,Y=1501.0 (should be at cap-height 1500?)
    • uni022D: X=384.0,Y=1501.0 (should be at cap-height 1500?)
    • scedilla: X=548.0,Y=-1.0 (should be at baseline 0?) and 28 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---
This check looks for outline segments which seem particularly short (less than
0.006%% 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.
  • WARN The following glyphs have segments which seem very short:
    • Aogonek contains a short segment B<<1505.0,-300.0>-<1529.0,-300.0>-<1545.5,-294.5>>
    • Aogonek contains a short segment B<<1545.5,-294.5>-<1562.0,-289.0>-<1581.0,-278.0>>
    • AE contains a short segment L<<1405.0,857.0>--<1482.0,857.0>>
    • AEacute contains a short segment L<<1405.0,857.0>--<1482.0,857.0>>
    • Ccedilla contains a short segment B<<891.0,-255.0>-<891.0,-229.0>-<873.0,-216.5>>
    • Ccedilla contains a short segment B<<873.0,-216.5>-<855.0,-204.0>-<828.0,-204.0>>
    • Ccedilla contains a short segment L<<864.0,-95.0>--<878.0,-95.0>>
    • Eogonek contains a short segment B<<1243.5,-276.0>-<1270.0,-300.0>-<1312.0,-300.0>>
    • Eogonek contains a short segment B<<1312.0,-300.0>-<1335.0,-300.0>-<1352.0,-294.5>>
    • Eogonek contains a short segment B<<1352.0,-294.5>-<1369.0,-289.0>-<1388.0,-278.0>> and 71 more. [code: found-short-segments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<1360.5,893.0>-<1268.0,806.0>-<1111.0,782.0>>/B<<1111.0,782.0>-<1308.0,765.0>-<1420.0,676.5>> = 13.623394964149693
    • R: L<<1011.0,721.0>--<895.0,721.0>>/B<<895.0,721.0>-<1055.0,708.0>-<1133.5,624.5>> = 4.645078425891569
    • Racute: L<<1011.0,721.0>--<895.0,721.0>>/B<<895.0,721.0>-<1055.0,708.0>-<1133.5,624.5>> = 4.645078425891569
    • Rcaron: L<<1011.0,721.0>--<895.0,721.0>>/B<<895.0,721.0>-<1055.0,708.0>-<1133.5,624.5>> = 4.645078425891569
    • braceleft.case: B<<505.5,834.5>-<440.0,756.0>-<286.0,750.0>>/B<<286.0,750.0>-<440.0,744.0>-<505.5,665.5>> = 4.462349216062345
    • braceleft: B<<535.0,706.0>-<457.0,607.0>-<245.0,600.0>>/B<<245.0,600.0>-<457.0,593.0>-<535.0,494.0>> = 3.782309403370746
    • braceright.case: B<<357.5,665.5>-<423.0,744.0>-<577.0,750.0>>/B<<577.0,750.0>-<423.0,756.0>-<357.5,834.5>> = 4.462349216062345
    • braceright: B<<403.0,494.0>-<481.0,593.0>-<693.0,600.0>>/B<<693.0,600.0>-<481.0,607.0>-<403.0,706.0>> = 3.782309403370746
    • c: B<<989.0,836.0>-<982.0,860.0>-<971.0,881.0>>/L<<971.0,881.0>--<989.0,836.0>> = 5.844565877386801
    • c: L<<971.0,881.0>--<989.0,836.0>>/B<<989.0,836.0>-<982.0,860.0>-<971.0,881.0>> = 5.541204778039893 and 50 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • k: L<<215.0,161.0>--<216.0,1339.0>>
  • k: L<<33.0,0.0>--<34.0,161.0>>
  • k: L<<550.0,388.0>--<549.0,161.0>>
  • uni0137: L<<215.0,161.0>--<216.0,1339.0>>
  • uni0137: L<<33.0,0.0>--<34.0,161.0>> and uni0137: L<<550.0,388.0>--<549.0,161.0>> [code: found-semi-vertical]

[8] MontaguSlab144pt-Thin.ttf
WARN: Stricter unitsPerEm criteria for Google Fonts.
--- Rationale ---
Even though the OpenType spec allows unitsPerEm to be any value between 16 and
16384, the Google Fonts project aims at a narrower set of reasonable values.
The spec suggests usage of powers of two in order to get some performance
improvements on legacy renderers, so those values are acceptable.
But values of 500 or 1000 are also acceptable, with the added benefit that it
makes upm math easier for designers, while the performance hit of not using a
power of two is most likely negligible nowadays.
Additionally, values above 2048 would likely result in unreasonable filesize
increases.
  • WARN Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3
Glyph name: approxequal Contours detected: 0 Expected: 2
Glyph name: asciicircum Contours detected: 0 Expected: 1
Glyph name: asciitilde Contours detected: 0 Expected: 1
Glyph name: at Contours detected: 0 Expected: 2
Glyph name: copyright Contours detected: 0 Expected: 3
Glyph name: currency Contours detected: 0 Expected: 2
Glyph name: dagger Contours detected: 0 Expected: 1 or 2
Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: germandbls Contours detected: 0 Expected: 1
Glyph name: greater Contours detected: 0 Expected: 1
Glyph name: greaterequal Contours detected: 0 Expected: 2
Glyph name: less Contours detected: 0 Expected: 1
Glyph name: lessequal Contours detected: 0 Expected: 2
Glyph name: lira Contours detected: 0 Expected: 1
Glyph name: logicalnot Contours detected: 0 Expected: 1
Glyph name: notequal Contours detected: 0 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3
Glyph name: registered Contours detected: 0 Expected: 3 or 4
Glyph name: section Contours detected: 0 Expected: 2
Glyph name: sterling Contours detected: 0 Expected: 1 or 2
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni00B5 Contours detected: 0 Expected: 1
Glyph name: uni018F Contours detected: 0 Expected: 2
Glyph name: uni1E9E Contours detected: 0 Expected: 1
Glyph name: uni20AD Contours detected: 0 Expected: 1
Glyph name: uni20BA Contours detected: 0 Expected: 1
Glyph name: uni20BC Contours detected: 0 Expected: 1
Glyph name: uni27E8 Contours detected: 0 Expected: 1
Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + i
    • i + f
    • f + l
    • l + f
    • i + l

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Thin' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Checking unitsPerEm value is reasonable.
--- Rationale ---
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.
  • WARN In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Q: X=1046.0,Y=-1.0 (should be at baseline 0?)
    • Uogonek: X=1052.0,Y=-2.0 (should be at baseline 0?)
    • eogonek: X=736.0,Y=-2.0 (should be at baseline 0?)
    • g: X=199.5,Y=2.0 (should be at baseline 0?)
    • gbreve: X=199.5,Y=2.0 (should be at baseline 0?)
    • gcaron: X=199.5,Y=2.0 (should be at baseline 0?)
    • gcircumflex: X=199.5,Y=2.0 (should be at baseline 0?)
    • uni0123: X=199.5,Y=2.0 (should be at baseline 0?)
    • gdotaccent: X=199.5,Y=2.0 (should be at baseline 0?)
    • uni1E21: X=199.5,Y=2.0 (should be at baseline 0?) and 28 more. [code: found-misalignments]
WARN: Do any segments have colinear vectors?
--- Rationale ---
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.
  • WARN The following glyphs have colinear vectors:
    • Ccedilla: L<<770.0,10.0>--<770.0,10.0>> -> L<<770.0,10.0>--<814.0,10.0>>
    • b: L<<271.0,325.0>--<271.0,324.0>> -> L<<271.0,324.0>--<271.0,0.0>>
    • d: L<<1022.0,0.0>--<1022.0,324.0>> -> L<<1022.0,324.0>--<1022.0,325.0>>
    • dcaron: L<<1030.0,0.0>--<1030.0,324.0>> -> L<<1030.0,324.0>--<1030.0,325.0>>
    • uni01C6: L<<1022.0,0.0>--<1022.0,324.0>> -> L<<1022.0,324.0>--<1022.0,325.0>>
    • uni1E0D: L<<1022.0,0.0>--<1022.0,324.0>> -> L<<1022.0,324.0>--<1022.0,325.0>> and uni1E0F: L<<1022.0,0.0>--<1022.0,324.0>> -> L<<1022.0,324.0>--<1022.0,325.0>> [code: found-colinear-vectors]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<1221.0,878.5>-<1135.0,789.0>-<982.0,766.0>>/B<<982.0,766.0>-<1161.0,751.0>-<1262.0,657.5>> = 13.339207542781917
    • C: B<<1196.0,1411.0>-<1347.0,1296.0>-<1396.0,1104.0>>/L<<1396.0,1104.0>--<1396.0,1500.0>> = 14.316759118933225
    • Cacute: B<<1196.0,1411.0>-<1347.0,1296.0>-<1396.0,1104.0>>/L<<1396.0,1104.0>--<1396.0,1500.0>> = 14.316759118933225
    • Ccaron: B<<1196.0,1411.0>-<1347.0,1296.0>-<1396.0,1104.0>>/L<<1396.0,1104.0>--<1396.0,1500.0>> = 14.316759118933225
    • Ccedilla: B<<1196.0,1411.0>-<1347.0,1296.0>-<1396.0,1104.0>>/L<<1396.0,1104.0>--<1396.0,1500.0>> = 14.316759118933225
    • Ccircumflex: B<<1196.0,1411.0>-<1347.0,1296.0>-<1396.0,1104.0>>/L<<1396.0,1104.0>--<1396.0,1500.0>> = 14.316759118933225
    • Cdotaccent: B<<1196.0,1411.0>-<1347.0,1296.0>-<1396.0,1104.0>>/L<<1396.0,1104.0>--<1396.0,1500.0>> = 14.316759118933225
    • Euro: B<<1392.0,1411.0>-<1543.0,1296.0>-<1592.0,1104.0>>/L<<1592.0,1104.0>--<1592.0,1500.0>> = 14.316759118933225
    • G: L<<1408.0,0.0>--<1408.0,418.0>>/B<<1408.0,418.0>-<1357.0,218.0>-<1213.0,95.0>> = 14.305551846621958
    • Gbreve: L<<1408.0,0.0>--<1408.0,418.0>>/B<<1408.0,418.0>-<1357.0,218.0>-<1213.0,95.0>> = 14.305551846621958 and 106 more. [code: found-jaggy-segments]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 0 114 1359 85 1103 0
0% 0% 4% 51% 3% 41% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@mightybart
Copy link
Collaborator

unitsPerEm warning noted, will fix as soon as I finish all visual checks.

@vv-monsalve
Copy link
Collaborator Author

vv-monsalve commented Jun 25, 2021

New FB - VF report under v0.7.38 after pulling latest files at commit 6784445

Fontbakery report 16 pt

Fontbakery version: 0.7.38

[6] MontaguSlab16pt-Bold.ttf
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 1137, but got 1136 instead [code: ascent]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Eng: X=595.0,Y=-1.0 (should be at baseline 0?)
    • uni1E9E: X=543.5,Y=680.0 (should be at cap-height 682?)
    • uni1EA3: X=326.0,Y=680.0 (should be at cap-height 682?)
    • atilde: X=487.0,Y=684.0 (should be at cap-height 682?)
    • eth: X=280.0,Y=684.0 (should be at cap-height 682?)
    • uni1EBB: X=307.0,Y=680.0 (should be at cap-height 682?)
    • uni1EBD: X=468.0,Y=684.0 (should be at cap-height 682?)
    • f: X=17.0,Y=527.0 (should be at x-height 528?)
    • f: X=121.0,Y=527.0 (should be at x-height 528?)
    • f: X=302.0,Y=527.0 (should be at x-height 528?) and 75 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<500.0,316.0>--<488.0,316.0>>/B<<488.0,316.0>-<545.0,306.0>-<569.0,267.5>> = 9.950626687951587
    • Racute: L<<500.0,316.0>--<488.0,316.0>>/B<<488.0,316.0>-<545.0,306.0>-<569.0,267.5>> = 9.950626687951587
    • Rcaron: L<<500.0,316.0>--<488.0,316.0>>/B<<488.0,316.0>-<545.0,306.0>-<569.0,267.5>> = 9.950626687951587
    • braceleft.case: B<<262.5,375.5>-<233.0,343.0>-<165.0,341.0>>/B<<165.0,341.0>-<233.0,339.0>-<262.5,306.5>> = 3.3693686357926036
    • braceleft: B<<286.5,341.0>-<257.0,294.0>-<169.0,291.0>>/B<<169.0,291.0>-<257.0,287.0>-<286.5,241.0>> = 4.555071251899331
    • braceright.case: B<<184.5,306.5>-<214.0,339.0>-<281.0,341.0>>/B<<281.0,341.0>-<214.0,343.0>-<184.5,375.5>> = 3.419628088282934
    • braceright: B<<193.5,241.0>-<223.0,287.0>-<311.0,291.0>>/B<<311.0,291.0>-<223.0,294.0>-<193.5,341.0>> = 4.555071251899331
    • eng: L<<269.0,527.0>--<269.0,410.0>>/B<<269.0,410.0>-<282.0,469.0>-<323.5,502.5>> = 12.425942865427485
    • eth: B<<370.0,480.0>-<412.0,457.0>-<435.0,402.0>>/B<<435.0,402.0>-<427.0,451.0>-<413.0,492.0>> = 13.421193167892039
    • m: L<<266.0,527.0>--<266.0,406.0>>/B<<266.0,406.0>-<277.0,466.0>-<315.0,500.5>> = 10.388857815469619 and 38 more. [code: found-jaggy-segments]

[9] MontaguSlab16pt-ExtraLight.ttf
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 1137, but got 1136 instead [code: ascent]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt ExtraLight' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=434.0,Y=983.0 (should be at ascender 982?)
    • uni1EA4: X=579.0,Y=981.0 (should be at ascender 982?)
    • uni1EA4: X=622.0,Y=981.0 (should be at ascender 982?)
    • uni1EA6: X=470.0,Y=981.0 (should be at ascender 982?)
    • uni1EA6: X=513.0,Y=981.0 (should be at ascender 982?)
    • uni1EAA: X=434.0,Y=983.0 (should be at ascender 982?)
    • uni1EBE: X=550.0,Y=981.0 (should be at ascender 982?)
    • uni1EBE: X=593.0,Y=981.0 (should be at ascender 982?)
    • uni1EC0: X=441.0,Y=981.0 (should be at ascender 982?)
    • uni1EC0: X=484.0,Y=981.0 (should be at ascender 982?) and 89 more. [code: found-misalignments]
WARN: Do any segments have colinear vectors?
--- Rationale ---
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.
  • WARN The following glyphs have colinear vectors:
    • uhorn: L<<385.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>>
    • uni1EE9: L<<385.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>>
    • uni1EEB: L<<385.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>>
    • uni1EED: L<<385.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>>
    • uni1EEF: L<<385.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> and uni1EF1: L<<385.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> [code: found-colinear-vectors]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • braceleft.case: B<<182.5,373.0>-<154.0,344.0>-<104.0,341.0>>/B<<104.0,341.0>-<154.0,338.0>-<182.5,309.0>> = 6.86726072490102
    • braceleft: B<<199.5,324.0>-<169.0,290.0>-<113.0,287.0>>/B<<113.0,287.0>-<169.0,284.0>-<199.5,250.0>> = 6.13297100225171
    • braceright.case: B<<205.5,309.0>-<234.0,338.0>-<284.0,341.0>>/B<<284.0,341.0>-<234.0,344.0>-<205.5,373.0>> = 6.86726072490102
    • braceright: B<<223.0,250.0>-<254.0,284.0>-<310.0,287.0>>/B<<310.0,287.0>-<254.0,290.0>-<223.0,324.0>> = 6.13297100225171
    • eth: B<<408.5,478.5>-<459.0,451.0>-<486.0,393.0>>/B<<486.0,393.0>-<471.0,455.0>-<443.0,506.5>> = 11.36224731414825
    • nine.lf: B<<502.5,249.0>-<519.0,330.0>-<510.0,445.0>>/B<<510.0,445.0>-<503.0,360.0>-<446.5,307.5>> = 9.182748750618295
    • nine: B<<502.5,249.0>-<519.0,330.0>-<510.0,445.0>>/B<<510.0,445.0>-<503.0,360.0>-<446.5,307.5>> = 9.182748750618295
    • six.lf: B<<120.0,433.0>-<104.0,352.0>-<112.0,237.0>>/B<<112.0,237.0>-<120.0,322.0>-<176.5,374.5>> = 9.356087880728927
    • six: B<<120.0,433.0>-<104.0,352.0>-<112.0,237.0>>/B<<112.0,237.0>-<120.0,322.0>-<176.5,374.5>> = 9.356087880728927 and yen: L<<365.0,270.0>--<300.0,359.0>>/L<<300.0,359.0>--<309.0,346.0>> = 1.4468877051371514 [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • dotlessi.ss01: L<<121.0,101.0>--<123.0,474.0>>
  • i.loclTRK.ss01: L<<121.0,101.0>--<123.0,474.0>>
  • i.ss01: L<<121.0,101.0>--<123.0,474.0>>
  • iacute.ss01: L<<121.0,101.0>--<123.0,474.0>>
  • icircumflex.ss01: L<<121.0,101.0>--<123.0,474.0>>
  • idieresis.ss01: L<<121.0,101.0>--<123.0,474.0>>
  • igrave.ss01: L<<121.0,101.0>--<123.0,474.0>>
  • imacron.ss01: L<<121.0,101.0>--<123.0,474.0>>
  • l.ss01: L<<118.0,105.0>--<120.0,681.0>>
  • lacute.ss01: L<<118.0,105.0>--<120.0,681.0>> and 6 more. [code: found-semi-vertical]

[8] MontaguSlab16pt-Light.ttf
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 1137, but got 1136 instead [code: ascent]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt Light' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=397.0,Y=980.0 (should be at ascender 982?)
    • uni1EAA: X=397.0,Y=980.0 (should be at ascender 982?)
    • uni1EC4: X=365.0,Y=980.0 (should be at ascender 982?)
    • uni01C8: X=852.0,Y=680.0 (should be at cap-height 682?)
    • Eng: X=643.0,Y=-1.0 (should be at baseline 0?)
    • uni01CB: X=980.0,Y=680.0 (should be at cap-height 682?)
    • uni1ED6: X=415.0,Y=980.0 (should be at ascender 982?)
    • Ohorn: X=749.5,Y=681.0 (should be at cap-height 682?)
    • uni1EDA: X=749.5,Y=681.0 (should be at cap-height 682?)
    • uni1EE2: X=749.5,Y=681.0 (should be at cap-height 682?) and 70 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<458.0,318.0>--<422.0,318.0>>/B<<422.0,318.0>-<477.0,305.0>-<501.5,264.5>> = 13.298570330494275
    • Racute: L<<458.0,318.0>--<422.0,318.0>>/B<<422.0,318.0>-<477.0,305.0>-<501.5,264.5>> = 13.298570330494275
    • Rcaron: L<<458.0,318.0>--<422.0,318.0>>/B<<422.0,318.0>-<477.0,305.0>-<501.5,264.5>> = 13.298570330494275
    • braceleft.case: B<<194.5,373.5>-<166.0,344.0>-<113.0,341.0>>/B<<113.0,341.0>-<166.0,338.0>-<194.5,308.5>> = 6.479400592204234
    • braceleft: B<<213.0,326.5>-<182.0,290.0>-<121.0,287.0>>/B<<121.0,287.0>-<182.0,284.0>-<213.0,248.5>> = 5.631113368422407
    • braceright.case: B<<202.5,308.5>-<231.0,338.0>-<283.0,341.0>>/B<<283.0,341.0>-<231.0,344.0>-<202.5,373.5>> = 6.603731348869935
    • braceright: B<<219.0,248.5>-<250.0,284.0>-<311.0,287.0>>/B<<311.0,287.0>-<250.0,290.0>-<219.0,326.5>> = 5.631113368422407
    • eth: B<<402.5,478.5>-<451.0,451.0>-<478.0,394.0>>/B<<478.0,394.0>-<464.0,455.0>-<438.5,504.5>> = 12.420176817240739
    • nine.lf: B<<492.5,247.0>-<508.0,323.0>-<500.0,429.0>>/B<<500.0,429.0>-<491.0,351.0>-<437.0,302.5>> = 10.89797217504365
    • nine: B<<492.5,247.0>-<508.0,323.0>-<500.0,429.0>>/B<<500.0,429.0>-<491.0,351.0>-<437.0,302.5>> = 10.89797217504365 and 7 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • dotlessi.ss01: L<<120.0,109.0>--<122.0,469.0>>
  • i.loclTRK.ss01: L<<120.0,109.0>--<122.0,469.0>>
  • i.ss01: L<<120.0,109.0>--<122.0,469.0>>
  • iacute.ss01: L<<120.0,109.0>--<122.0,469.0>>
  • icircumflex.ss01: L<<120.0,109.0>--<122.0,469.0>>
  • idieresis.ss01: L<<120.0,109.0>--<122.0,469.0>>
  • igrave.ss01: L<<120.0,109.0>--<122.0,469.0>>
  • imacron.ss01: L<<120.0,109.0>--<122.0,469.0>>
  • l.ss01: L<<113.0,117.0>--<117.0,673.0>>
  • lacute.ss01: L<<113.0,117.0>--<117.0,673.0>> and 4 more. [code: found-semi-vertical]

[8] MontaguSlab16pt-Medium.ttf
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 1137, but got 1136 instead [code: ascent]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt Medium' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EA8: X=488.0,Y=981.0 (should be at ascender 982?)
    • uni1EC2: X=450.0,Y=981.0 (should be at ascender 982?)
    • Eng: X=618.0,Y=-1.0 (should be at baseline 0?)
    • uni1ED4: X=504.0,Y=981.0 (should be at ascender 982?)
    • Q: X=551.0,Y=-2.0 (should be at baseline 0?)
    • R: X=33.0,Y=684.0 (should be at cap-height 682?)
    • R: X=477.0,Y=684.0 (should be at cap-height 682?)
    • Racute: X=33.0,Y=684.0 (should be at cap-height 682?)
    • Racute: X=477.0,Y=684.0 (should be at cap-height 682?)
    • Rcaron: X=33.0,Y=684.0 (should be at cap-height 682?) and 71 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---
This check looks for outline segments which seem particularly short (less than
0.006%% 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.
  • WARN The following glyphs have segments which seem very short:
    • Aogonek contains a short segment B<<700.0,-135.0>-<712.0,-135.0>-<720.5,-132.0>>
    • Aogonek contains a short segment B<<720.5,-132.0>-<729.0,-129.0>-<739.0,-123.0>>
    • Ccedilla contains a short segment B<<420.5,-139.0>-<430.0,-131.0>-<430.0,-118.0>>
    • Ccedilla contains a short segment B<<430.0,-118.0>-<430.0,-105.0>-<421.0,-99.0>>
    • Ccedilla contains a short segment B<<421.0,-99.0>-<412.0,-93.0>-<398.0,-93.0>>
    • Ccedilla contains a short segment L<<410.0,-47.0>--<417.0,-47.0>>
    • Eogonek contains a short segment B<<582.0,-93.0>-<582.0,-113.0>-<594.5,-124.0>>
    • Eogonek contains a short segment B<<594.5,-124.0>-<607.0,-135.0>-<626.0,-135.0>>
    • Eogonek contains a short segment B<<626.0,-135.0>-<638.0,-135.0>-<646.5,-132.0>>
    • Eogonek contains a short segment B<<646.5,-132.0>-<655.0,-129.0>-<665.0,-123.0>> and 88 more. [code: found-short-segments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<480.0,317.0>--<456.0,317.0>>/B<<456.0,317.0>-<513.0,306.0>-<537.0,266.5>> = 10.922804719869257
    • Racute: L<<480.0,317.0>--<456.0,317.0>>/B<<456.0,317.0>-<513.0,306.0>-<537.0,266.5>> = 10.922804719869257
    • Rcaron: L<<480.0,317.0>--<456.0,317.0>>/B<<456.0,317.0>-<513.0,306.0>-<537.0,266.5>> = 10.922804719869257
    • braceleft.case: B<<230.0,375.0>-<201.0,344.0>-<140.0,341.0>>/B<<140.0,341.0>-<201.0,338.0>-<230.0,307.0>> = 5.631113368422407
    • braceleft: B<<252.0,334.0>-<222.0,292.0>-<146.0,289.0>>/B<<146.0,289.0>-<222.0,286.0>-<252.0,244.5>> = 4.521003822282459
    • braceright.case: B<<193.0,307.0>-<222.0,338.0>-<282.0,341.0>>/B<<282.0,341.0>-<222.0,344.0>-<193.0,375.0>> = 5.72481045222338
    • braceright: B<<205.5,244.5>-<236.0,286.0>-<311.0,289.0>>/B<<311.0,289.0>-<236.0,292.0>-<205.5,334.0>> = 4.58122008527693
    • eth: B<<385.5,479.0>-<431.0,454.0>-<455.0,398.0>>/B<<455.0,398.0>-<445.0,453.0>-<426.0,498.0>> = 12.89374404488216
    • m: L<<231.0,518.0>--<231.0,405.0>>/B<<231.0,405.0>-<245.0,463.0>-<284.0,494.0>> = 13.570434385161475
    • u: L<<462.0,0.0>--<462.0,126.0>>/B<<462.0,126.0>-<446.0,59.0>-<400.0,24.5>> = 13.431028870681681 and 27 more. [code: found-jaggy-segments]

[5] MontaguSlab16pt-Regular.ttf
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 1137, but got 1136 instead [code: ascent]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<469.0,318.0>--<439.0,318.0>>/B<<439.0,318.0>-<495.0,306.0>-<519.5,266.0>> = 12.094757077012089
    • Racute: L<<469.0,318.0>--<439.0,318.0>>/B<<439.0,318.0>-<495.0,306.0>-<519.5,266.0>> = 12.094757077012089
    • Rcaron: L<<469.0,318.0>--<439.0,318.0>>/B<<439.0,318.0>-<495.0,306.0>-<519.5,266.0>> = 12.094757077012089
    • braceleft.case: B<<213.0,374.0>-<184.0,344.0>-<127.0,341.0>>/B<<127.0,341.0>-<184.0,338.0>-<213.0,308.0>> = 6.025575008366673
    • braceleft: B<<232.5,330.0>-<202.0,291.0>-<134.0,288.0>>/B<<134.0,288.0>-<202.0,285.0>-<232.5,246.5>> = 5.052233823239003
    • braceright.case: B<<197.5,308.0>-<226.0,338.0>-<283.0,341.0>>/B<<283.0,341.0>-<226.0,344.0>-<197.5,374.0>> = 6.025575008366673
    • braceright: B<<212.5,246.5>-<243.0,285.0>-<311.0,288.0>>/B<<311.0,288.0>-<243.0,291.0>-<212.5,330.0>> = 5.052233823239003
    • eth: B<<394.0,479.0>-<441.0,453.0>-<466.0,396.0>>/B<<466.0,396.0>-<454.0,453.0>-<432.0,500.5>> = 11.79342968491043
    • uni0156: L<<469.0,318.0>--<439.0,318.0>>/B<<439.0,318.0>-<495.0,306.0>-<519.5,266.0>> = 12.094757077012089
    • uni0210: L<<469.0,318.0>--<439.0,318.0>>/B<<439.0,318.0>-<495.0,306.0>-<519.5,266.0>> = 12.094757077012089 and 3 more. [code: found-jaggy-segments]

[7] MontaguSlab16pt-SemiBold.ttf
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 1137, but got 1136 instead [code: ascent]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt SemiBold' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are any segments inordinately short?
--- Rationale ---
This check looks for outline segments which seem particularly short (less than
0.006%% 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.
  • WARN The following glyphs have segments which seem very short:
    • AE contains a short segment L<<686.0,395.0>--<720.0,395.0>>
    • AEacute contains a short segment L<<686.0,395.0>--<720.0,395.0>>
    • Ccedilla contains a short segment B<<424.0,-116.0>-<424.0,-106.0>-<416.5,-101.0>>
    • Ccedilla contains a short segment B<<416.5,-101.0>-<409.0,-96.0>-<397.0,-96.0>>
    • Ccedilla contains a short segment L<<415.0,-43.0>--<420.0,-43.0>>
    • Eogonek contains a short segment B<<592.0,-90.0>-<592.0,-109.0>-<604.5,-118.5>>
    • Eogonek contains a short segment B<<604.5,-118.5>-<617.0,-128.0>-<636.0,-128.0>>
    • Eng contains a short segment B<<519.0,-139.0>-<523.0,-139.0>-<527.0,-139.0>>
    • Q contains a short segment B<<451.0,-15.0>-<443.0,-16.0>-<434.0,-16.0>>
    • Scedilla contains a short segment B<<426.0,-12.0>-<421.0,-12.0>-<416.0,-12.0>> and 86 more. [code: found-short-segments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<489.0,317.0>--<471.0,317.0>>/B<<471.0,317.0>-<528.0,306.0>-<552.0,267.0>> = 10.922804719869257
    • Racute: L<<489.0,317.0>--<471.0,317.0>>/B<<471.0,317.0>-<528.0,306.0>-<552.0,267.0>> = 10.922804719869257
    • Rcaron: L<<489.0,317.0>--<471.0,317.0>>/B<<471.0,317.0>-<528.0,306.0>-<552.0,267.0>> = 10.922804719869257
    • braceleft.case: B<<245.0,375.5>-<216.0,344.0>-<152.0,341.0>>/B<<152.0,341.0>-<216.0,338.0>-<245.0,306.5>> = 5.36755031893786
    • braceleft: B<<268.0,337.0>-<238.0,293.0>-<157.0,290.0>>/B<<157.0,290.0>-<238.0,286.0>-<268.0,242.5>> = 4.948220974822635
    • braceright.case: B<<188.5,306.5>-<218.0,338.0>-<282.0,341.0>>/B<<282.0,341.0>-<218.0,344.0>-<188.5,375.5>> = 5.36755031893786
    • braceright: B<<200.0,242.5>-<230.0,286.0>-<311.0,290.0>>/B<<311.0,290.0>-<230.0,293.0>-<200.0,337.0>> = 4.948220974822635
    • dollar: B<<465.5,246.5>-<436.0,256.0>-<402.0,261.0>>/L<<402.0,261.0>--<402.0,261.0>> = 8.365886124032546
    • eng: L<<250.0,522.0>--<250.0,400.0>>/B<<250.0,400.0>-<265.0,463.0>-<308.5,497.0>> = 13.392497753751098
    • eth: B<<378.5,479.5>-<422.0,455.0>-<446.0,400.0>>/B<<446.0,400.0>-<437.0,452.0>-<420.0,495.0>> = 13.755405563154715 and 38 more. [code: found-jaggy-segments]

[8] MontaguSlab16pt-Thin.ttf
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- 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 1137, but got 1136 instead [code: ascent]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt Thin' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=275.0,Y=984.0 (should be at ascender 982?)
    • uni1EB4: X=295.0,Y=981.0 (should be at ascender 982?)
    • uni1EAA: X=275.0,Y=984.0 (should be at ascender 982?)
    • uni1EAA: X=295.0,Y=981.0 (should be at ascender 982?)
    • uni1EC4: X=248.0,Y=984.0 (should be at ascender 982?)
    • uni1EC4: X=268.0,Y=981.0 (should be at ascender 982?)
    • Eng: X=660.0,Y=-2.0 (should be at baseline 0?)
    • uni1ED6: X=294.0,Y=984.0 (should be at ascender 982?)
    • uni1ED6: X=314.0,Y=981.0 (should be at ascender 982?)
    • Uogonek: X=509.0,Y=-1.0 (should be at baseline 0?) and 47 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • braceleft.case: B<<170.5,372.5>-<142.0,344.0>-<95.0,341.0>>/B<<95.0,341.0>-<142.0,338.0>-<170.5,310.0>> = 7.304445560612643
    • braceleft: B<<186.0,321.5>-<155.0,289.0>-<104.0,286.0>>/B<<104.0,286.0>-<155.0,283.0>-<186.0,251.0>> = 6.732921326859609
    • braceright.case: B<<209.0,310.0>-<237.0,338.0>-<284.0,341.0>>/B<<284.0,341.0>-<237.0,344.0>-<209.0,372.5>> = 7.304445560612643
    • braceright: B<<228.0,251.0>-<259.0,283.0>-<310.0,286.0>>/B<<310.0,286.0>-<259.0,289.0>-<228.0,321.5>> = 6.732921326859609
    • eogonek: B<<438.5,36.5>-<408.0,11.0>-<359.0,0.0>>/L<<359.0,0.0>--<359.0,0.0>> = 12.652556500557967
    • eth: B<<414.5,478.5>-<466.0,450.0>-<493.0,391.0>>/B<<493.0,391.0>-<477.0,456.0>-<446.5,509.0>> = 10.761466193915874
    • nine.dnom: B<<264.5,93.5>-<281.0,135.0>-<277.0,200.0>>/B<<277.0,200.0>-<273.0,168.0>-<244.0,143.5>> = 10.646469725824005
    • nine.lf: B<<512.0,252.0>-<529.0,338.0>-<520.0,461.0>>/B<<520.0,461.0>-<515.0,369.0>-<456.0,312.5>> = 7.29575677860915
    • nine.numr: B<<264.5,446.5>-<281.0,488.0>-<277.0,553.0>>/B<<277.0,553.0>-<273.0,521.0>-<244.0,496.5>> = 10.646469725824005
    • nine: B<<512.0,252.0>-<529.0,338.0>-<520.0,461.0>>/B<<520.0,461.0>-<515.0,369.0>-<456.0,312.5>> = 7.29575677860915 and 9 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • f_t.liga: L<<546.0,158.0>--<547.0,477.0>>
  • t: L<<156.0,158.0>--<157.0,477.0>>
  • t_t.liga: L<<156.0,155.0>--<157.0,477.0>>
  • t_t.liga: L<<571.0,158.0>--<572.0,477.0>>
  • tcaron: L<<156.0,158.0>--<157.0,477.0>>
  • uni0163: L<<156.0,158.0>--<157.0,477.0>>
  • uni021B: L<<156.0,158.0>--<157.0,477.0>>
  • uni1E6D: L<<156.0,158.0>--<157.0,477.0>> and uni1E6F: L<<156.0,158.0>--<157.0,477.0>> [code: found-semi-vertical]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 7 44 680 43 585 0
0% 1% 3% 50% 3% 43% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@vv-monsalve
Copy link
Collaborator Author

Fontbakery report 144pt

Fontbakery version: 0.7.38

[5] MontaguSlab144pt-Bold.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB2: X=535.0,Y=981.5 (should be at ascender 982?)
    • uni1EA8: X=643.5,Y=981.0 (should be at ascender 982?)
    • uni1EA8: X=587.0,Y=984.0 (should be at ascender 982?)
    • uni1EC2: X=591.5,Y=981.0 (should be at ascender 982?)
    • uni1EC2: X=535.0,Y=984.0 (should be at ascender 982?)
    • uni1ED4: X=650.5,Y=981.0 (should be at ascender 982?)
    • uni1ED4: X=594.0,Y=984.0 (should be at ascender 982?)
    • uni1EA3: X=275.5,Y=681.5 (should be at cap-height 682?)
    • atilde: X=311.0,Y=680.0 (should be at cap-height 682?)
    • uni1EBB: X=262.5,Y=681.5 (should be at cap-height 682?) and 34 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<632.5,407.0>-<589.0,368.0>-<517.0,357.0>>/B<<517.0,357.0>-<609.0,350.0>-<661.5,310.0>> = 13.03743253281051
    • at: L<<535.0,166.0>--<535.0,168.0>>/B<<535.0,168.0>-<522.0,100.0>-<479.0,67.5>> = 10.823011226207075
    • braceleft.case: B<<256.0,380.5>-<226.0,343.0>-<150.0,341.0>>/B<<150.0,341.0>-<226.0,339.0>-<256.0,301.5>> = 3.014871517549838
    • braceleft: B<<236.5,297.5>-<198.0,275.0>-<127.0,273.0>>/B<<127.0,273.0>-<198.0,271.0>-<236.5,248.5>> = 3.2270778657622397
    • braceright.case: B<<162.0,301.5>-<192.0,339.0>-<268.0,341.0>>/B<<268.0,341.0>-<192.0,343.0>-<162.0,380.5>> = 3.014871517549838
    • braceright: B<<206.5,248.5>-<245.0,271.0>-<316.0,273.0>>/B<<316.0,273.0>-<245.0,275.0>-<206.5,297.5>> = 3.2270778657622397
    • eng: L<<254.0,518.0>--<254.0,397.0>>/B<<254.0,397.0>-<263.0,458.0>-<299.0,492.5>> = 8.392925187392485
    • eth: B<<332.0,488.5>-<369.0,470.0>-<388.0,424.0>>/B<<388.0,424.0>-<370.0,505.0>-<328.0,572.0>> = 9.913945656142763
    • m: L<<248.0,518.0>--<248.0,390.0>>/B<<248.0,390.0>-<256.0,454.0>-<290.5,490.5>> = 7.125016348901757
    • n: L<<254.0,518.0>--<254.0,397.0>>/B<<254.0,397.0>-<263.0,458.0>-<299.0,492.5>> = 8.392925187392485 and 33 more. [code: found-jaggy-segments]

[7] MontaguSlab144pt-ExtraLight.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt ExtraLight' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Do any segments have colinear vectors?
--- Rationale ---
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.
  • WARN The following glyphs have colinear vectors:
    • ampersand: L<<261.0,382.0>--<262.0,381.0>> -> L<<262.0,381.0>--<498.0,116.0>> [code: found-colinear-vectors]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<565.5,400.0>-<526.0,360.0>-<455.0,350.0>>/B<<455.0,350.0>-<538.0,343.0>-<585.5,300.5>> = 12.83785915174798
    • R: L<<426.0,330.0>--<375.0,330.0>>/B<<375.0,330.0>-<430.0,317.0>-<456.0,276.5>> = 13.298570330494275
    • Racute: L<<426.0,330.0>--<375.0,330.0>>/B<<375.0,330.0>-<430.0,317.0>-<456.0,276.5>> = 13.298570330494275
    • Rcaron: L<<426.0,330.0>--<375.0,330.0>>/B<<375.0,330.0>-<430.0,317.0>-<456.0,276.5>> = 13.298570330494275
    • a: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461
    • aacute: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461
    • abreve: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461
    • acircumflex: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461
    • adieresis: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461
    • agrave: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 and 88 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • dotlessi.ss01: L<<110.0,97.0>--<112.0,470.0>>
  • f_t.liga: L<<490.0,138.0>--<492.0,468.0>>
  • i.loclTRK.ss01: L<<110.0,97.0>--<112.0,470.0>>
  • i.ss01: L<<110.0,97.0>--<112.0,470.0>>
  • iacute.ss01: L<<110.0,97.0>--<112.0,470.0>>
  • icircumflex.ss01: L<<110.0,97.0>--<112.0,470.0>>
  • idieresis.ss01: L<<110.0,97.0>--<112.0,470.0>>
  • igrave.ss01: L<<110.0,97.0>--<112.0,470.0>>
  • imacron.ss01: L<<110.0,97.0>--<112.0,470.0>>
  • l.ss01: L<<99.0,101.0>--<101.0,657.0>> and 15 more. [code: found-semi-vertical]

[7] MontaguSlab144pt-Light.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Light' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=384.0,Y=981.0 (should be at ascender 982?)
    • uni1EAA: X=383.0,Y=981.0 (should be at ascender 982?)
    • uni1EC4: X=346.0,Y=981.0 (should be at ascender 982?)
    • Eng: X=614.0,Y=-1.0 (should be at baseline 0?)
    • uni1ED6: X=388.0,Y=981.0 (should be at ascender 982?)
    • uni1EA3: X=177.0,Y=683.0 (should be at cap-height 682?)
    • atilde: X=206.0,Y=683.0 (should be at cap-height 682?)
    • uni1EC3: X=445.0,Y=680.0 (should be at cap-height 682?)
    • uni1EBB: X=247.0,Y=681.0 (should be at cap-height 682?)
    • eogonek: X=349.0,Y=1.0 (should be at baseline 0?) and 75 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<575.5,401.0>-<535.0,361.0>-<464.0,351.0>>/B<<464.0,351.0>-<549.0,344.0>-<597.0,302.0>> = 12.724945318027565
    • R: L<<432.0,329.0>--<382.0,329.0>>/B<<382.0,329.0>-<440.0,318.0>-<467.5,278.0>> = 10.738897100905428
    • Racute: L<<432.0,329.0>--<382.0,329.0>>/B<<382.0,329.0>-<440.0,318.0>-<467.5,278.0>> = 10.738897100905428
    • Rcaron: L<<432.0,329.0>--<382.0,329.0>>/B<<382.0,329.0>-<440.0,318.0>-<467.5,278.0>> = 10.738897100905428
    • a: L<<390.0,95.0>--<390.0,139.0>>/B<<390.0,139.0>-<372.0,61.0>-<322.5,26.5>> = 12.994616791916512
    • aacute: L<<390.0,95.0>--<390.0,139.0>>/B<<390.0,139.0>-<372.0,61.0>-<322.5,26.5>> = 12.994616791916512
    • abreve: L<<390.0,95.0>--<390.0,139.0>>/B<<390.0,139.0>-<372.0,61.0>-<322.5,26.5>> = 12.994616791916512
    • acircumflex: L<<390.0,95.0>--<390.0,139.0>>/B<<390.0,139.0>-<372.0,61.0>-<322.5,26.5>> = 12.994616791916512
    • adieresis: L<<390.0,95.0>--<390.0,139.0>>/B<<390.0,139.0>-<372.0,61.0>-<322.5,26.5>> = 12.994616791916512
    • agrave: L<<390.0,95.0>--<390.0,139.0>>/B<<390.0,139.0>-<372.0,61.0>-<322.5,26.5>> = 12.994616791916512 and 86 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • dotlessi.ss01: L<<108.0,105.0>--<111.0,464.0>>
  • i.loclTRK.ss01: L<<108.0,105.0>--<111.0,464.0>>
  • i.ss01: L<<108.0,105.0>--<111.0,464.0>>
  • iacute.ss01: L<<108.0,105.0>--<111.0,464.0>>
  • icircumflex.ss01: L<<108.0,105.0>--<111.0,464.0>>
  • idieresis.ss01: L<<108.0,105.0>--<111.0,464.0>>
  • igrave.ss01: L<<108.0,105.0>--<111.0,464.0>>
  • imacron.ss01: L<<108.0,105.0>--<111.0,464.0>>
  • l.ss01: L<<96.0,112.0>--<99.0,648.0>>
  • lacute.ss01: L<<96.0,112.0>--<99.0,648.0>> and 4 more. [code: found-semi-vertical]

[5] MontaguSlab144pt-Medium.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: c Contours detected: 2 Expected: 1
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: cacute Contours detected: 3 Expected: 2
Glyph name: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: ccaron Contours detected: 3 Expected: 2
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
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: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Medium' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<605.5,404.0>-<563.0,364.0>-<491.0,354.0>>/B<<491.0,354.0>-<580.0,347.0>-<631.0,306.0>> = 12.404314317626188
    • R: L<<452.0,328.0>--<398.0,328.0>>/B<<398.0,328.0>-<466.0,321.0>-<499.0,282.0>> = 5.8773926066431
    • Racute: L<<452.0,328.0>--<398.0,328.0>>/B<<398.0,328.0>-<466.0,321.0>-<499.0,282.0>> = 5.8773926066431
    • Rcaron: L<<452.0,328.0>--<398.0,328.0>>/B<<398.0,328.0>-<466.0,321.0>-<499.0,282.0>> = 5.8773926066431
    • a: L<<374.0,122.0>--<374.0,123.0>>/B<<374.0,123.0>-<357.0,54.0>-<311.0,22.0>> = 13.840695491655588
    • aacute: L<<374.0,122.0>--<374.0,123.0>>/B<<374.0,123.0>-<357.0,54.0>-<311.0,22.0>> = 13.840695491655588
    • abreve: L<<374.0,122.0>--<374.0,123.0>>/B<<374.0,123.0>-<357.0,54.0>-<311.0,22.0>> = 13.840695491655588
    • acircumflex: L<<374.0,122.0>--<374.0,123.0>>/B<<374.0,123.0>-<357.0,54.0>-<311.0,22.0>> = 13.840695491655588
    • adieresis: L<<374.0,122.0>--<374.0,123.0>>/B<<374.0,123.0>-<357.0,54.0>-<311.0,22.0>> = 13.840695491655588
    • agrave: L<<374.0,122.0>--<374.0,123.0>>/B<<374.0,123.0>-<357.0,54.0>-<311.0,22.0>> = 13.840695491655588 and 78 more. [code: found-jaggy-segments]

[4] MontaguSlab144pt-Regular.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: c Contours detected: 2 Expected: 1
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: cacute Contours detected: 3 Expected: 2
Glyph name: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: ccaron Contours detected: 3 Expected: 2
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
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: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<590.5,402.5>-<549.0,363.0>-<477.0,353.0>>/B<<477.0,353.0>-<564.0,346.0>-<614.0,304.5>> = 12.507258369221715
    • R: L<<442.0,329.0>--<389.0,329.0>>/B<<389.0,329.0>-<453.0,320.0>-<483.5,280.5>> = 8.004728857292836
    • Racute: L<<442.0,329.0>--<389.0,329.0>>/B<<389.0,329.0>-<453.0,320.0>-<483.5,280.5>> = 8.004728857292836
    • Rcaron: L<<442.0,329.0>--<389.0,329.0>>/B<<389.0,329.0>-<453.0,320.0>-<483.5,280.5>> = 8.004728857292836
    • a: L<<382.0,109.0>--<382.0,131.0>>/B<<382.0,131.0>-<365.0,58.0>-<317.0,24.5>> = 13.109208198154267
    • aacute: L<<382.0,109.0>--<382.0,131.0>>/B<<382.0,131.0>-<365.0,58.0>-<317.0,24.5>> = 13.109208198154267
    • abreve: L<<382.0,109.0>--<382.0,131.0>>/B<<382.0,131.0>-<365.0,58.0>-<317.0,24.5>> = 13.109208198154267
    • acircumflex: L<<382.0,109.0>--<382.0,131.0>>/B<<382.0,131.0>-<365.0,58.0>-<317.0,24.5>> = 13.109208198154267
    • adieresis: L<<382.0,109.0>--<382.0,131.0>>/B<<382.0,131.0>-<365.0,58.0>-<317.0,24.5>> = 13.109208198154267
    • agrave: L<<382.0,109.0>--<382.0,131.0>>/B<<382.0,131.0>-<365.0,58.0>-<317.0,24.5>> = 13.109208198154267 and 81 more. [code: found-jaggy-segments]

[6] MontaguSlab144pt-SemiBold.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: c Contours detected: 2 Expected: 1
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: cacute Contours detected: 3 Expected: 2
Glyph name: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: ccaron Contours detected: 3 Expected: 2
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
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: ccircumflex Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt SemiBold' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EA8: X=628.5,Y=984.0 (should be at ascender 982?)
    • uni1EC2: X=580.0,Y=984.0 (should be at ascender 982?)
    • uni1ED4: X=635.0,Y=984.0 (should be at ascender 982?)
    • Q: X=534.0,Y=1.0 (should be at baseline 0?)
    • W: X=292.0,Y=-1.0 (should be at baseline 0?)
    • W: X=792.0,Y=-1.0 (should be at baseline 0?)
    • W: X=670.0,Y=-1.0 (should be at baseline 0?)
    • W: X=412.0,Y=-1.0 (should be at baseline 0?)
    • Wacute: X=292.0,Y=-1.0 (should be at baseline 0?)
    • Wacute: X=792.0,Y=-1.0 (should be at baseline 0?) and 70 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<618.0,405.5>-<575.0,366.0>-<503.0,356.0>>/B<<503.0,356.0>-<593.0,348.0>-<645.0,308.0>> = 12.98677056297302
    • R: L<<460.0,328.0>--<402.0,328.0>>/B<<402.0,328.0>-<476.0,322.0>-<512.0,284.0>> = 4.635463426902618
    • Racute: L<<460.0,328.0>--<402.0,328.0>>/B<<402.0,328.0>-<476.0,322.0>-<512.0,284.0>> = 4.635463426902618
    • Rcaron: L<<460.0,328.0>--<402.0,328.0>>/B<<402.0,328.0>-<476.0,322.0>-<512.0,284.0>> = 4.635463426902618
    • at: L<<542.0,162.0>--<542.0,170.0>>/B<<542.0,170.0>-<528.0,101.0>-<483.5,68.5>> = 11.469530332866904
    • braceleft.case: B<<237.5,379.0>-<208.0,344.0>-<138.0,341.0>>/B<<138.0,341.0>-<208.0,338.0>-<237.5,302.5>> = 4.908063349054138
    • braceleft: B<<251.5,321.0>-<216.0,276.0>-<119.0,273.0>>/B<<119.0,273.0>-<216.0,270.0>-<251.5,225.0>> = 3.542939480068082
    • braceright.case: B<<172.5,302.5>-<202.0,338.0>-<272.0,341.0>>/B<<272.0,341.0>-<202.0,344.0>-<172.5,379.0>> = 4.908063349054138
    • braceright: B<<181.5,225.0>-<217.0,270.0>-<314.0,273.0>>/B<<314.0,273.0>-<217.0,276.0>-<181.5,321.0>> = 3.542939480068082
    • c: B<<450.0,380.0>-<447.0,389.0>-<443.0,397.0>>/L<<443.0,397.0>--<450.0,380.0>> = 4.184916125118319 and 53 more. [code: found-jaggy-segments]

[6] MontaguSlab144pt-Thin.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Are there caret positions declared for every ligature?
--- 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 or UFOs, ligature carets can be defined as anchors with names
starting with 'caret_'. These can be compiled with fontmake as of version
v2.4.0.
  • WARN This font lacks caret positioning values for these ligature glyphs:

    • f_b.liga
    • f_h.liga
    • f_k.liga
    • f_t.liga
    • t_t.liga

    [code: incomplete-caret-pos-data]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Thin' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Do any segments have colinear vectors?
--- Rationale ---
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.
  • WARN The following glyphs have colinear vectors:
    • Ccedilla: L<<350.0,5.0>--<350.0,5.0>> -> L<<350.0,5.0>--<370.0,5.0>> [code: found-colinear-vectors]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<555.0,399.5>-<516.0,359.0>-<446.0,349.0>>/B<<446.0,349.0>-<528.0,342.0>-<574.0,299.0>> = 13.009376137162674
    • C: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484
    • Cacute: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484
    • Ccaron: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484
    • Ccedilla: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484
    • Ccircumflex: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484
    • Cdotaccent: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484
    • Euro: B<<632.0,641.0>-<701.0,588.0>-<723.0,500.0>>/L<<723.0,500.0>--<723.0,682.0>> = 14.036243467926484
    • G: L<<640.0,0.0>--<640.0,190.0>>/B<<640.0,190.0>-<617.0,99.0>-<551.5,43.0>> = 14.184294248270799
    • Gbreve: L<<640.0,0.0>--<640.0,190.0>>/B<<640.0,190.0>-<617.0,99.0>-<551.5,43.0>> = 14.184294248270799 and 115 more. [code: found-jaggy-segments]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 0 40 680 43 596 0
0% 0% 3% 50% 3% 44% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@mightybart
Copy link
Collaborator

mightybart commented Jul 12, 2021

New report for current files (26 July):

Fontbakery report

Fontbakery version: 0.8.0

[1] Family checks
WARN: Is the command `ftxvalidator` (Apple Font Tool Suite) available?
--- Rationale ---
There's no reasonable (and legal) way to run the command `ftxvalidator` of the
Apple Font Tool Suite on a non-macOS machine. I.e. on GNU+Linux or Windows etc.
If Font Bakery is not running on an OSX machine, the machine running Font Bakery
could access `ftxvalidator` on OSX, e.g. via ssh or a remote procedure call
(rpc).
There's an ssh example implementation at:
https://github.com/googlefonts/fontbakery/blob/main/prebuilt/workarounds
/ftxvalidator/ssh-implementation/ftxvalidator
  • WARN Could not find ftxvalidator. [code: ftxvalidator-available]

[5] MontaguSlab16pt-Bold.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EA8: X=508.0,Y=984.0 (should be at ascender 982?)
    • uni1EC2: X=468.0,Y=984.0 (should be at ascender 982?)
    • Eng: X=605.0,Y=-2.0 (should be at baseline 0?)
    • uni1ED4: X=525.0,Y=984.0 (should be at ascender 982?)
    • uni1E9E: X=554.5,Y=680.0 (should be at cap-height 682?)
    • uni1EB3: X=330.0,Y=981.0 (should be at ascender 982?)
    • uni1EA3: X=326.0,Y=680.0 (should be at cap-height 682?)
    • eth: X=278.0,Y=684.0 (should be at cap-height 682?)
    • uni1EBB: X=309.0,Y=680.0 (should be at cap-height 682?)
    • uni1EC9: X=193.0,Y=680.0 (should be at cap-height 682?) and 35 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<506.0,316.0>--<490.0,316.0>>/B<<490.0,316.0>-<546.0,306.0>-<569.5,267.5>> = 10.124671655397806
    • Racute: L<<506.0,316.0>--<490.0,316.0>>/B<<490.0,316.0>-<546.0,306.0>-<569.5,267.5>> = 10.124671655397806
    • Rcaron: L<<506.0,316.0>--<490.0,316.0>>/B<<490.0,316.0>-<546.0,306.0>-<569.5,267.5>> = 10.124671655397806
    • braceleft.case: B<<263.5,375.0>-<221.0,342.0>-<135.0,341.0>>/B<<135.0,341.0>-<221.0,340.0>-<263.5,307.0>> = 1.3323999403663624
    • braceleft: B<<252.0,314.5>-<216.0,293.0>-<149.0,291.0>>/B<<149.0,291.0>-<216.0,289.0>-<252.0,267.5>> = 3.419628088282934
    • braceright.case: B<<197.0,307.0>-<239.0,340.0>-<325.0,341.0>>/B<<325.0,341.0>-<239.0,342.0>-<197.0,375.0>> = 1.3323999403663624
    • braceright: B<<228.5,267.5>-<265.0,289.0>-<331.0,291.0>>/B<<331.0,291.0>-<265.0,293.0>-<228.5,314.5>> = 3.4714091778567253
    • eng: L<<268.0,528.0>--<268.0,410.0>>/B<<268.0,410.0>-<281.0,469.0>-<322.5,502.5>> = 12.425942865427485
    • eth: B<<368.0,480.0>-<410.0,457.0>-<433.0,402.0>>/B<<433.0,402.0>-<425.0,454.0>-<409.0,497.5>> = 13.94763268253713
    • lira: B<<365.5,193.5>-<345.0,161.0>-<291.0,150.0>>/L<<291.0,150.0>--<699.0,150.0>> = 11.513831184487014 and 41 more. [code: found-jaggy-segments]

[8] MontaguSlab16pt-ExtraLight.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: ellipsis Contours detected: 2 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ellipsis Contours detected: 2 Expected: 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt ExtraLight' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=508.5,Y=981.0 (should be at ascender 982?)
    • uni1EAA: X=508.5,Y=981.0 (should be at ascender 982?)
    • uni1EC4: X=481.5,Y=981.0 (should be at ascender 982?)
    • Eng: X=652.0,Y=-1.0 (should be at baseline 0?)
    • uni1ED6: X=527.5,Y=981.0 (should be at ascender 982?)
    • Q: X=530.0,Y=-1.0 (should be at baseline 0?)
    • uni1EA3: X=209.5,Y=681.0 (should be at cap-height 682?)
    • atilde: X=267.5,Y=681.5 (should be at cap-height 682?)
    • b: X=115.0,Y=681.0 (should be at cap-height 682?)
    • b: X=31.0,Y=681.0 (should be at cap-height 682?) and 80 more. [code: found-misalignments]
WARN: Do any segments have colinear vectors?
--- Rationale ---
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.
  • WARN The following glyphs have colinear vectors:
    • uhorn: L<<384.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>>
    • uni1EE9: L<<384.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>>
    • uni1EEB: L<<384.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>>
    • uni1EED: L<<384.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>>
    • uni1EEF: L<<384.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> and uni1EF1: L<<384.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> [code: found-colinear-vectors]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • braceleft.case: B<<182.5,373.0>-<153.0,344.0>-<100.0,341.0>>/B<<100.0,341.0>-<153.0,338.0>-<182.5,309.0>> = 6.479400592204234
    • braceleft: B<<199.0,324.0>-<168.0,290.0>-<110.0,287.0>>/B<<110.0,287.0>-<168.0,284.0>-<199.0,249.5>> = 5.921872268327562
    • braceright.case: B<<207.5,309.0>-<237.0,338.0>-<289.0,341.0>>/B<<289.0,341.0>-<237.0,344.0>-<207.5,373.0>> = 6.603731348869935
    • braceright: B<<223.5,249.5>-<255.0,284.0>-<313.0,287.0>>/B<<313.0,287.0>-<255.0,290.0>-<223.5,324.0>> = 5.921872268327562
    • eth: B<<408.0,478.5>-<458.0,451.0>-<485.0,393.0>>/B<<485.0,393.0>-<470.0,456.0>-<442.0,507.0>> = 11.570292077055889
    • nine.dnom: B<<249.5,60.5>-<285.0,103.0>-<281.0,194.0>>/B<<281.0,194.0>-<275.0,164.0>-<246.5,142.5>> = 13.826808130959718
    • nine.lf: B<<512.0,197.5>-<542.0,288.0>-<532.0,437.0>>/B<<532.0,437.0>-<524.0,355.0>-<466.5,304.0>> = 9.41179414191719
    • nine.numr: B<<249.5,408.5>-<285.0,451.0>-<281.0,542.0>>/B<<281.0,542.0>-<275.0,512.0>-<246.5,490.5>> = 13.826808130959718
    • nine: B<<512.0,197.5>-<542.0,288.0>-<532.0,437.0>>/B<<532.0,437.0>-<524.0,355.0>-<466.5,304.0>> = 9.41179414191719
    • six.dnom: B<<111.0,272.5>-<75.0,230.0>-<80.0,139.0>>/B<<80.0,139.0>-<85.0,169.0>-<114.0,190.5>> = 12.607279672723635 and 7 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • tbar: L<<178.0,163.0>--<179.0,300.0>> and tbar: L<<180.0,330.0>--<181.0,470.0>> [code: found-semi-vertical]

[7] MontaguSlab16pt-Light.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: ellipsis Contours detected: 2 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ellipsis Contours detected: 2 Expected: 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt Light' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EA8: X=463.0,Y=984.0 (should be at ascender 982?)
    • uni1EC2: X=434.0,Y=984.0 (should be at ascender 982?)
    • Eng: X=645.0,Y=-1.0 (should be at baseline 0?)
    • uni1ED4: X=482.0,Y=984.0 (should be at ascender 982?)
    • Ohorn: X=749.5,Y=680.5 (should be at cap-height 682?)
    • uni1EDA: X=749.5,Y=680.5 (should be at cap-height 682?)
    • uni1EE2: X=749.5,Y=680.5 (should be at cap-height 682?)
    • uni1EDC: X=749.5,Y=680.5 (should be at cap-height 682?)
    • uni1EDE: X=749.5,Y=680.5 (should be at cap-height 682?)
    • uni1EE0: X=749.5,Y=680.5 (should be at cap-height 682?) and 54 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<459.0,318.0>--<423.0,318.0>>/B<<423.0,318.0>-<477.0,305.0>-<501.5,264.5>> = 13.535856369134248
    • Racute: L<<459.0,318.0>--<423.0,318.0>>/B<<423.0,318.0>-<477.0,305.0>-<501.5,264.5>> = 13.535856369134248
    • Rcaron: L<<459.0,318.0>--<423.0,318.0>>/B<<423.0,318.0>-<477.0,305.0>-<501.5,264.5>> = 13.535856369134248
    • braceleft.case: B<<195.5,373.5>-<164.0,344.0>-<106.0,341.0>>/B<<106.0,341.0>-<164.0,338.0>-<195.5,308.5>> = 5.921872268327562
    • braceleft: B<<212.0,326.5>-<180.0,290.0>-<116.0,287.0>>/B<<116.0,287.0>-<180.0,284.0>-<212.0,248.0>> = 5.36755031893786
    • braceright.case: B<<205.5,308.5>-<237.0,338.0>-<295.0,341.0>>/B<<295.0,341.0>-<237.0,344.0>-<205.5,373.5>> = 5.921872268327562
    • braceright: B<<220.0,248.0>-<252.0,284.0>-<316.0,287.0>>/B<<316.0,287.0>-<252.0,290.0>-<220.0,326.5>> = 5.36755031893786
    • eth: B<<402.0,478.5>-<451.0,451.0>-<477.0,394.0>>/B<<477.0,394.0>-<463.0,455.0>-<437.5,505.5>> = 11.593643563484813
    • nine.lf: B<<504.0,200.5>-<531.0,286.0>-<523.0,421.0>>/B<<523.0,421.0>-<513.0,346.0>-<457.0,299.0>> = 10.985982788387767
    • nine: B<<504.0,200.5>-<531.0,286.0>-<523.0,421.0>>/B<<523.0,421.0>-<513.0,346.0>-<457.0,299.0>> = 10.985982788387767 and 7 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • tbar: L<<175.0,167.0>--<176.0,296.0>> and tbar: L<<177.0,333.0>--<178.0,463.0>> [code: found-semi-vertical]

[6] MontaguSlab16pt-Medium.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: ellipsis Contours detected: 2 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ellipsis Contours detected: 2 Expected: 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt Medium' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=389.0,Y=984.0 (should be at ascender 982?)
    • uni1EA8: X=487.0,Y=984.0 (should be at ascender 982?)
    • uni1EAA: X=389.0,Y=984.0 (should be at ascender 982?)
    • uni1EC2: X=452.0,Y=984.0 (should be at ascender 982?)
    • uni1EC4: X=355.0,Y=984.0 (should be at ascender 982?)
    • Eng: X=624.0,Y=-2.0 (should be at baseline 0?)
    • uni1ED4: X=504.0,Y=984.0 (should be at ascender 982?)
    • uni1ED6: X=407.0,Y=984.0 (should be at ascender 982?)
    • R: X=34.0,Y=684.0 (should be at cap-height 682?)
    • R: X=481.0,Y=684.0 (should be at cap-height 682?) and 62 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<484.0,317.0>--<458.0,317.0>>/B<<458.0,317.0>-<513.0,306.0>-<537.0,266.0>> = 11.309932474020195
    • Racute: L<<484.0,317.0>--<458.0,317.0>>/B<<458.0,317.0>-<513.0,306.0>-<537.0,266.0>> = 11.309932474020195
    • Rcaron: L<<484.0,317.0>--<458.0,317.0>>/B<<458.0,317.0>-<513.0,306.0>-<537.0,266.0>> = 11.309932474020195
    • braceleft.case: B<<231.0,374.5>-<194.0,343.0>-<121.0,341.0>>/B<<121.0,341.0>-<194.0,339.0>-<231.0,307.5>> = 3.138709609497799
    • braceleft: B<<249.0,334.0>-<216.0,292.0>-<133.0,289.0>>/B<<133.0,289.0>-<216.0,286.0>-<249.0,244.5>> = 4.14006130608207
    • braceright.case: B<<201.0,307.5>-<238.0,339.0>-<311.0,341.0>>/B<<311.0,341.0>-<238.0,343.0>-<201.0,374.5>> = 3.138709609497799
    • braceright: B<<208.0,244.5>-<241.0,286.0>-<324.0,289.0>>/B<<324.0,289.0>-<241.0,292.0>-<208.0,334.0>> = 4.14006130608207
    • eth: B<<384.0,479.0>-<429.0,454.0>-<454.0,398.0>>/B<<454.0,398.0>-<443.0,455.0>-<423.0,501.5>> = 13.134544730142482
    • m: L<<231.0,518.0>--<231.0,406.0>>/B<<231.0,406.0>-<245.0,464.0>-<284.0,494.5>> = 13.570434385161475
    • u: L<<461.0,0.0>--<461.0,124.0>>/B<<461.0,124.0>-<445.0,58.0>-<399.5,24.0>> = 13.62699485989153 and 28 more. [code: found-jaggy-segments]

[5] MontaguSlab16pt-Regular.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: ellipsis Contours detected: 2 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ellipsis Contours detected: 2 Expected: 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=400.0,Y=984.0 (should be at ascender 982?)
    • uni1EA8: X=475.0,Y=984.0 (should be at ascender 982?)
    • uni1EAA: X=400.0,Y=984.0 (should be at ascender 982?)
    • uni1EC2: X=443.0,Y=984.0 (should be at ascender 982?)
    • uni1EC4: X=368.0,Y=984.0 (should be at ascender 982?)
    • Eng: X=634.0,Y=-2.0 (should be at baseline 0?)
    • uni1ED4: X=493.0,Y=984.0 (should be at ascender 982?)
    • uni1ED6: X=418.0,Y=984.0 (should be at ascender 982?)
    • Q: X=541.0,Y=-2.0 (should be at baseline 0?)
    • R: X=33.0,Y=683.0 (should be at cap-height 682?) and 78 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<472.0,318.0>--<440.0,318.0>>/B<<440.0,318.0>-<495.0,306.0>-<519.5,265.5>> = 12.308015817427924
    • Racute: L<<472.0,318.0>--<440.0,318.0>>/B<<440.0,318.0>-<495.0,306.0>-<519.5,265.5>> = 12.308015817427924
    • Rcaron: L<<472.0,318.0>--<440.0,318.0>>/B<<440.0,318.0>-<495.0,306.0>-<519.5,265.5>> = 12.308015817427924
    • braceleft.case: B<<213.5,373.5>-<179.0,343.0>-<114.0,341.0>>/B<<114.0,341.0>-<179.0,339.0>-<213.5,308.5>> = 3.5247820473210187
    • braceleft: B<<231.0,330.0>-<199.0,291.0>-<125.0,288.0>>/B<<125.0,288.0>-<199.0,285.0>-<231.0,246.0>> = 4.643061179665369
    • braceright.case: B<<203.5,308.5>-<238.0,339.0>-<303.0,341.0>>/B<<303.0,341.0>-<238.0,343.0>-<203.5,373.5>> = 3.5247820473210187
    • braceright: B<<214.5,246.0>-<247.0,285.0>-<320.0,288.0>>/B<<320.0,288.0>-<247.0,291.0>-<214.5,330.0>> = 4.706593732216495
    • eth: B<<393.0,479.0>-<440.0,453.0>-<465.0,396.0>>/B<<465.0,396.0>-<453.0,455.0>-<430.0,503.5>> = 12.18552470695263
    • uni0156: L<<472.0,318.0>--<440.0,318.0>>/B<<440.0,318.0>-<495.0,306.0>-<519.5,265.5>> = 12.308015817427924
    • uni0210: L<<472.0,318.0>--<440.0,318.0>>/B<<440.0,318.0>-<495.0,306.0>-<519.5,265.5>> = 12.308015817427924 and 4 more. [code: found-jaggy-segments]

[5] MontaguSlab16pt-SemiBold.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: ellipsis Contours detected: 2 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: ellipsis Contours detected: 2 Expected: 3
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt SemiBold' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • R: L<<494.0,317.0>--<473.0,317.0>>/B<<473.0,317.0>-<529.0,306.0>-<552.5,266.5>> = 11.113040535948294
    • Racute: L<<494.0,317.0>--<473.0,317.0>>/B<<473.0,317.0>-<529.0,306.0>-<552.5,266.5>> = 11.113040535948294
    • Rcaron: L<<494.0,317.0>--<473.0,317.0>>/B<<473.0,317.0>-<529.0,306.0>-<552.5,266.5>> = 11.113040535948294
    • braceleft.case: B<<246.0,374.5>-<207.0,342.0>-<128.0,341.0>>/B<<128.0,341.0>-<207.0,340.0>-<246.0,307.5>> = 1.4504485981183235
    • braceleft: B<<264.5,337.0>-<231.0,293.0>-<141.0,290.0>>/B<<141.0,290.0>-<231.0,287.0>-<264.5,243.0>> = 3.8183048659927747
    • braceright.case: B<<199.0,307.5>-<238.0,340.0>-<317.0,341.0>>/B<<317.0,341.0>-<238.0,342.0>-<199.0,374.5>> = 1.4504485981183235
    • braceright: B<<203.5,243.0>-<237.0,287.0>-<327.0,290.0>>/B<<327.0,290.0>-<237.0,293.0>-<203.5,337.0>> = 3.8183048659927747
    • eng: L<<249.0,523.0>--<249.0,400.0>>/B<<249.0,400.0>-<264.0,463.0>-<307.5,497.0>> = 13.392497753751098
    • eth: B<<376.5,479.5>-<420.0,455.0>-<444.0,400.0>>/B<<444.0,400.0>-<434.0,455.0>-<416.5,500.0>> = 13.269859733146578
    • m: L<<247.0,522.0>--<247.0,408.0>>/B<<247.0,408.0>-<260.0,466.0>-<298.5,498.0>> = 12.633361935275003 and 39 more. [code: found-jaggy-segments]

[7] MontaguSlab16pt-Thin.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 16pt Thin' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=418.0,Y=981.0 (should be at ascender 982?)
    • uni1EAA: X=418.0,Y=981.0 (should be at ascender 982?)
    • Aringacute: X=366.0,Y=980.0 (should be at ascender 982?)
    • Aringacute: X=394.0,Y=980.0 (should be at ascender 982?)
    • uni1EC4: X=393.0,Y=981.0 (should be at ascender 982?)
    • Eng: X=659.0,Y=-1.0 (should be at baseline 0?)
    • uni1ED6: X=437.0,Y=981.0 (should be at ascender 982?)
    • Uogonek: X=509.0,Y=-1.0 (should be at baseline 0?)
    • atilde: X=383.0,Y=684.0 (should be at cap-height 682?)
    • atilde: X=405.0,Y=684.0 (should be at cap-height 682?) and 38 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • braceleft.case: B<<170.0,372.5>-<142.0,344.0>-<95.0,341.0>>/B<<95.0,341.0>-<142.0,338.0>-<170.0,310.0>> = 7.304445560612643
    • braceleft: B<<186.0,321.5>-<155.0,289.0>-<104.0,286.0>>/B<<104.0,286.0>-<155.0,283.0>-<186.0,250.5>> = 6.732921326859609
    • braceright.case: B<<209.0,310.0>-<237.0,338.0>-<284.0,341.0>>/B<<284.0,341.0>-<237.0,344.0>-<209.0,372.5>> = 7.304445560612643
    • braceright: B<<228.0,250.5>-<259.0,283.0>-<310.0,286.0>>/B<<310.0,286.0>-<259.0,289.0>-<228.0,321.5>> = 6.732921326859609
    • eth: B<<414.5,478.5>-<466.0,450.0>-<493.0,391.0>>/B<<493.0,391.0>-<477.0,456.0>-<447.0,508.5>> = 10.761466193915874
    • nine.dnom: B<<249.5,56.5>-<287.0,100.0>-<282.0,197.0>>/B<<282.0,197.0>-<278.0,166.0>-<248.5,142.5>> = 10.303158468898733
    • nine.lf: B<<533.0,247.5>-<550.0,331.0>-<541.0,452.0>>/B<<541.0,452.0>-<536.0,364.0>-<476.0,309.0>> = 7.505782036483042
    • nine.numr: B<<249.5,409.5>-<287.0,453.0>-<282.0,550.0>>/B<<282.0,550.0>-<278.0,519.0>-<248.5,495.5>> = 10.303158468898733
    • nine: B<<533.0,247.5>-<550.0,331.0>-<541.0,452.0>>/B<<541.0,452.0>-<536.0,364.0>-<476.0,309.0>> = 7.505782036483042
    • six.dnom: B<<100.5,271.5>-<63.0,228.0>-<67.0,131.0>>/B<<67.0,131.0>-<72.0,163.0>-<101.5,186.0>> = 11.24203380869584 and 8 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • f_t.liga: L<<545.0,158.0>--<546.0,477.0>>
  • t: L<<156.0,158.0>--<157.0,477.0>>
  • t_t.liga: L<<156.0,155.0>--<157.0,477.0>>
  • t_t.liga: L<<571.0,158.0>--<572.0,477.0>>
  • tcaron: L<<156.0,158.0>--<157.0,477.0>>
  • uni0163: L<<156.0,158.0>--<157.0,477.0>>
  • uni021B: L<<156.0,158.0>--<157.0,477.0>>
  • uni1E6D: L<<156.0,158.0>--<157.0,477.0>> and uni1E6F: L<<156.0,158.0>--<157.0,477.0>> [code: found-semi-vertical]

[5] MontaguSlab144pt-Bold.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB2: X=535.0,Y=981.5 (should be at ascender 982?)
    • uni1EA8: X=643.5,Y=981.0 (should be at ascender 982?)
    • uni1EA8: X=587.0,Y=984.0 (should be at ascender 982?)
    • uni1EC2: X=596.5,Y=981.0 (should be at ascender 982?)
    • uni1EC2: X=540.0,Y=984.0 (should be at ascender 982?)
    • uni1ED4: X=648.5,Y=981.0 (should be at ascender 982?)
    • uni1ED4: X=592.0,Y=984.0 (should be at ascender 982?)
    • uni1EA3: X=275.5,Y=681.5 (should be at cap-height 682?)
    • atilde: X=311.0,Y=680.0 (should be at cap-height 682?)
    • uni1EBB: X=268.5,Y=681.5 (should be at cap-height 682?) and 34 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<633.5,407.0>-<590.0,368.0>-<517.0,357.0>>/B<<517.0,357.0>-<609.0,349.0>-<661.0,309.5>> = 13.538882607947905
    • R: L<<468.0,327.0>--<427.0,327.0>>/B<<427.0,327.0>-<496.0,320.0>-<530.5,282.0>> = 5.79279649503215
    • Racute: L<<468.0,327.0>--<427.0,327.0>>/B<<427.0,327.0>-<496.0,320.0>-<530.5,282.0>> = 5.79279649503215
    • Rcaron: L<<468.0,327.0>--<427.0,327.0>>/B<<427.0,327.0>-<496.0,320.0>-<530.5,282.0>> = 5.79279649503215
    • at: L<<535.0,166.0>--<535.0,168.0>>/B<<535.0,168.0>-<522.0,100.0>-<479.0,67.5>> = 10.823011226207075
    • braceleft.case: B<<267.5,377.0>-<233.0,342.0>-<150.0,341.0>>/B<<150.0,341.0>-<233.0,340.0>-<267.5,305.0>> = 1.380554395730035
    • braceleft: B<<241.0,294.5>-<204.0,274.0>-<137.0,273.0>>/B<<137.0,273.0>-<204.0,273.0>-<241.0,252.0>> = 0.8550973962666929
    • braceright.case: B<<166.0,305.0>-<200.0,340.0>-<283.0,341.0>>/B<<283.0,341.0>-<200.0,342.0>-<166.0,377.0>> = 1.380554395730035
    • braceright: B<<202.0,252.0>-<239.0,273.0>-<306.0,273.0>>/B<<306.0,273.0>-<239.0,274.0>-<202.0,294.5>> = 0.8550973962666929
    • eng: L<<255.0,518.0>--<255.0,397.0>>/B<<255.0,397.0>-<264.0,458.0>-<300.0,492.5>> = 8.392925187392485 and 43 more. [code: found-jaggy-segments]

[8] MontaguSlab144pt-ExtraLight.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt ExtraLight' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=285.0,Y=984.0 (should be at ascender 982?)
    • uni1EAA: X=285.0,Y=984.0 (should be at ascender 982?)
    • uni1EC4: X=257.0,Y=984.0 (should be at ascender 982?)
    • Eng: X=623.0,Y=-1.0 (should be at baseline 0?)
    • uni1ED6: X=289.0,Y=984.0 (should be at ascender 982?)
    • uni01EA: X=481.0,Y=-2.0 (should be at baseline 0?)
    • Q: X=626.0,Y=-2.0 (should be at baseline 0?)
    • Q: X=652.0,Y=-2.0 (should be at baseline 0?)
    • Uhorn: X=752.5,Y=682.5 (should be at cap-height 682?)
    • uni1EE8: X=752.5,Y=682.5 (should be at cap-height 682?) and 83 more. [code: found-misalignments]
WARN: Do any segments have colinear vectors?
--- Rationale ---
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.
  • WARN The following glyphs have colinear vectors:
    • ampersand: L<<261.0,382.0>--<262.0,381.0>> -> L<<262.0,381.0>--<498.0,116.0>> [code: found-colinear-vectors]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<565.5,400.0>-<526.0,360.0>-<455.0,350.0>>/B<<455.0,350.0>-<538.0,343.0>-<585.0,300.5>> = 12.83785915174798
    • R: L<<426.0,330.0>--<376.0,330.0>>/B<<376.0,330.0>-<430.0,317.0>-<455.5,276.5>> = 13.535856369134248
    • Racute: L<<426.0,330.0>--<376.0,330.0>>/B<<376.0,330.0>-<430.0,317.0>-<455.5,276.5>> = 13.535856369134248
    • Rcaron: L<<426.0,330.0>--<376.0,330.0>>/B<<376.0,330.0>-<430.0,317.0>-<455.5,276.5>> = 13.535856369134248
    • a: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461
    • aacute: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461
    • abreve: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461
    • acircumflex: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461
    • adieresis: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461
    • agrave: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 and 77 more. [code: found-jaggy-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---
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.
  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
  • t: L<<133.0,138.0>--<135.0,467.0>>
  • t_t.liga: L<<133.0,136.0>--<135.0,467.0>>
  • t_t.liga: L<<497.0,138.0>--<499.0,467.0>>
  • tbar: L<<153.0,311.0>--<154.0,467.0>>
  • tcaron: L<<133.0,138.0>--<135.0,467.0>>
  • uni0163: L<<133.0,138.0>--<135.0,467.0>>
  • uni021B: L<<133.0,138.0>--<135.0,467.0>>
  • uni1E6D: L<<133.0,138.0>--<135.0,467.0>> and uni1E6F: L<<133.0,138.0>--<135.0,467.0>> [code: found-semi-vertical]

[6] MontaguSlab144pt-Light.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Light' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=259.0,Y=984.0 (should be at ascender 982?)
    • uni1EB4: X=453.0,Y=980.0 (should be at ascender 982?)
    • uni1EB4: X=384.0,Y=984.0 (should be at ascender 982?)
    • uni1EAA: X=258.0,Y=984.0 (should be at ascender 982?)
    • uni1EAA: X=452.0,Y=980.0 (should be at ascender 982?)
    • uni1EAA: X=383.0,Y=984.0 (should be at ascender 982?)
    • uni1EC4: X=227.0,Y=984.0 (should be at ascender 982?)
    • uni1EC4: X=421.0,Y=980.0 (should be at ascender 982?)
    • uni1EC4: X=352.0,Y=984.0 (should be at ascender 982?)
    • uni1ED6: X=263.0,Y=984.0 (should be at ascender 982?) and 49 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<575.5,401.0>-<535.0,361.0>-<464.0,351.0>>/B<<464.0,351.0>-<549.0,344.0>-<597.0,302.0>> = 12.724945318027565
    • R: L<<432.0,329.0>--<384.0,329.0>>/B<<384.0,329.0>-<441.0,317.0>-<467.5,277.0>> = 11.888658039627968
    • Racute: L<<432.0,329.0>--<384.0,329.0>>/B<<384.0,329.0>-<441.0,317.0>-<467.5,277.0>> = 11.888658039627968
    • Rcaron: L<<432.0,329.0>--<384.0,329.0>>/B<<384.0,329.0>-<441.0,317.0>-<467.5,277.0>> = 11.888658039627968
    • a: L<<390.0,95.0>--<390.0,138.0>>/B<<390.0,138.0>-<372.0,61.0>-<322.5,26.5>> = 13.157542740014811
    • aacute: L<<390.0,95.0>--<390.0,138.0>>/B<<390.0,138.0>-<372.0,61.0>-<322.5,26.5>> = 13.157542740014811
    • abreve: L<<390.0,95.0>--<390.0,138.0>>/B<<390.0,138.0>-<372.0,61.0>-<322.5,26.5>> = 13.157542740014811
    • acircumflex: L<<390.0,95.0>--<390.0,138.0>>/B<<390.0,138.0>-<372.0,61.0>-<322.5,26.5>> = 13.157542740014811
    • adieresis: L<<390.0,95.0>--<390.0,138.0>>/B<<390.0,138.0>-<372.0,61.0>-<322.5,26.5>> = 13.157542740014811
    • agrave: L<<390.0,95.0>--<390.0,138.0>>/B<<390.0,138.0>-<372.0,61.0>-<322.5,26.5>> = 13.157542740014811 and 89 more. [code: found-jaggy-segments]

[6] MontaguSlab144pt-Medium.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Medium' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni01EA: X=511.0,Y=-2.0 (should be at baseline 0?)
    • Q: X=526.0,Y=1.0 (should be at baseline 0?)
    • Uogonek: X=493.0,Y=2.0 (should be at baseline 0?)
    • W: X=297.0,Y=-2.0 (should be at baseline 0?)
    • W: X=775.0,Y=-2.0 (should be at baseline 0?)
    • W: X=673.0,Y=-2.0 (should be at baseline 0?)
    • W: X=397.0,Y=-2.0 (should be at baseline 0?)
    • Wacute: X=297.0,Y=-2.0 (should be at baseline 0?)
    • Wacute: X=775.0,Y=-2.0 (should be at baseline 0?)
    • Wacute: X=673.0,Y=-2.0 (should be at baseline 0?) and 74 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<606.0,403.5>-<564.0,364.0>-<491.0,354.0>>/B<<491.0,354.0>-<580.0,347.0>-<630.5,306.0>> = 12.297339498849466
    • R: L<<451.0,328.0>--<407.0,328.0>>/B<<407.0,328.0>-<470.0,319.0>-<500.5,279.5>> = 8.13010235415596
    • Racute: L<<451.0,328.0>--<407.0,328.0>>/B<<407.0,328.0>-<470.0,319.0>-<500.5,279.5>> = 8.13010235415596
    • Rcaron: L<<451.0,328.0>--<407.0,328.0>>/B<<407.0,328.0>-<470.0,319.0>-<500.5,279.5>> = 8.13010235415596
    • a: B<<404.5,24.5>-<375.0,59.0>-<375.0,122.0>>/B<<375.0,122.0>-<358.0,54.0>-<312.0,22.0>> = 14.036243467926457
    • aacute: B<<404.5,24.5>-<375.0,59.0>-<375.0,122.0>>/B<<375.0,122.0>-<358.0,54.0>-<312.0,22.0>> = 14.036243467926457
    • abreve: B<<404.5,24.5>-<375.0,59.0>-<375.0,122.0>>/B<<375.0,122.0>-<358.0,54.0>-<312.0,22.0>> = 14.036243467926457
    • acircumflex: B<<404.5,24.5>-<375.0,59.0>-<375.0,122.0>>/B<<375.0,122.0>-<358.0,54.0>-<312.0,22.0>> = 14.036243467926457
    • adieresis: B<<404.5,24.5>-<375.0,59.0>-<375.0,122.0>>/B<<375.0,122.0>-<358.0,54.0>-<312.0,22.0>> = 14.036243467926457
    • agrave: B<<404.5,24.5>-<375.0,59.0>-<375.0,122.0>>/B<<375.0,122.0>-<358.0,54.0>-<312.0,22.0>> = 14.036243467926457 and 66 more. [code: found-jaggy-segments]

[5] MontaguSlab144pt-Regular.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EB4: X=459.0,Y=984.0 (should be at ascender 982?)
    • uni1EB4: X=375.0,Y=983.0 (should be at ascender 982?)
    • uni1EAA: X=458.0,Y=984.0 (should be at ascender 982?)
    • uni1EAA: X=374.0,Y=983.0 (should be at ascender 982?)
    • uni1EC4: X=423.0,Y=984.0 (should be at ascender 982?)
    • uni1EC4: X=339.0,Y=983.0 (should be at ascender 982?)
    • uni1ED6: X=463.0,Y=984.0 (should be at ascender 982?)
    • uni1ED6: X=379.0,Y=983.0 (should be at ascender 982?)
    • uni01EA: X=501.0,Y=-2.0 (should be at baseline 0?)
    • uni022C: X=250.0,Y=984.0 (should be at ascender 982?) and 68 more. [code: found-misalignments]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<590.5,402.5>-<549.0,363.0>-<477.0,353.0>>/B<<477.0,353.0>-<564.0,346.0>-<613.5,304.5>> = 12.507258369221715
    • R: L<<442.0,329.0>--<395.0,329.0>>/B<<395.0,329.0>-<455.0,318.0>-<484.0,278.5>> = 10.388857815469619
    • Racute: L<<442.0,329.0>--<395.0,329.0>>/B<<395.0,329.0>-<455.0,318.0>-<484.0,278.5>> = 10.388857815469619
    • Rcaron: L<<442.0,329.0>--<395.0,329.0>>/B<<395.0,329.0>-<455.0,318.0>-<484.0,278.5>> = 10.388857815469619
    • a: L<<382.0,109.0>--<382.0,129.0>>/B<<382.0,129.0>-<365.0,57.0>-<317.0,24.0>> = 13.284866484902187
    • aacute: L<<382.0,109.0>--<382.0,129.0>>/B<<382.0,129.0>-<365.0,57.0>-<317.0,24.0>> = 13.284866484902187
    • abreve: L<<382.0,109.0>--<382.0,129.0>>/B<<382.0,129.0>-<365.0,57.0>-<317.0,24.0>> = 13.284866484902187
    • acircumflex: L<<382.0,109.0>--<382.0,129.0>>/B<<382.0,129.0>-<365.0,57.0>-<317.0,24.0>> = 13.284866484902187
    • adieresis: L<<382.0,109.0>--<382.0,129.0>>/B<<382.0,129.0>-<365.0,57.0>-<317.0,24.0>> = 13.284866484902187
    • agrave: L<<382.0,109.0>--<382.0,129.0>>/B<<382.0,129.0>-<365.0,57.0>-<317.0,24.0>> = 13.284866484902187 and 69 more. [code: found-jaggy-segments]

[7] MontaguSlab144pt-SemiBold.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1
Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt SemiBold' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Are there any misaligned on-curve points?
--- Rationale ---
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 lower
case 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.
  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni1EA8: X=628.5,Y=984.0 (should be at ascender 982?)
    • uni1EC2: X=585.5,Y=984.0 (should be at ascender 982?)
    • uni1ED4: X=633.5,Y=984.0 (should be at ascender 982?)
    • uni01EA: X=520.0,Y=-2.0 (should be at baseline 0?)
    • Q: X=534.0,Y=1.0 (should be at baseline 0?)
    • uni1E9E: X=512.5,Y=683.5 (should be at cap-height 682?)
    • W: X=292.0,Y=-1.0 (should be at baseline 0?)
    • W: X=792.0,Y=-1.0 (should be at baseline 0?)
    • W: X=670.0,Y=-1.0 (should be at baseline 0?)
    • W: X=412.0,Y=-1.0 (should be at baseline 0?) and 68 more. [code: found-misalignments]
WARN: Do any segments have colinear vectors?
--- Rationale ---
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.
  • WARN The following glyphs have colinear vectors:
    • uhorn: L<<319.0,513.0>--<525.0,513.0>> -> L<<525.0,513.0>--<525.0,513.0>>
    • uni1EE9: L<<319.0,513.0>--<525.0,513.0>> -> L<<525.0,513.0>--<525.0,513.0>>
    • uni1EEB: L<<319.0,513.0>--<525.0,513.0>> -> L<<525.0,513.0>--<525.0,513.0>>
    • uni1EED: L<<319.0,513.0>--<525.0,513.0>> -> L<<525.0,513.0>--<525.0,513.0>>
    • uni1EEF: L<<319.0,513.0>--<525.0,513.0>> -> L<<525.0,513.0>--<525.0,513.0>> and uni1EF1: L<<319.0,513.0>--<525.0,513.0>> -> L<<525.0,513.0>--<525.0,513.0>> [code: found-colinear-vectors]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<618.5,405.5>-<576.0,366.0>-<503.0,355.0>>/B<<503.0,355.0>-<593.0,348.0>-<644.5,307.5>> = 13.016526729928092
    • R: L<<459.0,328.0>--<417.0,328.0>>/B<<417.0,328.0>-<483.0,319.0>-<515.0,280.5>> = 7.765166018425308
    • Racute: L<<459.0,328.0>--<417.0,328.0>>/B<<417.0,328.0>-<483.0,319.0>-<515.0,280.5>> = 7.765166018425308
    • Rcaron: L<<459.0,328.0>--<417.0,328.0>>/B<<417.0,328.0>-<483.0,319.0>-<515.0,280.5>> = 7.765166018425308
    • at: L<<542.0,162.0>--<542.0,170.0>>/B<<542.0,170.0>-<528.0,101.0>-<483.5,68.5>> = 11.469530332866904
    • braceleft.case: B<<246.5,376.0>-<213.0,342.0>-<135.0,341.0>>/B<<135.0,341.0>-<213.0,340.0>-<246.5,306.0>> = 1.4690420685093497
    • braceleft: B<<253.5,317.5>-<219.0,274.0>-<126.0,273.0>>/B<<126.0,273.0>-<219.0,272.0>-<253.5,228.5>> = 1.232119816798608
    • braceright.case: B<<175.5,306.0>-<209.0,340.0>-<287.0,341.0>>/B<<287.0,341.0>-<209.0,342.0>-<175.5,376.0>> = 1.4690420685093497
    • braceright: B<<179.5,228.5>-<214.0,272.0>-<307.0,273.0>>/B<<307.0,273.0>-<214.0,274.0>-<179.5,317.5>> = 1.232119816798608
    • eng: L<<234.0,513.0>--<234.0,389.0>>/B<<234.0,389.0>-<245.0,453.0>-<283.5,487.0>> = 9.752424941653764 and 41 more. [code: found-jaggy-segments]

[5] MontaguSlab144pt-Thin.ttf
WARN: Check if each glyph has the recommended amount of contours.
--- 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: two Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: uni00B2 Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: uni2082 Contours detected: 2 Expected: 1
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: Q Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: lira Contours detected: 2 Expected: 1
Glyph name: onehalf Contours detected: 4 Expected: 3
Glyph name: two Contours detected: 2 Expected: 1 [code: contour-count]

WARN: Is there kerning info 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:

    • f + f
    • f + b
    • b + f
    • f + h
    • h + f
    • f + i
    • i + f
    • f + k
    • k + f
    • f + l
    • l + b
    • h + i
    • i + k
    • k + l
    • l + t
    • t + t

    [code: lacks-kern-info]

WARN: Combined length of family and style must not exceed 27 characters.
--- Rationale ---
According to a GlyphsApp tutorial [1], in order to make sure all versions of
Windows recognize it as a valid font file, we must make sure that the
concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style
(NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20
characters.
After discussing the problem in more detail at `FontBakery issue #2179 [2] we
decided that allowing up to 27 chars would still be on the safe side, though.
[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances
[2] https://github.com/googlefonts/fontbakery/issues/2179
  • WARN The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries:
    FONT_FAMILY_NAME = 'Montagu Slab 144pt Thin' / SUBFAMILY_NAME = 'Regular'

Please take a look at the conversation at fonttools/fontbakery#2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]

WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
--- Rationale ---
The OpenType 'meta' table originated at Apple. Microsoft added it to OT with
just two DataMap records:
- dlng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font is designed for
- slng: comma-separated ScriptLangTags that indicate which scripts, or languages
and scripts, with possible variants, the font supports
The slng structure is intended to describe which languages and scripts the font
overall supports. For example, a Traditional Chinese font that also contains
Latin characters, can indicate Hant,Latn, showing that it supports Hant, the
Traditional Chinese variant of the Hani script, and it also supports the Latn
script
The dlng structure is far more interesting. A font may contain various glyphs,
but only a particular subset of the glyphs may be truly "leading" in the design,
while other glyphs may have been included for technical reasons. Such a
Traditional Chinese font could only list Hant there, showing that it’s designed
for Traditional Chinese, but the font would omit Latn, because the developers
don’t think the font is really recommended for purely Latin-script use.
The tags used in the structures can comprise just script, or also language and
script. For example, if a font has Bulgarian Cyrillic alternates in the locl
feature for the cyrl BGR OT languagesystem, it could also indicate in dlng
explicitly that it supports bul-Cyrl. (Note that the scripts and languages in
meta use the ISO language and script codes, not the OpenType ones).
This check ensures that the font has the meta table containing the slng and dlng
structures.
All families in the Google Fonts collection should contain the 'meta' table.
Windows 10 already uses it when deciding on which fonts to fall back to. The
Google Fonts API and also other environments could use the data for smarter
filtering. Most importantly, those entries should be added to the Noto fonts.
In the font making process, some environments store this data in external files
already. But the meta table provides a convenient way to store this inside the
font file, so some tools may add the data, and unrelated tools may read this
data. This makes the solution much more portable and universal.
  • WARN This font file does not have a 'meta' table. [code: lacks-meta-table]
WARN: Do outlines contain any jaggy segments?
--- Rationale ---
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.
  • WARN The following glyphs have jaggy segments:
    • B: B<<555.0,399.5>-<516.0,359.0>-<446.0,349.0>>/B<<446.0,349.0>-<528.0,342.0>-<574.0,299.0>> = 13.009376137162674
    • C: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484
    • Cacute: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484
    • Ccaron: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484
    • Ccedilla: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484
    • Ccircumflex: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484
    • Cdotaccent: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484
    • Euro: B<<665.0,641.0>-<734.0,588.0>-<756.0,500.0>>/L<<756.0,500.0>--<756.0,682.0>> = 14.036243467926484
    • G: L<<640.0,0.0>--<640.0,190.0>>/B<<640.0,190.0>-<617.0,99.0>-<551.5,43.0>> = 14.184294248270799
    • Gbreve: L<<640.0,0.0>--<640.0,190.0>>/B<<640.0,190.0>-<617.0,99.0>-<551.5,43.0>> = 14.184294248270799 and 116 more. [code: found-jaggy-segments]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 0 86 1373 85 1230 0
0% 0% 3% 49% 3% 44% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants