GithubHelp home page GithubHelp logo

grenze-gotisch's People

Contributors

aaronbell avatar omnibus-type avatar yorlmar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Forkers

aaronbell

grenze-gotisch's Issues

Google Fonts QA report

Fontbakery report

Fontbakery version: 0.7.15

[3] Family checks
๐Ÿ”ฅ FAIL: Check that OS/2.fsSelection bold & italic settings are unique for each NameID1
--- Rationale ---

Per the OpenType spec: name ID 1 'is used in combination with Font Subfamily
name (name ID 2), and should be shared among at most four fonts that differ
only in weight or style...

This four-way distinction should also be reflected in the OS/2.fsSelection
field, using bits 0 and 5.


  • ๐Ÿ”ฅ FAIL Family 'Grenze Gotisch' has 2 fonts (should be no more than 1) with the same OS/2.fsSelection bold & italic settings: Bold=False, Italic=False
๐Ÿ”ฅ 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 accross 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:
    /var/folders/y0/gs7dshh54gng8n1zgzr53nbw0000gn/T/tmp1fcui78z/fonts/ttf/GrenzeGotisch-Black.ttf: 104
    /var/folders/y0/gs7dshh54gng8n1zgzr53nbw0000gn/T/tmp1fcui78z/fonts/ttf/GrenzeGotisch-Bold.ttf: 79
    /var/folders/y0/gs7dshh54gng8n1zgzr53nbw0000gn/T/tmp1fcui78z/fonts/ttf/GrenzeGotisch-ExtraBold.ttf: 93
    /var/folders/y0/gs7dshh54gng8n1zgzr53nbw0000gn/T/tmp1fcui78z/fonts/ttf/GrenzeGotisch-ExtraLight.ttf: 29
    /var/folders/y0/gs7dshh54gng8n1zgzr53nbw0000gn/T/tmp1fcui78z/fonts/ttf/GrenzeGotisch-Light.ttf: 37
    /var/folders/y0/gs7dshh54gng8n1zgzr53nbw0000gn/T/tmp1fcui78z/fonts/ttf/GrenzeGotisch-Medium.ttf: 54
    /var/folders/y0/gs7dshh54gng8n1zgzr53nbw0000gn/T/tmp1fcui78z/fonts/ttf/GrenzeGotisch-Regular.ttf: 44
    /var/folders/y0/gs7dshh54gng8n1zgzr53nbw0000gn/T/tmp1fcui78z/fonts/ttf/GrenzeGotisch-SemiBold.ttf: 66
    /var/folders/y0/gs7dshh54gng8n1zgzr53nbw0000gn/T/tmp1fcui78z/fonts/ttf/GrenzeGotisch-Thin.ttf: 24
โš  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 ftxvalidator is not available.

[12] GrenzeGotisch-Black.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 4 meaning that:
    The font may be embedded, and temporarily loaded on the remote system, but documents that use it must not be editable.

No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]

๐Ÿ”ฅ FAIL: License URL matches License text on name table?
๐Ÿ”ฅ 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 (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [code: bad-notice-format]

  • ๐Ÿ”ฅ FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)"
    But instead we have got:
    "Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [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 1069, but got 1000 instead [code: ascent]
  • ๐Ÿ”ฅ FAIL OS/2.usWinDescent value should be equal or greater than 350, but got 0 instead [code: descent]
โš  WARN: Checking OS/2 achVendID.
โš  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 value 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.

Another acceptable value is 2000. Since TT outlines are all integers (no
floats), then instances in a VF suffer rounding compromises, and therefore a
1000 UPM is to small because it forces too many such compromises.

Therefore 2000 is a good 'new VF standard', because 2000 is a simple 2x
conversion from existing fonts drawn on a 1000 UPM, and anyone who knows what
10 units can do for 1000 UPM will know what 20 units does too.

