Skip to content

GF on boarding

Rosalie Wagner requested to merge (removed):master into master

Hello ! I restructured the repo according to google spec, and generated a QA report on the actual ttf.

  1. Some of the fails and warnings can be fixed just by exporting with fontmake with a build script
  2. It would be easier to fix some of these stuff by modifying directly the sources. Do you see a problem if I migrate the UFO to Glyphs to do so? In any case, Fontmake re-converts to UFO to generate the binaries. Otherwise I can see how to manage this with Robofont, it's just that I have handy scripts in Glyphs.
  3. I noticed a lot of diacritics are replaced by a dot accent. Is there a particular intention behind this ?
  4. We can organise a call to review the report together.

Fontbakery report — SYNE MONO

Fontbakery version: 0.7.29

[1] Family checks
🔥 FAIL: Do we have the latest version of FontBakery installed?

[18] Syne-Mono.ttf
🔥 FAIL: Checking file is named canonically.
--- Rationale ---

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

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

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

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


  • 🔥 FAIL Style name used in "Syne-Mono.ttf" is not canonical. You should rebuild the font using any of the following style names: "Thin", "ExtraLight", "Light", "Regular", "Medium", "SemiBold", "Bold", "ExtraBold", "Black", "Thin Italic", "ExtraLight Italic", "Light Italic", "Italic", "Medium Italic", "SemiBold Italic", "Bold Italic", "ExtraBold Italic", "Black Italic". [code: bad-static-filename]
🔥 FAIL: Checking OS/2 fsType does not impose restrictions.
--- 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: 0x00A0 (NO-BREAK SPACE), 0x00BC (VULGAR FRACTION ONE QUARTER), 0x00BD (VULGAR FRACTION ONE HALF), 0x00BE (VULGAR FRACTION THREE QUARTERS), 0x2074 (SUPERSCRIPT FOUR) and 0x2215 (DIVISION SLASH) [code: missing-codepoints]
🔥 FAIL: Substitute copyright, registered and trademark symbols in name table entries.
  • com.google.fonts/check/name/unwanted_chars

  • 🔥 FAIL NAMEID #0 contains symbols that should be replaced by '(c)'. [code: unwanted-chars]

  • 🔥 FAIL NAMEID #0 contains symbols that should be replaced by '(c)'. [code: unwanted-chars]

🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

A known licensing description must be provided in the NameID 14 (LICENSE
DESCRIPTION) entries of the name table.

The source of truth for this check (to determine which license is in use) is a
file placed side-by-side to your font project including the licensing terms.

Depending on the chosen license, one of the following string snippets is
expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the name
table:
- "This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is available with a FAQ at: https://scripts.sil.org/OFL"
- "Licensed under the Apache License, Version 2.0"
- "Licensed under the Ubuntu Font Licence 1.0."


Currently accepted licenses are Apache or Open Font License.
For a small set of legacy families the Ubuntu Font License may be acceptable as
well.

When in doubt, please choose OFL for new font projects.


  • 🔥 FAIL Font lacks NameID 13 (LICENSE DESCRIPTION). A proper licensing entry must be set. [code: missing]
🔥 FAIL: Are there non-ASCII characters in ASCII-only NAME table entries?
--- Rationale ---

The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).

For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be
the same in CFF fonts which also have this requirement in the OpenType spec.

Note:
A common place where we find non-ASCII strings is on name table entries with
NameID > 18, which are expressly for localising the ASCII-only IDs into Hindi /
Arabic / etc.


  • 🔥 FAIL Bad string at [nameID 0, 'mac_roman']: 'b'Copyright © 2019 by Lucas Descroix. All rights reserved.'' [code: bad-string]
  • 🔥 FAIL Bad string at [nameID 0, 'utf_16_be']: 'b'Copyright © 2019 by Lucas Descroix. All rights reserved.'' [code: bad-string]
  • 🔥 FAIL There are 2 strings containing non-ASCII characters in the ASCII-only NAME table entries. [code: non-ascii-strings]
🔥 FAIL: Copyright notices match canonical pattern in fonts
  • com.google.fonts/check/font_copyright

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright © 2019 by Lucas Descroix. All rights reserved." [code: bad-notice-format]

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright © 2019 by Lucas Descroix. All rights reserved." [code: bad-notice-format]

🔥 FAIL: Check name table: FONT_SUBFAMILY_NAME entries.
🔥 FAIL: PPEM must be an integer on hinted fonts.
--- Rationale ---

Hinted fonts must have head table flag bit 3 set.

Per https://docs.microsoft.com/en-us/typography/opentype/spec/head, bit 3 of
Head::flags decides whether PPEM should be rounded. This bit should always be
set for hinted fonts.

Note:
Bit 3 = Force ppem to integer values for all internal scaler math;
        May use fractional ppem sizes if this bit is clear;


  • 🔥 FAIL This is a hinted font, so it must have bit 3 set on the flags of the head table, so that PPEM values will be rounded into an integer value.

This can be accomplished by using the 'gftools fix-hinting' command.

create virtualenvpython3 -m venv venv

activate virtualenvsource venv/bin/activate

install gftoolspip install git+https://www.github.com/googlefonts/tools [code: bad-flags]

🔥 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 1010, but got 950 instead [code: ascent]
🔥 FAIL: Checking OS/2 Metrics match hhea Metrics.
--- Rationale ---

When OS/2 and hhea vertical metrics match, the same linespacing results on
macOS, GNU+Linux and Windows. Unfortunately as of 2018, Google Fonts has
released many fonts with vertical metrics that don't match in this way. When we
fix this issue in these existing families, we will create a visible change in
line/paragraph layout for either Windows or macOS users, which will upset some
of them.

But we have a duty to fix broken stuff, and inconsistent paragraph layout is
unacceptably broken when it is possible to avoid it.

If users complain and prefer the old broken version, they have the freedom to
take care of their own situation.


  • 🔥 FAIL OS/2 sTypoAscender (800) and hhea ascent (950) must be equal. [code: ascender]
🔥 FAIL: Font contains glyphs for whitespace characters?
🔥 FAIL: Checking correctness of monospaced metadata.
--- Rationale ---

There are various metadata in the OpenType spec to specify if a font is
monospaced or not. If the font is not truly monospaced, then no monospaced
metadata should be set (as sometimes they mistakenly are...)

Requirements for monospace fonts:

* post.isFixedPitch - "Set to 0 if the font is proportionally spaced, non-zero
if the font is not proportionally spaced (monospaced)"
  www.microsoft.com/typography/otspec/post.htm

* hhea.advanceWidthMax must be correct, meaning no glyph's width value is
greater.
  www.microsoft.com/typography/otspec/hhea.htm

* OS/2.panose.bProportion must be set to 9 (monospace). Spec says: "The PANOSE
definition contains ten digits each of which currently describes up to sixteen
variations. Windows uses bFamilyType, bSerifStyle and bProportion in the font
mapper to determine family type. It also uses bProportion to determine if the
font is monospaced."
  www.microsoft.com/typography/otspec/os2.htm#pan
  monotypecom-test.monotype.de/services/pan2

* OS/2.xAvgCharWidth must be set accurately.
  "OS/2.xAvgCharWidth is used when rendering monospaced fonts, at least by
Windows GDI"
  http://typedrawers.com/discussion/comment/15397/#Comment_15397

Also we should report an error for glyphs not of average width.

Please also note:
Thomas Phinney told us that a few years ago (as of December 2019), if you gave
a font a monospace flag in Panose, Microsoft Word would ignore the actual
advance widths and treat it as monospaced. Source:
https://typedrawers.com/discussion/comment/45140/#Comment_45140


  • 🔥 FAIL On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch]
  • 🔥 FAIL On monospaced fonts, the value of OS/2.panose.bProportion must be set to 9 (proportion: monospaced), but got 0 instead. [code: mono-bad-panose-proportion]
  • WARN Font is monospaced but 43 glyphs (7.226890756302522%) have a different width. You should check the widths of: ['uni0308', 'uni0307', 'gravecomb', 'acutecomb', 'uni030B', 'uni0302', 'uni030C', 'uni0306', 'uni030A', 'tildecomb', 'uni0304', 'uni0312', 'uni0326', 'uni0327', 'uni0328', 'uni0335', 'uni0336', 'uni0337', 'uni0338', 'gravecomb.ss03', 'acutecomb.ss03', 'uni030B.ss03', 'uni0302.ss03', 'uni030C.ss03', 'uni0306.ss03', 'uni030A.ss03', 'tildecomb.ss03', 'uni0304.ss03', 'uni0312.ss03', 'uni0326.ss03', 'uni0327.ss03', 'uni0328.ss03', 'acute.ss03', 'breve.ss03', 'caron.ss03', 'cedilla.ss03', 'circumflex.ss03', 'grave.ss03', 'hungarumlaut.ss03', 'macron.ss03', 'ogonek.ss03', 'ring.ss03', 'tilde.ss03'] [code: mono-outliers]
WARN: Checking OS/2 achVendID.
--- Rationale ---

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

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

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

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

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


  • WARN OS/2 VendorID is 'UKWN', a font editor default. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx [code: bad]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: quotedblbase Contours detected: 1 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: aring Contours detected: 3 Expected: 4 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: dcroat Contours detected: 3 Expected: 2 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: hbar Contours detected: 2 Expected: 1 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uring Contours detected: 2 Expected: 3 Glyph name: uring Contours detected: 2 Expected: 3 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: arrowleft Contours detected: 2 Expected: 1 Glyph name: arrowup Contours detected: 2 Expected: 1 Glyph name: arrowright Contours detected: 2 Expected: 1 Glyph name: arrowdown Contours detected: 2 Expected: 1 Glyph name: arrowboth Contours detected: 3 Expected: 1 Glyph name: uni2196 Contours detected: 2 Expected: 1 Glyph name: uni2197 Contours detected: 2 Expected: 1 Glyph name: uni2198 Contours detected: 2 Expected: 1 Glyph name: uni2199 Contours detected: 2 Expected: 1 Glyph name: arrowupdn Contours detected: 3 Expected: 1 Glyph name: uni030A Contours detected: 1 Expected: 2 Glyph name: uni030A Contours detected: 1 Expected: 2 Glyph name: uni2199 Contours detected: 2 Expected: 1 Glyph name: aring Contours detected: 3 Expected: 4 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: uni2196 Contours detected: 2 Expected: 1 Glyph name: Uring Contours detected: 2 Expected: 3 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: arrowup Contours detected: 2 Expected: 1 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: arrowupdn Contours detected: 3 Expected: 1 Glyph name: dcroat Contours detected: 3 Expected: 2 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: arrowdown Contours detected: 2 Expected: 1 Glyph name: hbar Contours detected: 2 Expected: 1 Glyph name: quotedblbase Contours detected: 1 Expected: 2 Glyph name: arrowboth Contours detected: 3 Expected: 1 Glyph name: uring Contours detected: 2 Expected: 3 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: uni2198 Contours detected: 2 Expected: 1 Glyph name: uni2197 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.


  • 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:

    • hyphen + hyphen

    [code: lacks-kern-info]

WARN: Checking Vertical Metric Linegaps.

Summary

💔 ERROR 🔥 FAIL WARN 💤 SKIP INFO 🍞 PASS 🔎 DEBUG
0 14 5 92 7 59 0
0% 8% 3% 52% 4% 33% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

Fontbakery report — SYNE VARIABLE

Fontbakery version: 0.7.29

[1] Family checks
🔥 FAIL: Do we have the latest version of FontBakery installed?

[23] Syne-variable.ttf
🔥 FAIL: Checking file is named canonically.
--- Rationale ---

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

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

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

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


  • 🔥 FAIL The file 'Syne-variable.ttf' must be renamed to 'Syne[wght].ttf' according to the Google Fonts naming policy for variable fonts. [code: bad-varfont-filename]
🔥 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: 0x00A0 (NO-BREAK SPACE), 0x2074 (SUPERSCRIPT FOUR) and 0x2215 (DIVISION SLASH) [code: missing-codepoints]
🔥 FAIL: Substitute copyright, registered and trademark symbols in name table entries.
  • com.google.fonts/check/name/unwanted_chars

  • 🔥 FAIL NAMEID #0 contains symbols that should be replaced by '(c)'. [code: unwanted-chars]

  • 🔥 FAIL NAMEID #0 contains symbols that should be replaced by '(c)'. [code: unwanted-chars]

🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

A known licensing description must be provided in the NameID 14 (LICENSE
DESCRIPTION) entries of the name table.

The source of truth for this check (to determine which license is in use) is a
file placed side-by-side to your font project including the licensing terms.

Depending on the chosen license, one of the following string snippets is
expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the name
table:
- "This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is available with a FAQ at: https://scripts.sil.org/OFL"
- "Licensed under the Apache License, Version 2.0"
- "Licensed under the Ubuntu Font Licence 1.0."


Currently accepted licenses are Apache or Open Font License.
For a small set of legacy families the Ubuntu Font License may be acceptable as
well.