Additionally, values above 2048 would result in filesize increases with not
much added benefit.


  • โš  WARN Even though unitsPerEm (1000) in this font is reasonable. It is strongly advised to consider changing it to 2000, since it will likely improve the quality of Variable Fonts by avoiding excessive rounding of coordinates on interpolations. [code: legacy-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: A Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: V Contours detected: 2 Expected: 1
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Z Contours detected: 2 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: 3 or 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
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: uni019D Contours detected: 2 Expected: 1
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: uni0200 Contours detected: 5 Expected: 4
Glyph name: uni0202 Contours detected: 4 Expected: 3
Glyph name: uni0208 Contours detected: 4 Expected: 3
Glyph name: uni020A Contours detected: 3 Expected: 2
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: uni1ECA Contours detected: 3 Expected: 2
Glyph name: Acircumflex Contours detected: 4 Expected: 3
Glyph name: Aring Contours detected: 5 Expected: 3 or 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: Z Contours detected: 2 Expected: 1
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: Aacute Contours detected: 4 Expected: 3
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: Zacute Contours detected: 3 Expected: 2
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: Zdotaccent Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: A Contours detected: 3 Expected: 2
Glyph name: fl Contours detected: 1 Expected: 2
Glyph name: V Contours detected: 2 Expected: 1
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: Agrave Contours detected: 4 Expected: 3
Glyph name: Zcaron Contours detected: 3 Expected: 2
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: Atilde Contours detected: 4 Expected: 3
Glyph name: uni019D Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: Adieresis Contours detected: 5 Expected: 4
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: uni1ECA 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.


  • โš  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: Name table strings must not contain the string 'Reserved Font Name'.
  • com.google.fonts/check/name/rfn

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

โš  WARN: Checking Vertical Metric Linegaps.

[17] GrenzeGotisch-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 4 meaning that:
    The font may be embedded, and temporarily loaded on the remote system, but documents that use it must not be editable.

No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]

๐Ÿ”ฅ FAIL: License URL matches License text on name table?
๐Ÿ”ฅ 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 (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [code: bad-notice-format]

  • ๐Ÿ”ฅ FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)"
    But instead we have got:
    "Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [code: bad-notice-format]

๐Ÿ”ฅ 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 "Grenze Gotisch" but got "Grenze Gotisch Bold". [code: mismatch]
๐Ÿ”ฅ FAIL: Check name table: FONT_SUBFAMILY_NAME entries.
๐Ÿ”ฅ FAIL: Check name table: TYPOGRAPHIC_FAMILY_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 1069, but got 1000 instead [code: ascent]
  • ๐Ÿ”ฅ FAIL OS/2.usWinDescent value should be equal or greater than 350, but got 0 instead [code: descent]
โš  WARN: Checking OS/2 achVendID.
โš  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 value 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.

Another acceptable value is 2000. Since TT outlines are all integers (no
floats), then instances in a VF suffer rounding compromises, and therefore a
1000 UPM is to small because it forces too many such compromises.

Therefore 2000 is a good 'new VF standard', because 2000 is a simple 2x
conversion from existing fonts drawn on a 1000 UPM, and anyone who knows what
10 units can do for 1000 UPM will know what 20 units does too.

Additionally, values above 2048 would result in filesize increases with not
much added benefit.


  • โš  WARN Even though unitsPerEm (1000) in this font is reasonable. It is strongly advised to consider changing it to 2000, since it will likely improve the quality of Variable Fonts by avoiding excessive rounding of coordinates on interpolations. [code: legacy-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: A Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Z Contours detected: 2 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: 3 or 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
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: uni019D Contours detected: 2 Expected: 1
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: uni0200 Contours detected: 5 Expected: 4
Glyph name: uni0202 Contours detected: 4 Expected: 3
Glyph name: uni0208 Contours detected: 4 Expected: 3
Glyph name: uni020A Contours detected: 3 Expected: 2
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: uni1ECA Contours detected: 3 Expected: 2
Glyph name: Acircumflex Contours detected: 4 Expected: 3
Glyph name: Aring Contours detected: 5 Expected: 3 or 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: Z Contours detected: 2 Expected: 1
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: Aacute Contours detected: 4 Expected: 3
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: Zacute Contours detected: 3 Expected: 2
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: Zdotaccent Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: A Contours detected: 3 Expected: 2
Glyph name: fl Contours detected: 1 Expected: 2
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: Agrave Contours detected: 4 Expected: 3
Glyph name: Zcaron Contours detected: 3 Expected: 2
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: Atilde Contours detected: 4 Expected: 3
Glyph name: uni019D Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: Adieresis Contours detected: 5 Expected: 4
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: uni1ECA 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.


  • โš  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: Name table strings must not contain the string 'Reserved Font Name'.
  • com.google.fonts/check/name/rfn

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

โš  WARN: Checking Vertical Metric Linegaps.

[13] GrenzeGotisch-ExtraBold.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 4 meaning that:
    The font may be embedded, and temporarily loaded on the remote system, but documents that use it must not be editable.

No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]