When in doubt, please choose OFL for new font projects.


  • 🔥 FAIL Font lacks NameID 13 (LICENSE DESCRIPTION). A proper licensing entry must be set. [code: missing]
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
--- Rationale ---

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

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


  • 🔥 FAIL Font is missing the 'gasp' table. Try exporting the font with autohinting enabled. If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting' GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: Are there non-ASCII characters in ASCII-only NAME table entries?
--- Rationale ---

The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).

For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be
the same in CFF fonts which also have this requirement in the OpenType spec.

Note:
A common place where we find non-ASCII strings is on name table entries with
NameID > 18, which are expressly for localising the ASCII-only IDs into Hindi /
Arabic / etc.


  • 🔥 FAIL Bad string at [nameID 0, 'mac_roman']: 'b'Copyright © 2019 by Lucas Descroix. All rights reserved.'' [code: bad-string]
  • 🔥 FAIL Bad string at [nameID 0, 'utf_16_be']: 'b'Copyright © 2019 by Lucas Descroix. All rights reserved.'' [code: bad-string]
  • 🔥 FAIL There are 2 strings containing non-ASCII characters in the ASCII-only NAME table entries. [code: non-ascii-strings]
🔥 FAIL: Copyright notices match canonical pattern in fonts
  • com.google.fonts/check/font_copyright

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright © 2019 by Lucas Descroix. All rights reserved." [code: bad-notice-format]

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright © 2019 by Lucas Descroix. All rights reserved." [code: bad-notice-format]

🔥 FAIL: Check name table: FONT_SUBFAMILY_NAME entries.
🔥 FAIL: Check that variable fonts have an HVAR table.
--- Rationale ---

Not having a HVAR table can lead to costly text-layout operations on some
platforms, which we want to avoid.

So, all variable fonts on the Google Fonts collection should have an HVAR with
valid values.

More info on the HVAR table can be found at:
https://docs.microsoft.com/en-us/typography/opentype/spec
/otvaroverview#variation-data-tables-and-miscellaneous-requirements


  • 🔥 FAIL All variable fonts on the Google Fonts collection must have a properly set HVAR table in order to avoid costly text-layout operations on certain platforms. [code: lacks-HVAR]
🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
--- Rationale ---

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

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

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

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


  • 🔥 FAIL The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the gftools fix-nonhinting script. [code: lacks-smart-dropout]
🔥 FAIL: Variable font weight coordinates must be multiples of 100.
--- Rationale ---

The named instances on the weight axis of a variable font must have coordinates
that are multiples of 100 on the design space.


  • 🔥 FAIL Found a variable font instance with 'wght'=395.0. This should instead be a multiple of 100. [code: bad-coordinate]
  • 🔥 FAIL Found a variable font instance with 'wght'=525.0. This should instead be a multiple of 100. [code: bad-coordinate]
🔥 FAIL: Check variable font instances have correct coordinate values
🔥 FAIL: Check variable font instances have correct names

Further info can be found in our spec https://github.com/googlefonts/gf-docs/tree/master/Spec#fvar-instances [code: bad-instance-names]

🔥 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.usWinDescent value should be equal or greater than 298, but got 250 instead [code: descent]
🔥 FAIL: Checking OS/2 Metrics match hhea Metrics.
--- Rationale ---

When OS/2 and hhea vertical metrics match, the same linespacing results on
macOS, GNU+Linux and Windows. Unfortunately as of 2018, Google Fonts has
released many fonts with vertical metrics that don't match in this way. When we
fix this issue in these existing families, we will create a visible change in
line/paragraph layout for either Windows or macOS users, which will upset some
of them.

But we have a duty to fix broken stuff, and inconsistent paragraph layout is
unacceptably broken when it is possible to avoid it.

If users complain and prefer the old broken version, they have the freedom to
take care of their own situation.


  • 🔥 FAIL OS/2 sTypoAscender (800) and hhea ascent (950) must be equal. [code: ascender]
🔥 FAIL: Font contains glyphs for whitespace characters?
🔥 FAIL: The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.
--- Rationale ---

According to the Open-Type spec's registered design-variation tag 'wght'
available at
https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght

If a variable font has a 'wght' (Weight) axis, then the coordinate of its
'Regular' instance is required to be 400.


  • 🔥 FAIL The "wght" axis coordinate of the "Regular" instance must be 400. Got 395.0 instead. [code: not-400]
🔥 FAIL: The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.
--- Rationale ---

The Open-Type spec's registered design-variation tag 'wght' available at
https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght does
not specify a required value for the 'Bold' instance of a variable font.

But Dave Crossland suggested that we should enforce a required value of 700 in
this case.


  • 🔥 FAIL The "wght" axis coordinate of the "Bold" instance must be 700. Got 525.0 instead. [code: not-700]
WARN: Checking OS/2 achVendID.
--- Rationale ---

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

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

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

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

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


  • WARN OS/2 VendorID is 'UKWN', a font editor default. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx [code: bad]
WARN: 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.


  • WARN This font lacks caret positioning values for these ligature glyphs:

    • periodcentered

    [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 + i
    • i + f
    • hyphen + hyphen

    [code: lacks-kern-info]

WARN: Checking Vertical Metric Linegaps.

Summary

💔 ERROR 🔥 FAIL WARN 💤 SKIP INFO 🍞 PASS 🔎 DEBUG
0 20 4 80 6 67 0
0% 11% 2% 45% 3% 38% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

Fontbakery report — SYNE

Fontbakery version: 0.7.29

[3] Family checks
🔥 FAIL: Do we have the latest version of FontBakery installed?
🔥 FAIL: Fonts have consistent PANOSE proportion?
  • com.google.fonts/check/family/panose_proportion

  • 🔥 FAIL PANOSE proportion is not the same across this family. In order to fix this, please make sure that the panose.bProportion value is the same in the OS/2 table of all of this family font files. [code: inconsistency]

🔥 FAIL: Fonts have consistent underline thickness?
--- Rationale ---

Dave C Lemon (Adobe Type Team) recommends setting the underline thickness to be
consistent across the family.

If thicknesses are not family consistent, words set on the same line which have
different styles look strange.

See also:
https://twitter.com/typenerd1/status/690361887926697986


  • 🔥 FAIL Thickness of the underline is not the same across this family. In order to fix this, please make sure that the underlineThickness value is the same in the 'post' table of all of this family font files. Detected underlineThickness values are: Syne-Bold.ttf: 98 Syne-Extra.ttf: 150 Syne-Italic.ttf: 75 Syne-Regular.ttf: 74

[15] Syne-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: 0x00A0 (NO-BREAK SPACE), 0x2074 (SUPERSCRIPT FOUR) and 0x2215 (DIVISION SLASH) [code: missing-codepoints]
🔥 FAIL: Substitute copyright, registered and trademark symbols in name table entries.
  • com.google.fonts/check/name/unwanted_chars

  • 🔥 FAIL NAMEID #0 contains symbols that should be replaced by '(c)'. [code: unwanted-chars]

  • 🔥 FAIL NAMEID #0 contains symbols that should be replaced by '(c)'. [code: unwanted-chars]

🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

A known licensing description must be provided in the NameID 14 (LICENSE
DESCRIPTION) entries of the name table.

The source of truth for this check (to determine which license is in use) is a
file placed side-by-side to your font project including the licensing terms.

Depending on the chosen license, one of the following string snippets is
expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the name
table:
- "This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is available with a FAQ at: https://scripts.sil.org/OFL"
- "Licensed under the Apache License, Version 2.0"
- "Licensed under the Ubuntu Font Licence 1.0."


Currently accepted licenses are Apache or Open Font License.
For a small set of legacy families the Ubuntu Font License may be acceptable as
well.

When in doubt, please choose OFL for new font projects.


  • 🔥 FAIL Font lacks NameID 13 (LICENSE DESCRIPTION). A proper licensing entry must be set. [code: missing]
🔥 FAIL: Are there non-ASCII characters in ASCII-only NAME table entries?
--- Rationale ---

The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).

For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be
the same in CFF fonts which also have this requirement in the OpenType spec.

Note:
A common place where we find non-ASCII strings is on name table entries with
NameID > 18, which are expressly for localising the ASCII-only IDs into Hindi /
Arabic / etc.


  • 🔥 FAIL Bad string at [nameID 0, 'mac_roman']: 'b'Copyright © 2019 by Lucas Descroix. All rights reserved.'' [code: bad-string]
  • 🔥 FAIL Bad string at [nameID 0, 'utf_16_be']: 'b'Copyright © 2019 by Lucas Descroix. All rights reserved.'' [code: bad-string]
  • 🔥 FAIL There are 2 strings containing non-ASCII characters in the ASCII-only NAME table entries. [code: non-ascii-strings]
🔥 FAIL: Copyright notices match canonical pattern in fonts
  • com.google.fonts/check/font_copyright

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright © 2019 by Lucas Descroix. All rights reserved." [code: bad-notice-format]

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright © 2019 by Lucas Descroix. All rights reserved." [code: bad-notice-format]

🔥 FAIL: PPEM must be an integer on hinted fonts.
--- Rationale ---

Hinted fonts must have head table flag bit 3 set.

Per https://docs.microsoft.com/en-us/typography/opentype/spec/head, bit 3 of
Head::flags decides whether PPEM should be rounded. This bit should always be
set for hinted fonts.

Note:
Bit 3 = Force ppem to integer values for all internal scaler math;
        May use fractional ppem sizes if this bit is clear;


  • 🔥 FAIL This is a hinted font, so it must have bit 3 set on the flags of the head table, so that PPEM values will be rounded into an integer value.

This can be accomplished by using the 'gftools fix-hinting' command.

create virtualenvpython3 -m venv venv

activate virtualenvsource venv/bin/activate

install gftoolspip install git+https://www.github.com/googlefonts/tools [code: bad-flags]

🔥 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 953, but got 950 instead [code: ascent]
  • 🔥 FAIL OS/2.usWinDescent value should be equal or greater than 493, but got 250 instead [code: descent]
🔥 FAIL: Checking OS/2 Metrics match hhea Metrics.
--- Rationale ---

When OS/2 and hhea vertical metrics match, the same linespacing results on
macOS, GNU+Linux and Windows. Unfortunately as of 2018, Google Fonts has
released many fonts with vertical metrics that don't match in this way. When we
fix this issue in these existing families, we will create a visible change in
line/paragraph layout for either Windows or macOS users, which will upset some
of them.

But we have a duty to fix broken stuff, and inconsistent paragraph layout is
unacceptably broken when it is possible to avoid it.

If users complain and prefer the old broken version, they have the freedom to
take care of their own situation.


  • 🔥 FAIL OS/2 sTypoAscender (800) and hhea ascent (950) must be equal. [code: ascender]