๐Ÿ”ฅ FAIL: License URL matches License text on name table?
๐Ÿ”ฅ 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 (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [code: bad-notice-format]

  • ๐Ÿ”ฅ FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)"
    But instead we have got:
    "Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [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 1069, but got 1000 instead [code: ascent]
  • ๐Ÿ”ฅ FAIL OS/2.usWinDescent value should be equal or greater than 350, but got 0 instead [code: descent]
โš  WARN: Checking OS/2 achVendID.
โš  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 value 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.

Another acceptable value is 2000. Since TT outlines are all integers (no
floats), then instances in a VF suffer rounding compromises, and therefore a
1000 UPM is to small because it forces too many such compromises.

Therefore 2000 is a good 'new VF standard', because 2000 is a simple 2x
conversion from existing fonts drawn on a 1000 UPM, and anyone who knows what
10 units can do for 1000 UPM will know what 20 units does too.

Additionally, values above 2048 would result in filesize increases with not
much added benefit.


  • โš  WARN Even though unitsPerEm (1000) in this font is reasonable. It is strongly advised to consider changing it to 2000, since it will likely improve the quality of Variable Fonts by avoiding excessive rounding of coordinates on interpolations. [code: legacy-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: A Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Z Contours detected: 2 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: 3 or 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
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: uni019D Contours detected: 2 Expected: 1
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: uni0200 Contours detected: 5 Expected: 4
Glyph name: uni0202 Contours detected: 4 Expected: 3
Glyph name: uni0208 Contours detected: 4 Expected: 3
Glyph name: uni020A Contours detected: 3 Expected: 2
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: uni1ECA Contours detected: 3 Expected: 2
Glyph name: Acircumflex Contours detected: 4 Expected: 3
Glyph name: Aring Contours detected: 5 Expected: 3 or 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: Z Contours detected: 2 Expected: 1
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: Aacute Contours detected: 4 Expected: 3
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: Zacute Contours detected: 3 Expected: 2
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: Zdotaccent Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: A Contours detected: 3 Expected: 2
Glyph name: fl Contours detected: 1 Expected: 2
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: Agrave Contours detected: 4 Expected: 3
Glyph name: Zcaron Contours detected: 3 Expected: 2
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: Atilde Contours detected: 4 Expected: 3
Glyph name: uni019D Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: Adieresis Contours detected: 5 Expected: 4
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: uni1ECA 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.


  • โš  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 = 'Grenze Gotisch ExtraBold' / 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: Name table strings must not contain the string 'Reserved Font Name'.
  • com.google.fonts/check/name/rfn

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

โš  WARN: Checking Vertical Metric Linegaps.

[14] GrenzeGotisch-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 4 meaning that:
    The font may be embedded, and temporarily loaded on the remote system, but documents that use it must not be editable.

No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]

๐Ÿ”ฅ FAIL: License URL matches License text on name table?
๐Ÿ”ฅ 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 (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [code: bad-notice-format]

  • ๐Ÿ”ฅ FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)"
    But instead we have got:
    "Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [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 1069, but got 1000 instead [code: ascent]
  • ๐Ÿ”ฅ FAIL OS/2.usWinDescent value should be equal or greater than 350, but got 0 instead [code: descent]
โš  WARN: Checking OS/2 achVendID.
โš  WARN: Checking OS/2 usWeightClass.
  • com.google.fonts/check/usweightclass

  • โš  WARN ExtraLight:200 is OK on TTFs, but OTF files with those values will cause bluring on Windows. GlyphsApp users must set an Instance Custom Parameter for the Thin and ExtraLight styles to 250 and 275, so that if OTFs are exported then it will not blur on Windows. [code: blur-on-windows]

โš  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 value 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.

Another acceptable value is 2000. Since TT outlines are all integers (no
floats), then instances in a VF suffer rounding compromises, and therefore a
1000 UPM is to small because it forces too many such compromises.

Therefore 2000 is a good 'new VF standard', because 2000 is a simple 2x
conversion from existing fonts drawn on a 1000 UPM, and anyone who knows what
10 units can do for 1000 UPM will know what 20 units does too.

Additionally, values above 2048 would result in filesize increases with not
much added benefit.


  • โš  WARN Even though unitsPerEm (1000) in this font is reasonable. It is strongly advised to consider changing it to 2000, since it will likely improve the quality of Variable Fonts by avoiding excessive rounding of coordinates on interpolations. [code: legacy-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: A Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Z Contours detected: 2 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: 3 or 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
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: uni019D Contours detected: 2 Expected: 1
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: uni0200 Contours detected: 5 Expected: 4
Glyph name: uni0202 Contours detected: 4 Expected: 3
Glyph name: uni0208 Contours detected: 4 Expected: 3
Glyph name: uni020A Contours detected: 3 Expected: 2
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: uni1ECA Contours detected: 3 Expected: 2
Glyph name: Acircumflex Contours detected: 4 Expected: 3
Glyph name: Aring Contours detected: 5 Expected: 3 or 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: Z Contours detected: 2 Expected: 1
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: Aacute Contours detected: 4 Expected: 3
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: Zacute Contours detected: 3 Expected: 2
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: Zdotaccent Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: A Contours detected: 3 Expected: 2
Glyph name: fl Contours detected: 1 Expected: 2
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: Agrave Contours detected: 4 Expected: 3
Glyph name: Zcaron Contours detected: 3 Expected: 2
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: Atilde Contours detected: 4 Expected: 3
Glyph name: uni019D Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: Adieresis Contours detected: 5 Expected: 4
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: uni1ECA 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.


  • โš  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 = 'Grenze Gotisch 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: Name table strings must not contain the string 'Reserved Font Name'.
  • com.google.fonts/check/name/rfn

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

โš  WARN: Checking Vertical Metric Linegaps.

[12] GrenzeGotisch-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 4 meaning that:
    The font may be embedded, and temporarily loaded on the remote system, but documents that use it must not be editable.

No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]

๐Ÿ”ฅ FAIL: License URL matches License text on name table?
๐Ÿ”ฅ 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 (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [code: bad-notice-format]

  • ๐Ÿ”ฅ FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)"
    But instead we have got:
    "Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [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 1069, but got 1000 instead [code: ascent]
  • ๐Ÿ”ฅ FAIL OS/2.usWinDescent value should be equal or greater than 350, but got 0 instead [code: descent]
โš  WARN: Checking OS/2 achVendID.
โš  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 value 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.

Another acceptable value is 2000. Since TT outlines are all integers (no
floats), then instances in a VF suffer rounding compromises, and therefore a
1000 UPM is to small because it forces too many such compromises.

Therefore 2000 is a good 'new VF standard', because 2000 is a simple 2x
conversion from existing fonts drawn on a 1000 UPM, and anyone who knows what
10 units can do for 1000 UPM will know what 20 units does too.