🔥 FAIL: Font contains glyphs for whitespace characters?
WARN: Checking OS/2 achVendID.
--- Rationale ---

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

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

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

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

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


  • WARN OS/2 VendorID is 'UKWN', a font editor default. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx [code: bad]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: quotedblbase Contours detected: 1 Expected: 2 Glyph name: aring Contours detected: 3 Expected: 4 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: trademark Contours detected: 3 Expected: 2 Glyph name: Uring Contours detected: 2 Expected: 3 Glyph name: uring Contours detected: 2 Expected: 3 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: arrowboth Contours detected: 2 Expected: 1 Glyph name: arrowupdn Contours detected: 2 Expected: 1 Glyph name: uni030A Contours detected: 1 Expected: 2 Glyph name: uni030A Contours detected: 1 Expected: 2 Glyph name: Uring Contours detected: 2 Expected: 3 Glyph name: arrowupdn Contours detected: 2 Expected: 1 Glyph name: arrowboth Contours detected: 2 Expected: 1 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uring Contours detected: 2 Expected: 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: aring Contours detected: 3 Expected: 4 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: quotedblbase Contours detected: 1 Expected: 2 Glyph name: trademark Contours detected: 3 Expected: 2 [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.


  • WARN This font lacks caret positioning values for these ligature glyphs:

    • periodcentered

    [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 + i
    • i + f
    • hyphen + hyphen

    [code: lacks-kern-info]

WARN: Checking Vertical Metric Linegaps.

[18] Syne-Extra.ttf
🔥 FAIL: Checking file is named canonically.
--- Rationale ---

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

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

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

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


  • 🔥 FAIL Style name used in "Syne-Extra.ttf" is not canonical. You should rebuild the font using any of the following style names: "Thin", "ExtraLight", "Light", "Regular", "Medium", "SemiBold", "Bold", "ExtraBold", "Black", "Thin Italic", "ExtraLight Italic", "Light Italic", "Italic", "Medium Italic", "SemiBold Italic", "Bold Italic", "ExtraBold Italic", "Black Italic". [code: bad-static-filename]
🔥 FAIL: Checking OS/2 fsType does not impose restrictions.
--- 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: 0x00A0 (NO-BREAK SPACE), 0x2074 (SUPERSCRIPT FOUR) and 0x2215 (DIVISION SLASH) [code: missing-codepoints]
🔥 FAIL: Substitute copyright, registered and trademark symbols in name table entries.
  • com.google.fonts/check/name/unwanted_chars

  • 🔥 FAIL NAMEID #0 contains symbols that should be replaced by '(c)'. [code: unwanted-chars]

  • 🔥 FAIL NAMEID #0 contains symbols that should be replaced by '(c)'. [code: unwanted-chars]

🔥 FAIL: Checking OS/2 usWeightClass.
--- Rationale ---

Google Fonts expects variable fonts, static ttfs and static otfs to have
differing OS/2 usWeightClass values.

For Variable Fonts, Thin-Black must be 100-900
For static ttfs, Thin-Black can be 100-900 or 250-900
For static otfs, Thin-Black must be 250-900

If static otfs are set lower than 250, text may appear blurry in legacy Windows
applications.

Glyphsapp users can change the usWeightClass value of an instance by adding a
'weightClass' customParameter.


  • 🔥 FAIL OS/2 usWeightClass is '900' when it should be '400'. [code: bad-value]
🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

A known licensing description must be provided in the NameID 14 (LICENSE
DESCRIPTION) entries of the name table.

The source of truth for this check (to determine which license is in use) is a
file placed side-by-side to your font project including the licensing terms.

Depending on the chosen license, one of the following string snippets is
expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the name
table:
- "This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is available with a FAQ at: https://scripts.sil.org/OFL"
- "Licensed under the Apache License, Version 2.0"
- "Licensed under the Ubuntu Font Licence 1.0."


Currently accepted licenses are Apache or Open Font License.
For a small set of legacy families the Ubuntu Font License may be acceptable as
well.

When in doubt, please choose OFL for new font projects.


  • 🔥 FAIL Font lacks NameID 13 (LICENSE DESCRIPTION). A proper licensing entry must be set. [code: missing]
🔥 FAIL: Are there non-ASCII characters in ASCII-only NAME table entries?
--- Rationale ---

The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).

For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be
the same in CFF fonts which also have this requirement in the OpenType spec.

Note:
A common place where we find non-ASCII strings is on name table entries with
NameID > 18, which are expressly for localising the ASCII-only IDs into Hindi /
Arabic / etc.


  • 🔥 FAIL Bad string at [nameID 0, 'mac_roman']: 'b'Copyright © 2019 by Lucas Descroix. All rights reserved.'' [code: bad-string]
  • 🔥 FAIL Bad string at [nameID 0, 'utf_16_be']: 'b'Copyright © 2019 by Lucas Descroix. All rights reserved.'' [code: bad-string]
  • 🔥 FAIL There are 2 strings containing non-ASCII characters in the ASCII-only NAME table entries. [code: non-ascii-strings]
🔥 FAIL: Copyright notices match canonical pattern in fonts
  • com.google.fonts/check/font_copyright

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright © 2019 by Lucas Descroix. All rights reserved." [code: bad-notice-format]

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright © 2019 by Lucas Descroix. All rights reserved." [code: bad-notice-format]

🔥 FAIL: Check name table: FONT_SUBFAMILY_NAME entries.
🔥 FAIL: PPEM must be an integer on hinted fonts.
--- Rationale ---

Hinted fonts must have head table flag bit 3 set.

Per https://docs.microsoft.com/en-us/typography/opentype/spec/head, bit 3 of
Head::flags decides whether PPEM should be rounded. This bit should always be
set for hinted fonts.

Note:
Bit 3 = Force ppem to integer values for all internal scaler math;
        May use fractional ppem sizes if this bit is clear;


  • 🔥 FAIL This is a hinted font, so it must have bit 3 set on the flags of the head table, so that PPEM values will be rounded into an integer value.

This can be accomplished by using the 'gftools fix-hinting' command.

create virtualenvpython3 -m venv venv

activate virtualenvsource venv/bin/activate

install gftoolspip install git+https://www.github.com/googlefonts/tools [code: bad-flags]

🔥 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 953, but got 950 instead [code: ascent]
  • 🔥 FAIL OS/2.usWinDescent value should be equal or greater than 493, but got 250 instead [code: descent]
🔥 FAIL: Checking OS/2 Metrics match hhea Metrics.
--- Rationale ---

When OS/2 and hhea vertical metrics match, the same linespacing results on
macOS, GNU+Linux and Windows. Unfortunately as of 2018, Google Fonts has
released many fonts with vertical metrics that don't match in this way. When we
fix this issue in these existing families, we will create a visible change in
line/paragraph layout for either Windows or macOS users, which will upset some
of them.

But we have a duty to fix broken stuff, and inconsistent paragraph layout is
unacceptably broken when it is possible to avoid it.

If users complain and prefer the old broken version, they have the freedom to
take care of their own situation.


  • 🔥 FAIL OS/2 sTypoAscender (800) and hhea ascent (950) must be equal. [code: ascender]
🔥 FAIL: Font contains glyphs for whitespace characters?
WARN: Checking OS/2 achVendID.
--- Rationale ---

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

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

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

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

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


  • WARN OS/2 VendorID is 'UKWN', a font editor default. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx [code: bad]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: quotedblbase Contours detected: 1 Expected: 2 Glyph name: aring Contours detected: 3 Expected: 4 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: trademark Contours detected: 3 Expected: 2 Glyph name: Uring Contours detected: 2 Expected: 3 Glyph name: uring Contours detected: 2 Expected: 3 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: uni030A Contours detected: 1 Expected: 2 Glyph name: uni030A Contours detected: 1 Expected: 2 Glyph name: Uring Contours detected: 2 Expected: 3 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uring Contours detected: 2 Expected: 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: aring Contours detected: 3 Expected: 4 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: quotedblbase Contours detected: 1 Expected: 2 Glyph name: trademark Contours detected: 3 Expected: 2 [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.


  • WARN This font lacks caret positioning values for these ligature glyphs:

    • periodcentered

    [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 + i
    • i + f
    • hyphen + hyphen

    [code: lacks-kern-info]

WARN: Checking Vertical Metric Linegaps.

[15] Syne-Italic.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: 0x00A0 (NO-BREAK SPACE), 0x00AD (SOFT HYPHEN), 0x00B2 (SUPERSCRIPT TWO), 0x00B3 (SUPERSCRIPT THREE) and 3 more. [code: missing-codepoints]
🔥 FAIL: Substitute copyright, registered and trademark symbols in name table entries.
  • com.google.fonts/check/name/unwanted_chars

  • 🔥 FAIL NAMEID #0 contains symbols that should be replaced by '(c)'. [code: unwanted-chars]

  • 🔥 FAIL NAMEID #0 contains symbols that should be replaced by '(c)'. [code: unwanted-chars]

🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

A known licensing description must be provided in the NameID 14 (LICENSE
DESCRIPTION) entries of the name table.

The source of truth for this check (to determine which license is in use) is a
file placed side-by-side to your font project including the licensing terms.

Depending on the chosen license, one of the following string snippets is
expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the name
table:
- "This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is available with a FAQ at: https://scripts.sil.org/OFL"
- "Licensed under the Apache License, Version 2.0"
- "Licensed under the Ubuntu Font Licence 1.0."


Currently accepted licenses are Apache or Open Font License.
For a small set of legacy families the Ubuntu Font License may be acceptable as
well.

When in doubt, please choose OFL for new font projects.


  • 🔥 FAIL Font lacks NameID 13 (LICENSE DESCRIPTION). A proper licensing entry must be set. [code: missing]
🔥 FAIL: Are there non-ASCII characters in ASCII-only NAME table entries?
--- Rationale ---

The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).

For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be
the same in CFF fonts which also have this requirement in the OpenType spec.

Note:
A common place where we find non-ASCII strings is on name table entries with
NameID > 18, which are expressly for localising the ASCII-only IDs into Hindi /
Arabic / etc.


  • 🔥 FAIL Bad string at [nameID 0, 'mac_roman']: 'b'Copyright © 2019 by Lucas Descroix. All rights reserved.'' [code: bad-string]
  • 🔥 FAIL Bad string at [nameID 0, 'utf_16_be']: 'b'Copyright © 2019 by Lucas Descroix. All rights reserved.'' [code: bad-string]
  • 🔥 FAIL There are 2 strings containing non-ASCII characters in the ASCII-only NAME table entries. [code: non-ascii-strings]
🔥 FAIL: Copyright notices match canonical pattern in fonts
  • com.google.fonts/check/font_copyright

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright © 2019 by Lucas Descroix. All rights reserved." [code: bad-notice-format]

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright © 2019 by Lucas Descroix. All rights reserved." [code: bad-notice-format]

🔥 FAIL: PPEM must be an integer on hinted fonts.
--- Rationale ---

Hinted fonts must have head table flag bit 3 set.

Per https://docs.microsoft.com/en-us/typography/opentype/spec/head, bit 3 of
Head::flags decides whether PPEM should be rounded. This bit should always be
set for hinted fonts.

Note:
Bit 3 = Force ppem to integer values for all internal scaler math;
        May use fractional ppem sizes if this bit is clear;


  • 🔥 FAIL This is a hinted font, so it must have bit 3 set on the flags of the head table, so that PPEM values will be rounded into an integer value.

This can be accomplished by using the 'gftools fix-hinting' command.

create virtualenvpython3 -m venv venv

activate virtualenvsource venv/bin/activate

install gftoolspip install git+https://www.github.com/googlefonts/tools [code: bad-flags]

🔥 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 953, but got 950 instead [code: ascent]
  • 🔥 FAIL OS/2.usWinDescent value should be equal or greater than 493, but got 250 instead [code: descent]
🔥 FAIL: Checking OS/2 Metrics match hhea Metrics.
--- Rationale ---

When OS/2 and hhea vertical metrics match, the same linespacing results on
macOS, GNU+Linux and Windows. Unfortunately as of 2018, Google Fonts has
released many fonts with vertical metrics that don't match in this way. When we
fix this issue in these existing families, we will create a visible change in
line/paragraph layout for either Windows or macOS users, which will upset some
of them.

But we have a duty to fix broken stuff, and inconsistent paragraph layout is
unacceptably broken when it is possible to avoid it.

If users complain and prefer the old broken version, they have the freedom to
take care of their own situation.


  • 🔥 FAIL OS/2 sTypoAscender (800) and hhea ascent (950) must be equal. [code: ascender]
🔥 FAIL: Font contains glyphs for whitespace characters?
WARN: Checking OS/2 achVendID.
--- Rationale ---

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

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

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

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

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


  • WARN OS/2 VendorID is 'UKWN', a font editor default. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx [code: bad]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: quotedblbase Contours detected: 1 Expected: 2 Glyph name: bullet Contours detected: 2 Expected: 1 Glyph name: dollar Contours detected: 2 Expected: 1 or 3 Glyph name: asterisk Contours detected: 2 Expected: 1 or 4 Glyph name: one Contours detected: 2 Expected: 1 Glyph name: six Contours detected: 3 Expected: 1 or 2 Glyph name: guilsinglright Contours detected: 2 Expected: 1 Glyph name: equal Contours detected: 3 Expected: 2 Glyph name: greater Contours detected: 2 Expected: 1 Glyph name: B Contours detected: 1 Expected: 2 or 3 Glyph name: G Contours detected: 2 Expected: 1 Glyph name: N Contours detected: 3 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: Z Contours detected: 2 Expected: 1 Glyph name: bracketleft Contours detected: 2 Expected: 1 Glyph name: a Contours detected: 3 Expected: 2 Glyph name: d Contours detected: 1 Expected: 2 Glyph name: q Contours detected: 1 Expected: 2 Glyph name: braceright Contours detected: 2 Expected: 1 Glyph name: currency Contours detected: 1 Expected: 2 Glyph name: copyright Contours detected: 2 Expected: 3 Glyph name: registered Contours detected: 2 Expected: 3 or 4 Glyph name: paragraph Contours detected: 5 Expected: 1, 2 or 3 Glyph name: onequarter Contours detected: 6 Expected: 3 or 4 Glyph name: threequarters Contours detected: 6 Expected: 3 or 4 Glyph name: Adieresis Contours detected: 5 Expected: 4 Glyph name: Edieresis Contours detected: 4 Expected: 3 Glyph name: Idieresis Contours detected: 4 Expected: 3 Glyph name: Ntilde Contours detected: 4 Expected: 2 Glyph name: Odieresis Contours detected: 5 Expected: 4 Glyph name: Udieresis Contours detected: 4 Expected: 3 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: eth Contours detected: 1 Expected: 2 Glyph name: divide Contours detected: 7 Expected: 3 Glyph name: amacron Contours detected: 4 Expected: 3 Glyph name: abreve Contours detected: 4 Expected: 3 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: dcaron Contours detected: 2 Expected: 3 Glyph name: dcroat Contours detected: 1 Expected: 2 Glyph name: Gbreve Contours detected: 3 Expected: 2 Glyph name: Gdotaccent Contours detected: 3 Expected: 2 Glyph name: uni0122 Contours detected: 3 Expected: 2 Glyph name: less Contours detected: 2 Expected: 1 Glyph name: Nacute Contours detected: 4 Expected: 2 Glyph name: uni0145 Contours detected: 4 Expected: 2 Glyph name: Ncaron Contours detected: 4 Expected: 2 Glyph name: at Contours detected: 3 Expected: 2 Glyph name: Eng Contours detected: 3 Expected: 1 Glyph name: eng Contours detected: 2 Expected: 1 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Ydieresis Contours detected: 4 Expected: 3 Glyph name: Zacute Contours detected: 3 Expected: 2 Glyph name: Zdotaccent Contours detected: 3 Expected: 2 Glyph name: Zcaron Contours detected: 3 Expected: 2 Glyph name: arrowleft Contours detected: 2 Expected: 1 Glyph name: arrowup Contours detected: 2 Expected: 1 Glyph name: arrowright Contours detected: 2 Expected: 1 Glyph name: uni2198 Contours detected: 2 Expected: 1 Glyph name: uni2199 Contours detected: 2 Expected: 1 Glyph name: partialdiff Contours detected: 1 Expected: 2 Glyph name: emptyset Contours detected: 2 Expected: 3 Glyph name: product Contours detected: 2 Expected: 1 Glyph name: summation Contours detected: 2 Expected: 1 Glyph name: infinity Contours detected: 2 Expected: 3 Glyph name: notequal Contours detected: 3 Expected: 1 Glyph name: lessequal Contours detected: 3 Expected: 2 Glyph name: greaterequal Contours detected: 3 Expected: 2 Glyph name: percent Contours detected: 4 Expected: 5 Glyph name: Wdieresis Contours detected: 4 Expected: 3 Glyph name: uni2158 Contours detected: 6 Expected: 4 Glyph name: oneeighth Contours detected: 4 Expected: 5 Glyph name: threeeighths Contours detected: 4 Expected: 5 Glyph name: fiveeighths Contours detected: 4 Expected: 5 Glyph name: seveneighths Contours detected: 4 Expected: 5 Glyph name: amacron Contours detected: 4 Expected: 3 Glyph name: percent Contours detected: 4 Expected: 5 Glyph name: Udieresis Contours detected: 4 Expected: 3 Glyph name: onequarter Contours detected: 6 Expected: 3 or 4 Glyph name: a Contours detected: 3 Expected: 2 Glyph name: abreve Contours detected: 4 Expected: 3 Glyph name: arrowup Contours detected: 2 Expected: 1 Glyph name: Adieresis Contours detected: 5 Expected: 4 Glyph name: adieresis Contours detected: 5 Expected: 4 Glyph name: aacute Contours detected: 4 Expected: 3 Glyph name: Nacute Contours detected: 4 Expected: 2 Glyph name: agrave Contours detected: 4 Expected: 3 Glyph name: acircumflex Contours detected: 4 Expected: 3 Glyph name: greater Contours detected: 2 Expected: 1 Glyph name: dcroat Contours detected: 1 Expected: 2 Glyph name: Zdotaccent Contours detected: 3 Expected: 2 Glyph name: Odieresis Contours detected: 5 Expected: 4 Glyph name: Z Contours detected: 2 Expected: 1 Glyph name: Gdotaccent Contours detected: 3 Expected: 2 Glyph name: ae Contours detected: 4 Expected: 3 Glyph name: uni2199 Contours detected: 2 Expected: 1 Glyph name: emptyset Contours detected: 2 Expected: 3 Glyph name: Eng Contours detected: 3 Expected: 1 Glyph name: Idieresis Contours detected: 4 Expected: 3 Glyph name: copyright Contours detected: 2 Expected: 3 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: equal Contours detected: 3 Expected: 2 Glyph name: at Contours detected: 3 Expected: 2 Glyph name: G Contours detected: 2 Expected: 1 Glyph name: seveneighths Contours detected: 4 Expected: 5 Glyph name: registered Contours detected: 2 Expected: 3 or 4 Glyph name: summation Contours detected: 2 Expected: 1 Glyph name: oneeighth Contours detected: 4 Expected: 5 Glyph name: braceright Contours detected: 2 Expected: 1 Glyph name: asterisk Contours detected: 2 Expected: 1 or 4 Glyph name: dollar Contours detected: 2 Expected: 1 or 3 Glyph name: fi Contours detected: 2 Expected: 3 Glyph name: B Contours detected: 1 Expected: 2 or 3 Glyph name: bullet Contours detected: 2 Expected: 1 Glyph name: partialdiff Contours detected: 1 Expected: 2 Glyph name: eng Contours detected: 2 Expected: 1 Glyph name: fiveeighths Contours detected: 4 Expected: 5 Glyph name: six Contours detected: 3 Expected: 1 or 2 Glyph name: Gbreve Contours detected: 3 Expected: 2 Glyph name: divide Contours detected: 7 Expected: 3 Glyph name: d Contours detected: 1 Expected: 2 Glyph name: Zcaron Contours detected: 3 Expected: 2 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: aring Contours detected: 5 Expected: 4 Glyph name: currency Contours detected: 1 Expected: 2 Glyph name: Zacute Contours detected: 3 Expected: 2 Glyph name: guilsinglright Contours detected: 2 Expected: 1 Glyph name: dcaron Contours detected: 2 Expected: 3 Glyph name: Edieresis Contours detected: 4 Expected: 3 Glyph name: threequarters Contours detected: 6 Expected: 3 or 4 Glyph name: fl Contours detected: 1 Expected: 2 Glyph name: product Contours detected: 2 Expected: 1 Glyph name: N Contours detected: 3 Expected: 1 Glyph name: bracketleft Contours detected: 2 Expected: 1 Glyph name: lessequal Contours detected: 3 Expected: 2 Glyph name: Ydieresis Contours detected: 4 Expected: 3 Glyph name: q Contours detected: 1 Expected: 2 Glyph name: paragraph Contours detected: 5 Expected: 1, 2 or 3 Glyph name: one Contours detected: 2 Expected: 1 Glyph name: infinity Contours detected: 2 Expected: 3 Glyph name: eth Contours detected: 1 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: threeeighths Contours detected: 4 Expected: 5 Glyph name: quotedblbase Contours detected: 1 Expected: 2 Glyph name: atilde Contours detected: 4 Expected: 3 Glyph name: less Contours detected: 2 Expected: 1 Glyph name: greaterequal Contours detected: 3 Expected: 2 Glyph name: notequal Contours detected: 3 Expected: 1 Glyph name: Wdieresis Contours detected: 4 Expected: 3 Glyph name: Ntilde Contours detected: 4 Expected: 2 Glyph name: uni0122 Contours detected: 3 Expected: 2 Glyph name: uni2198 Contours detected: 2 Expected: 1 Glyph name: Ncaron Contours detected: 4 Expected: 2 Glyph name: uni0145 Contours detected: 4 Expected: 2 [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.


  • WARN This font lacks caret positioning values for these ligature glyphs:

    • s_h
    • f_n
    • f_o
    • f_r
    • f_y
    • c_t
    • f_u
    • s_t
    • z_y
    • f_f_i
    • fi
    • f_m
    • periodcentered

    [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:

    • c + t
    • f + f
    • f + i
    • i + f
    • i + m
    • m + n
    • n + o
    • o + r
    • r + u
    • u + y
    • s + h
    • h + t
    • z + y
    • hyphen + hyphen

    [code: lacks-kern-info]

WARN: Checking Vertical Metric Linegaps.

[15] Syne-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: 0x00A0 (NO-BREAK SPACE), 0x2074 (SUPERSCRIPT FOUR) and 0x2215 (DIVISION SLASH) [code: missing-codepoints]
🔥 FAIL: Substitute copyright, registered and trademark symbols in name table entries.
  • com.google.fonts/check/name/unwanted_chars

  • 🔥 FAIL NAMEID #0 contains symbols that should be replaced by '(c)'. [code: unwanted-chars]

  • 🔥 FAIL NAMEID #0 contains symbols that should be replaced by '(c)'. [code: unwanted-chars]

🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

A known licensing description must be provided in the NameID 14 (LICENSE
DESCRIPTION) entries of the name table.

The source of truth for this check (to determine which license is in use) is a
file placed side-by-side to your font project including the licensing terms.

Depending on the chosen license, one of the following string snippets is
expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the name
table:
- "This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is available with a FAQ at: https://scripts.sil.org/OFL"
- "Licensed under the Apache License, Version 2.0"
- "Licensed under the Ubuntu Font Licence 1.0."


Currently accepted licenses are Apache or Open Font License.
For a small set of legacy families the Ubuntu Font License may be acceptable as
well.

When in doubt, please choose OFL for new font projects.


  • 🔥 FAIL Font lacks NameID 13 (LICENSE DESCRIPTION). A proper licensing entry must be set. [code: missing]
🔥 FAIL: Are there non-ASCII characters in ASCII-only NAME table entries?
--- Rationale ---

The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).

For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be
the same in CFF fonts which also have this requirement in the OpenType spec.

Note:
A common place where we find non-ASCII strings is on name table entries with
NameID > 18, which are expressly for localising the ASCII-only IDs into Hindi /
Arabic / etc.


  • 🔥 FAIL Bad string at [nameID 0, 'mac_roman']: 'b'Copyright © 2019 by Lucas Descroix. All rights reserved.'' [code: bad-string]
  • 🔥 FAIL Bad string at [nameID 0, 'utf_16_be']: 'b'Copyright © 2019 by Lucas Descroix. All rights reserved.'' [code: bad-string]
  • 🔥 FAIL There are 2 strings containing non-ASCII characters in the ASCII-only NAME table entries. [code: non-ascii-strings]
🔥 FAIL: Copyright notices match canonical pattern in fonts
  • com.google.fonts/check/font_copyright

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright © 2019 by Lucas Descroix. All rights reserved." [code: bad-notice-format]

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright © 2019 by Lucas Descroix. All rights reserved." [code: bad-notice-format]

🔥 FAIL: PPEM must be an integer on hinted fonts.
--- Rationale ---

Hinted fonts must have head table flag bit 3 set.

Per https://docs.microsoft.com/en-us/typography/opentype/spec/head, bit 3 of
Head::flags decides whether PPEM should be rounded. This bit should always be
set for hinted fonts.

Note:
Bit 3 = Force ppem to integer values for all internal scaler math;
        May use fractional ppem sizes if this bit is clear;


  • 🔥 FAIL This is a hinted font, so it must have bit 3 set on the flags of the head table, so that PPEM values will be rounded into an integer value.

This can be accomplished by using the 'gftools fix-hinting' command.

create virtualenvpython3 -m venv venv

activate virtualenvsource venv/bin/activate

install gftoolspip install git+https://www.github.com/googlefonts/tools [code: bad-flags]

🔥 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 953, but got 950 instead [code: ascent]
  • 🔥 FAIL OS/2.usWinDescent value should be equal or greater than 493, but got 250 instead [code: descent]
🔥 FAIL: Checking OS/2 Metrics match hhea Metrics.
--- Rationale ---

When OS/2 and hhea vertical metrics match, the same linespacing results on
macOS, GNU+Linux and Windows. Unfortunately as of 2018, Google Fonts has
released many fonts with vertical metrics that don't match in this way. When we
fix this issue in these existing families, we will create a visible change in
line/paragraph layout for either Windows or macOS users, which will upset some
of them.

But we have a duty to fix broken stuff, and inconsistent paragraph layout is
unacceptably broken when it is possible to avoid it.

If users complain and prefer the old broken version, they have the freedom to
take care of their own situation.


  • 🔥 FAIL OS/2 sTypoAscender (800) and hhea ascent (950) must be equal. [code: ascender]
🔥 FAIL: Font contains glyphs for whitespace characters?
WARN: Checking OS/2 achVendID.
--- Rationale ---

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

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

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

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

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


  • WARN OS/2 VendorID is 'UKWN', a font editor default. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx [code: bad]
WARN: Check if each glyph has the recommended amount of contours.
--- 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: quotedblbase Contours detected: 1 Expected: 2 Glyph name: aring Contours detected: 3 Expected: 4 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: trademark Contours detected: 3 Expected: 2 Glyph name: Uring Contours detected: 2 Expected: 3 Glyph name: uring Contours detected: 2 Expected: 3 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: uni030A Contours detected: 1 Expected: 2 Glyph name: uni03A9 Contours detected: 2 Expected: 1 Glyph name: uni030A Contours detected: 1 Expected: 2 Glyph name: Uring Contours detected: 2 Expected: 3 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: uni03A9 Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uring Contours detected: 2 Expected: 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: aring Contours detected: 3 Expected: 4 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: quotedblbase Contours detected: 1 Expected: 2 Glyph name: trademark Contours detected: 3 Expected: 2 [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.


  • WARN This font lacks caret positioning values for these ligature glyphs:

    • periodcentered

    [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 + i
    • i + f
    • hyphen + hyphen

    [code: lacks-kern-info]

WARN: Checking Vertical Metric Linegaps.

Summary

💔 ERROR 🔥 FAIL WARN 💤 SKIP INFO 🍞 PASS 🔎 DEBUG
0 46 20 333 28 239 0
0% 7% 3% 50% 4% 36% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG
Edited by Rosalie Wagner

Merge request reports