Additionally, values above 2048 would result in filesize increases with not
much added benefit.


  • โš  WARN Even though unitsPerEm (1000) in this font is reasonable. It is strongly advised to consider changing it to 2000, since it will likely improve the quality of Variable Fonts by avoiding excessive rounding of coordinates on interpolations. [code: legacy-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: A Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Z Contours detected: 2 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: 3 or 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
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: uni019D Contours detected: 2 Expected: 1
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: uni0200 Contours detected: 5 Expected: 4
Glyph name: uni0202 Contours detected: 4 Expected: 3
Glyph name: uni0208 Contours detected: 4 Expected: 3
Glyph name: uni020A Contours detected: 3 Expected: 2
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: uni1ECA Contours detected: 3 Expected: 2
Glyph name: Acircumflex Contours detected: 4 Expected: 3
Glyph name: Aring Contours detected: 5 Expected: 3 or 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: Z Contours detected: 2 Expected: 1
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: Aacute Contours detected: 4 Expected: 3
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: Zacute Contours detected: 3 Expected: 2
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: Zdotaccent Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: A Contours detected: 3 Expected: 2
Glyph name: fl Contours detected: 1 Expected: 2
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: Agrave Contours detected: 4 Expected: 3
Glyph name: Zcaron Contours detected: 3 Expected: 2
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: Atilde Contours detected: 4 Expected: 3
Glyph name: uni019D Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: Adieresis Contours detected: 5 Expected: 4
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: uni1ECA 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.


  • โš  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: Name table strings must not contain the string 'Reserved Font Name'.
  • com.google.fonts/check/name/rfn

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

โš  WARN: Checking Vertical Metric Linegaps.

[13] GrenzeGotisch-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 4 meaning that:
    The font may be embedded, and temporarily loaded on the remote system, but documents that use it must not be editable.

No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]

๐Ÿ”ฅ FAIL: License URL matches License text on name table?
๐Ÿ”ฅ 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 (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [code: bad-notice-format]

  • ๐Ÿ”ฅ FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)"
    But instead we have got:
    "Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [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 1069, but got 1000 instead [code: ascent]
  • ๐Ÿ”ฅ FAIL OS/2.usWinDescent value should be equal or greater than 350, but got 0 instead [code: descent]
โš  WARN: Checking OS/2 achVendID.
โš  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 value 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.

Another acceptable value is 2000. Since TT outlines are all integers (no
floats), then instances in a VF suffer rounding compromises, and therefore a
1000 UPM is to small because it forces too many such compromises.

Therefore 2000 is a good 'new VF standard', because 2000 is a simple 2x
conversion from existing fonts drawn on a 1000 UPM, and anyone who knows what
10 units can do for 1000 UPM will know what 20 units does too.

Additionally, values above 2048 would result in filesize increases with not
much added benefit.


  • โš  WARN Even though unitsPerEm (1000) in this font is reasonable. It is strongly advised to consider changing it to 2000, since it will likely improve the quality of Variable Fonts by avoiding excessive rounding of coordinates on interpolations. [code: legacy-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: A Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Z Contours detected: 2 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: 3 or 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
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: uni019D Contours detected: 2 Expected: 1
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: uni0200 Contours detected: 5 Expected: 4
Glyph name: uni0202 Contours detected: 4 Expected: 3
Glyph name: uni0208 Contours detected: 4 Expected: 3
Glyph name: uni020A Contours detected: 3 Expected: 2
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: uni1ECA Contours detected: 3 Expected: 2
Glyph name: Acircumflex Contours detected: 4 Expected: 3
Glyph name: Aring Contours detected: 5 Expected: 3 or 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: Z Contours detected: 2 Expected: 1
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: Aacute Contours detected: 4 Expected: 3
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: Zacute Contours detected: 3 Expected: 2
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: Zdotaccent Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: A Contours detected: 3 Expected: 2
Glyph name: fl Contours detected: 1 Expected: 2
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: Agrave Contours detected: 4 Expected: 3
Glyph name: Zcaron Contours detected: 3 Expected: 2
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: Atilde Contours detected: 4 Expected: 3
Glyph name: uni019D Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: Adieresis Contours detected: 5 Expected: 4
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: uni1ECA 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.


  • โš  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 = 'Grenze Gotisch 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: Name table strings must not contain the string 'Reserved Font Name'.
  • com.google.fonts/check/name/rfn

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

โš  WARN: Checking Vertical Metric Linegaps.

[12] GrenzeGotisch-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 4 meaning that:
    The font may be embedded, and temporarily loaded on the remote system, but documents that use it must not be editable.

No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]

๐Ÿ”ฅ FAIL: License URL matches License text on name table?
๐Ÿ”ฅ 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 (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [code: bad-notice-format]

  • ๐Ÿ”ฅ FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)"
    But instead we have got:
    "Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [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 1069, but got 1000 instead [code: ascent]
  • ๐Ÿ”ฅ FAIL OS/2.usWinDescent value should be equal or greater than 350, but got 0 instead [code: descent]
โš  WARN: Checking OS/2 achVendID.
โš  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 value 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.

Another acceptable value is 2000. Since TT outlines are all integers (no
floats), then instances in a VF suffer rounding compromises, and therefore a
1000 UPM is to small because it forces too many such compromises.

Therefore 2000 is a good 'new VF standard', because 2000 is a simple 2x
conversion from existing fonts drawn on a 1000 UPM, and anyone who knows what
10 units can do for 1000 UPM will know what 20 units does too.

Additionally, values above 2048 would result in filesize increases with not
much added benefit.


  • โš  WARN Even though unitsPerEm (1000) in this font is reasonable. It is strongly advised to consider changing it to 2000, since it will likely improve the quality of Variable Fonts by avoiding excessive rounding of coordinates on interpolations. [code: legacy-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: A Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Z Contours detected: 2 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: 3 or 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
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: uni019D Contours detected: 2 Expected: 1
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: uni0200 Contours detected: 5 Expected: 4
Glyph name: uni0202 Contours detected: 4 Expected: 3
Glyph name: uni0208 Contours detected: 4 Expected: 3
Glyph name: uni020A Contours detected: 3 Expected: 2
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: uni1ECA Contours detected: 3 Expected: 2
Glyph name: Acircumflex Contours detected: 4 Expected: 3
Glyph name: Aring Contours detected: 5 Expected: 3 or 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: Z Contours detected: 2 Expected: 1
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: Aacute Contours detected: 4 Expected: 3
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: Zacute Contours detected: 3 Expected: 2
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: Zdotaccent Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: A Contours detected: 3 Expected: 2
Glyph name: fl Contours detected: 1 Expected: 2
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: Agrave Contours detected: 4 Expected: 3
Glyph name: Zcaron Contours detected: 3 Expected: 2
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: Atilde Contours detected: 4 Expected: 3
Glyph name: uni019D Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: Adieresis Contours detected: 5 Expected: 4
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: uni1ECA 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.


  • โš  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: Name table strings must not contain the string 'Reserved Font Name'.
  • com.google.fonts/check/name/rfn

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

โš  WARN: Checking Vertical Metric Linegaps.

[13] GrenzeGotisch-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 4 meaning that:
    The font may be embedded, and temporarily loaded on the remote system, but documents that use it must not be editable.

No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]

๐Ÿ”ฅ FAIL: License URL matches License text on name table?
๐Ÿ”ฅ 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 (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [code: bad-notice-format]

  • ๐Ÿ”ฅ FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)"
    But instead we have got:
    "Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [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 1069, but got 1000 instead [code: ascent]
  • ๐Ÿ”ฅ FAIL OS/2.usWinDescent value should be equal or greater than 350, but got 0 instead [code: descent]
โš  WARN: Checking OS/2 achVendID.
โš  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 value 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.

Another acceptable value is 2000. Since TT outlines are all integers (no
floats), then instances in a VF suffer rounding compromises, and therefore a
1000 UPM is to small because it forces too many such compromises.

Therefore 2000 is a good 'new VF standard', because 2000 is a simple 2x
conversion from existing fonts drawn on a 1000 UPM, and anyone who knows what
10 units can do for 1000 UPM will know what 20 units does too.

Additionally, values above 2048 would result in filesize increases with not
much added benefit.


  • โš  WARN Even though unitsPerEm (1000) in this font is reasonable. It is strongly advised to consider changing it to 2000, since it will likely improve the quality of Variable Fonts by avoiding excessive rounding of coordinates on interpolations. [code: legacy-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: A Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Z Contours detected: 2 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: 3 or 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
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: uni019D Contours detected: 2 Expected: 1
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: uni0200 Contours detected: 5 Expected: 4
Glyph name: uni0202 Contours detected: 4 Expected: 3
Glyph name: uni0208 Contours detected: 4 Expected: 3
Glyph name: uni020A Contours detected: 3 Expected: 2
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: uni1ECA Contours detected: 3 Expected: 2
Glyph name: Acircumflex Contours detected: 4 Expected: 3
Glyph name: Aring Contours detected: 5 Expected: 3 or 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: Z Contours detected: 2 Expected: 1
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: Aacute Contours detected: 4 Expected: 3
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: Zacute Contours detected: 3 Expected: 2
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: Zdotaccent Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: A Contours detected: 3 Expected: 2
Glyph name: fl Contours detected: 1 Expected: 2
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: Agrave Contours detected: 4 Expected: 3
Glyph name: Zcaron Contours detected: 3 Expected: 2
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: Atilde Contours detected: 4 Expected: 3
Glyph name: uni019D Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: Adieresis Contours detected: 5 Expected: 4
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: uni1ECA 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.


  • โš  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 = 'Grenze Gotisch 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: Name table strings must not contain the string 'Reserved Font Name'.
  • com.google.fonts/check/name/rfn

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

โš  WARN: Checking Vertical Metric Linegaps.

[13] GrenzeGotisch-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 4 meaning that:
    The font may be embedded, and temporarily loaded on the remote system, but documents that use it must not be editable.

No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]

๐Ÿ”ฅ FAIL: License URL matches License text on name table?
๐Ÿ”ฅ 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 (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [code: bad-notice-format]

  • ๐Ÿ”ฅ FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)"
    But instead we have got:
    "Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze"." [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 1069, but got 1000 instead [code: ascent]
  • ๐Ÿ”ฅ FAIL OS/2.usWinDescent value should be equal or greater than 350, but got 0 instead [code: descent]
โš  WARN: Checking OS/2 achVendID.
โš  WARN: Checking OS/2 usWeightClass.
  • com.google.fonts/check/usweightclass

  • โš  WARN Thin:100 is OK on TTFs, but OTF files with those values will cause bluring on Windows. GlyphsApp users must set an Instance Custom Parameter for the Thin and ExtraLight styles to 250 and 275, so that if OTFs are exported then it will not blur on Windows. [code: blur-on-windows]

โš  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 value 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.

Another acceptable value is 2000. Since TT outlines are all integers (no
floats), then instances in a VF suffer rounding compromises, and therefore a
1000 UPM is to small because it forces too many such compromises.

Therefore 2000 is a good 'new VF standard', because 2000 is a simple 2x
conversion from existing fonts drawn on a 1000 UPM, and anyone who knows what
10 units can do for 1000 UPM will know what 20 units does too.

Additionally, values above 2048 would result in filesize increases with not
much added benefit.


  • โš  WARN Even though unitsPerEm (1000) in this font is reasonable. It is strongly advised to consider changing it to 2000, since it will likely improve the quality of Variable Fonts by avoiding excessive rounding of coordinates on interpolations. [code: legacy-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: A Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Z Contours detected: 2 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: 3 or 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: Tbar Contours detected: 2 Expected: 1
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: uni019D Contours detected: 2 Expected: 1
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: uni0200 Contours detected: 5 Expected: 4
Glyph name: uni0202 Contours detected: 4 Expected: 3
Glyph name: uni0208 Contours detected: 4 Expected: 3
Glyph name: uni020A Contours detected: 3 Expected: 2
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: uni1ECA Contours detected: 3 Expected: 2
Glyph name: Acircumflex Contours detected: 4 Expected: 3
Glyph name: Aring Contours detected: 5 Expected: 3 or 4
Glyph name: uni1EB0 Contours detected: 5 Expected: 4
Glyph name: uni1EAE Contours detected: 5 Expected: 4
Glyph name: Z Contours detected: 2 Expected: 1
Glyph name: Ibreve Contours detected: 3 Expected: 2
Glyph name: J Contours detected: 2 Expected: 1
Glyph name: Tbar Contours detected: 2 Expected: 1
Glyph name: uni1EA4 Contours detected: 5 Expected: 4
Glyph name: uni1EC8 Contours detected: 3 Expected: 2
Glyph name: Igrave Contours detected: 3 Expected: 2
Glyph name: Itilde Contours detected: 3 Expected: 2
Glyph name: uni1EA6 Contours detected: 5 Expected: 4
Glyph name: Iacute Contours detected: 3 Expected: 2
Glyph name: IJ Contours detected: 4 Expected: 1 or 2
Glyph name: uni1E6C Contours detected: 3 Expected: 2
Glyph name: Aacute Contours detected: 4 Expected: 3
Glyph name: Icircumflex Contours detected: 3 Expected: 2
Glyph name: uni1EAA Contours detected: 5 Expected: 4
Glyph name: Zacute Contours detected: 3 Expected: 2
Glyph name: uni1EA2 Contours detected: 4 Expected: 3
Glyph name: Zdotaccent Contours detected: 3 Expected: 2
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni01C4 Contours detected: 5 Expected: 4
Glyph name: germandbls Contours detected: 2 Expected: 1
Glyph name: A Contours detected: 3 Expected: 2
Glyph name: fl Contours detected: 1 Expected: 2
Glyph name: uni01CF Contours detected: 3 Expected: 2
Glyph name: uni01CA Contours detected: 3 Expected: 2
Glyph name: fi Contours detected: 1 Expected: 3
Glyph name: Agrave Contours detected: 4 Expected: 3
Glyph name: Zcaron Contours detected: 3 Expected: 2
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: AE Contours detected: 3 Expected: 2
Glyph name: uni1EB2 Contours detected: 5 Expected: 4
Glyph name: uni1EB4 Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni01C7 Contours detected: 3 Expected: 2
Glyph name: I Contours detected: 2 Expected: 1
Glyph name: Atilde Contours detected: 4 Expected: 3
Glyph name: uni019D Contours detected: 2 Expected: 1
Glyph name: Amacron Contours detected: 4 Expected: 3
Glyph name: uni021A Contours detected: 3 Expected: 2
Glyph name: Adieresis Contours detected: 5 Expected: 4
Glyph name: uni01CD Contours detected: 4 Expected: 3
Glyph name: Jcircumflex Contours detected: 3 Expected: 2
Glyph name: Aringacute Contours detected: 6 Expected: 3, 4 or 5
Glyph name: X Contours detected: 2 Expected: 1
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: Idieresis Contours detected: 4 Expected: 3
Glyph name: Imacron Contours detected: 3 Expected: 2
Glyph name: Abreve Contours detected: 4 Expected: 3
Glyph name: AEacute Contours detected: 4 Expected: 3
Glyph name: uni1EA8 Contours detected: 5 Expected: 4
Glyph name: T Contours detected: 2 Expected: 1
Glyph name: Oslashacute Contours detected: 3 Expected: 4
Glyph name: Tcaron Contours detected: 3 Expected: 2
Glyph name: uni1ECA 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.


  • โš  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: Name table strings must not contain the string 'Reserved Font Name'.
  • com.google.fonts/check/name/rfn

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

  • โš  WARN Name table entry ("Copyright (c) 2017 by Omnibus-Type (www.omnibus-type.com), with Reserved Font Name "Grenze".") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

โš  WARN: Checking Vertical Metric Linegaps.

Summary

๐Ÿ’” ERROR ๐Ÿ”ฅ FAIL โš  WARN ๐Ÿ’ค SKIP โ„น INFO ๐Ÿž PASS ๐Ÿ”Ž DEBUG
0 52 70 529 55 511 0
0% 4% 6% 43% 5% 42% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

Diff images: Grenze-Gotisch_qa.zip

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.