Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Assign subsets for adlam, cherokee, masaram-gondi, yi #3285

Merged
merged 1 commit into from Apr 9, 2021
Merged

Conversation

rsheeter
Copy link
Collaborator

@rsheeter rsheeter commented Apr 9, 2021

Assign shiny new subsets to a few Noto things.

@rsheeter rsheeter requested a review from marekjez86 April 9, 2021 02:47
@gf-bot
Copy link

gf-bot commented Apr 9, 2021

Fontbakery report

Fontbakery version: 0.7.34

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

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

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

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


  • WARN Could not find ftxvalidator.

[21] NotoSansAdlam[wght].ttf
💔 ERROR: Validate STAT particle names and values match the fallback names in GFAxisRegistry.
--- Rationale ---

Check that particle names and values on STAT table match the fallback names in
each axis entry at the Google Fonts Axis Registry, available at
https://github.com/google/fonts/tree/master/axisregistry


  • 💔 ERROR Failed with AttributeError: 'NoneType' object has no attribute 'AxisValue'
🔥 FAIL: Does DESCRIPTION file contain broken links?
--- Rationale ---

The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font
family webpage on the Google Fonts website. For that reason, all hyperlinks in
it must be properly working.


  • 🔥 FAIL The following links are broken in the DESCRIPTION file:
    //www.google.com/fonts/earlyaccess [code: broken-links]
🔥 FAIL: Check `Google Fonts Latin Core` glyph coverage.
--- Rationale ---

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


  • 🔥 FAIL Missing required codepoints: 0x0030 (DIGIT ZERO), 0x0031 (DIGIT ONE), 0x0032 (DIGIT TWO), 0x0033 (DIGIT THREE) and 163 more. [code: missing-codepoints]
🔥 FAIL: Check license file has good copyright string.
--- Rationale ---

An OFL.txt file's first line should be the font copyright e.g:
"Copyright 2019 The Montserrat Project Authors
(https://github.com/julietaula/montserrat)"


  • 🔥 FAIL First line in license file does not match expected format: "copyright 2012 google inc. all rights reserved."
🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

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

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

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


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

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


  • 🔥 FAIL License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software." Must be changed to "This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL" [code: wrong]
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
--- Rationale ---

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

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


  • 🔥 FAIL Font is missing the 'gasp' table. Try exporting the font with autohinting enabled.
    If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting'
    GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: METADATA.pb should contain at least "menu" and "latin" subsets.
🔥 FAIL: METADATA.pb subsets should be alphabetically ordered.
🔥 FAIL: Copyright notices match canonical pattern in METADATA.pb
--- Rationale ---

The expected pattern for the copyright string adheres to the following rules:
* It must say "Copyright" followed by a 4 digit year (optionally followed by a
hyphen and another 4 digit year)
* Then it must say "The <familyname> Project Authors"
* And within parentheses, a URL for a git repository must be provided
* The check is case insensitive and does not validate whether the familyname is
correct, even though we'd expect it is (and we may soon update the check to
validate that aspect as well!)

Here is an example of a valid copyright string:
"Copyright 2017 The Archivo Black Project Authors
(https://github.com/Omnibus-Type/ArchivoBlack)"


  • 🔥 FAIL METADATA.pb: Copyright notices should match a pattern similar to:
    "Copyright 2020 The Familyname Project Authors (git url)"
    But instead we have got:
    "copyright 2017-2019 google llc. all rights reserved." [code: bad-notice-format]
🔥 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 2017-2019 Google LLC. All Rights Reserved." [code: bad-notice-format]

🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
--- Rationale ---

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

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

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

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


  • 🔥 FAIL The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the gftools fix-nonhinting script. [code: lacks-smart-dropout]
🔥 FAIL: Name table entries should not contain line-breaks.
--- Rationale ---

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

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


  • 🔥 FAIL Name entry DESCRIPTION on platform WINDOWS contains a line-break. [code: line-break]
🔥 FAIL: METADATA.pb: Designer is listed with the correct name on the Google Fonts catalog of designers?
🔥 FAIL: Ensure variable fonts include an avar table.
--- Rationale ---

All high quality variable fonts include an avar table to correctly define axes
progression rates.

For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,
because a 10% progression from 0% may be too much to define the 200, while 90%
may be too little to define the 900.


  • 🔥 FAIL This variable font does not have an avar table. [code: missing-avar]
🔥 FAIL: Name table records must not have trailing spaces.
🔥 FAIL: Are there unwanted tables?
--- Rationale ---

Some font editors store source data in their own SFNT tables, and these can
sometimes sneak into final release files, which should only have OpenType spec
tables.


They can be removed with the gftools fix-unwanted-tables script.

🔥 FAIL: Does the font have a DSIG table?
--- Rationale ---

Microsoft Office 2013 and below products expect fonts to have a digital
signature declared in a DSIG table in order to implement OpenType features. The
EOL date for Microsoft Office 2013 products is 4/11/2023. This issue does not
impact Microsoft Office 2016 and above products.

This checks verifies that this signature is available in the font.

A fake signature is enough to address this issue. If needed, a dummy table can
be added to the font with the `gftools fix-dsig` script available at
https://github.com/googlefonts/gftools

Reference: https://github.com/googlefonts/fontbakery/issues/1845


  • 🔥 FAIL This font lacks a digital signature (DSIG table). Some applications may require one (even if only a dummy placeholder) in order to work properly. You can add a DSIG table by running the gftools fix-dsig script. [code: lacks-signature]
WARN: DESCRIPTION.en_us.html should end in a linebreak.
--- Rationale ---

Some older text-handling tools sometimes misbehave if the last line of data in
a text file is not terminated with a newline character (also known as '\n').

We know that this is a very small detail, but for the sake of keeping all
DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts
collection, we chose to adopt the practice of placing this final linebreak char
on them.


  • WARN The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]
WARN: METADATA.pb: Fontfamily is listed on Google Fonts API?
WARN: A static fonts directory with at least two fonts must accompany variable fonts
--- Rationale ---

Variable font family directories kept in the google/fonts git repo may include
a static/ subdir containing static fonts.
These files are meant to be served for users that still lack support for
variable fonts in their web browsers.


  • WARN Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]
WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test heuristically looks for on-curve points which are close to, but do
not sit on, significant boundary coordinates. For example, a point which has a
Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the
baseline, the test also checks for points near the x-height (but only for lower
case Latin letters), cap-height, ascender and descender Y coordinates.

Not all such misaligned curve points are a mistake, and sometimes the design
may call for points in locations near the boundaries. As this test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • u1E907: X=291.0,Y=1.0 (should be at baseline 0?)
    • u1E907.fina: X=291.0,Y=1.0 (should be at baseline 0?)
    • u1E907.init: X=291.0,Y=1.0 (should be at baseline 0?)
    • u1E907.medi: X=291.0,Y=1.0 (should be at baseline 0?)
    • u1E90D: X=431.0,Y=-1.0 (should be at baseline 0?)
    • u1E90D.fina: X=432.0,Y=-1.0 (should be at baseline 0?)
    • u1E90D.init: X=431.0,Y=-1.0 (should be at baseline 0?)
    • u1E90D.medi: X=432.0,Y=-1.0 (should be at baseline 0?)
    • u1E90B.fina: X=529.5,Y=0.5 (should be at baseline 0?)
    • u1E90B.medi: X=529.5,Y=0.5 (should be at baseline 0?) and 63 more. [code: found-misalignments]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
1 16 5 45 8 120 0
1% 8% 3% 23% 4% 62% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@gf-bot
Copy link

gf-bot commented Apr 9, 2021

Fontbakery report

Fontbakery version: 0.7.34

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

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

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

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


  • WARN Could not find ftxvalidator.

[22] NotoSansAdlamUnjoined[wght].ttf
💔 ERROR: Validate STAT particle names and values match the fallback names in GFAxisRegistry.
--- Rationale ---

Check that particle names and values on STAT table match the fallback names in
each axis entry at the Google Fonts Axis Registry, available at
https://github.com/google/fonts/tree/master/axisregistry


  • 💔 ERROR Failed with AttributeError: 'NoneType' object has no attribute 'AxisValue'
🔥 FAIL: Does DESCRIPTION file contain broken links?
--- Rationale ---

The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font
family webpage on the Google Fonts website. For that reason, all hyperlinks in
it must be properly working.


  • 🔥 FAIL The following links are broken in the DESCRIPTION file:
    //www.google.com/fonts/earlyaccess [code: broken-links]
🔥 FAIL: Check `Google Fonts Latin Core` glyph coverage.
--- Rationale ---

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


  • 🔥 FAIL Missing required codepoints: 0x0030 (DIGIT ZERO), 0x0031 (DIGIT ONE), 0x0032 (DIGIT TWO), 0x0033 (DIGIT THREE) and 163 more. [code: missing-codepoints]
🔥 FAIL: Check license file has good copyright string.
--- Rationale ---

An OFL.txt file's first line should be the font copyright e.g:
"Copyright 2019 The Montserrat Project Authors
(https://github.com/julietaula/montserrat)"


  • 🔥 FAIL First line in license file does not match expected format: "copyright 2012 google inc. all rights reserved."
🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

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

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

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


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

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


  • 🔥 FAIL License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software." Must be changed to "This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL" [code: wrong]
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
--- Rationale ---

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

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


  • 🔥 FAIL Font is missing the 'gasp' table. Try exporting the font with autohinting enabled.
    If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting'
    GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: METADATA.pb should contain at least "menu" and "latin" subsets.
🔥 FAIL: METADATA.pb subsets should be alphabetically ordered.
🔥 FAIL: Copyright notices match canonical pattern in METADATA.pb
--- Rationale ---

The expected pattern for the copyright string adheres to the following rules:
* It must say "Copyright" followed by a 4 digit year (optionally followed by a
hyphen and another 4 digit year)
* Then it must say "The <familyname> Project Authors"
* And within parentheses, a URL for a git repository must be provided
* The check is case insensitive and does not validate whether the familyname is
correct, even though we'd expect it is (and we may soon update the check to
validate that aspect as well!)

Here is an example of a valid copyright string:
"Copyright 2017 The Archivo Black Project Authors
(https://github.com/Omnibus-Type/ArchivoBlack)"


  • 🔥 FAIL METADATA.pb: Copyright notices should match a pattern similar to:
    "Copyright 2020 The Familyname Project Authors (git url)"
    But instead we have got:
    "copyright 2017-2019 google llc. all rights reserved." [code: bad-notice-format]
🔥 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 2017-2019 Google LLC. All Rights Reserved." [code: bad-notice-format]

🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
--- Rationale ---

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

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

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

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


  • 🔥 FAIL The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the gftools fix-nonhinting script. [code: lacks-smart-dropout]
🔥 FAIL: Name table entries should not contain line-breaks.
--- Rationale ---

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

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


  • 🔥 FAIL Name entry DESCRIPTION on platform WINDOWS contains a line-break. [code: line-break]
🔥 FAIL: METADATA.pb: Designer is listed with the correct name on the Google Fonts catalog of designers?
🔥 FAIL: Ensure variable fonts include an avar table.
--- Rationale ---

All high quality variable fonts include an avar table to correctly define axes
progression rates.

For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,
because a 10% progression from 0% may be too much to define the 200, while 90%
may be too little to define the 900.


  • 🔥 FAIL This variable font does not have an avar table. [code: missing-avar]
🔥 FAIL: Name table records must not have trailing spaces.
🔥 FAIL: Are there unwanted tables?
--- Rationale ---

Some font editors store source data in their own SFNT tables, and these can
sometimes sneak into final release files, which should only have OpenType spec
tables.


They can be removed with the gftools fix-unwanted-tables script.

🔥 FAIL: Does the font have a DSIG table?
--- Rationale ---

Microsoft Office 2013 and below products expect fonts to have a digital
signature declared in a DSIG table in order to implement OpenType features. The
EOL date for Microsoft Office 2013 products is 4/11/2023. This issue does not
impact Microsoft Office 2016 and above products.

This checks verifies that this signature is available in the font.

A fake signature is enough to address this issue. If needed, a dummy table can
be added to the font with the `gftools fix-dsig` script available at
https://github.com/googlefonts/gftools

Reference: https://github.com/googlefonts/fontbakery/issues/1845


  • 🔥 FAIL This font lacks a digital signature (DSIG table). Some applications may require one (even if only a dummy placeholder) in order to work properly. You can add a DSIG table by running the gftools fix-dsig script. [code: lacks-signature]
WARN: DESCRIPTION.en_us.html should end in a linebreak.
--- Rationale ---

Some older text-handling tools sometimes misbehave if the last line of data in
a text file is not terminated with a newline character (also known as '\n').

We know that this is a very small detail, but for the sake of keeping all
DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts
collection, we chose to adopt the practice of placing this final linebreak char
on them.


  • WARN The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]
WARN: METADATA.pb: Fontfamily is listed on Google Fonts API?
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 = 'Noto Sans Adlam Unjoined' / 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: A static fonts directory with at least two fonts must accompany variable fonts
--- Rationale ---

Variable font family directories kept in the google/fonts git repo may include
a static/ subdir containing static fonts.
These files are meant to be served for users that still lack support for
variable fonts in their web browsers.


  • WARN Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]
WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test heuristically looks for on-curve points which are close to, but do
not sit on, significant boundary coordinates. For example, a point which has a
Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the
baseline, the test also checks for points near the x-height (but only for lower
case Latin letters), cap-height, ascender and descender Y coordinates.

Not all such misaligned curve points are a mistake, and sometimes the design
may call for points in locations near the boundaries. As this test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • u1E907: X=281.0,Y=1.0 (should be at baseline 0?)
    • u1E920: X=437.0,Y=712.5 (should be at cap-height 714?)
    • u1E913: X=699.5,Y=712.0 (should be at cap-height 714?)
    • u1E91F: X=349.0,Y=713.0 (should be at cap-height 714?)
    • braceleft: X=150.0,Y=1.0 (should be at baseline 0?)
    • colon: X=177.5,Y=2.0 (should be at baseline 0?)
    • colon: X=90.0,Y=2.0 (should be at baseline 0?)
    • ellipsis: X=177.5,Y=2.0 (should be at baseline 0?)
    • ellipsis: X=90.0,Y=2.0 (should be at baseline 0?)
    • ellipsis: X=439.5,Y=2.0 (should be at baseline 0?) and 20 more. [code: found-misalignments]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
1 16 6 45 8 119 0
1% 8% 3% 23% 4% 61% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@gf-bot
Copy link

gf-bot commented Apr 9, 2021

Fontbakery report

Fontbakery version: 0.7.34

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

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

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

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


  • WARN Could not find ftxvalidator.

[18] NotoSansCherokee[wght].ttf
💔 ERROR: Validate STAT particle names and values match the fallback names in GFAxisRegistry.
--- Rationale ---

Check that particle names and values on STAT table match the fallback names in
each axis entry at the Google Fonts Axis Registry, available at
https://github.com/google/fonts/tree/master/axisregistry


  • 💔 ERROR Failed with AttributeError: 'NoneType' object has no attribute 'AxisValue'
🔥 FAIL: Does DESCRIPTION file contain broken links?
--- Rationale ---

The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font
family webpage on the Google Fonts website. For that reason, all hyperlinks in
it must be properly working.


  • 🔥 FAIL The following links are broken in the DESCRIPTION file:
    //www.google.com/fonts/earlyaccess [code: broken-links]
🔥 FAIL: Check `Google Fonts Latin Core` glyph coverage.
--- Rationale ---

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


  • 🔥 FAIL Missing required codepoints: 0x0021 (EXCLAMATION MARK), 0x0022 (QUOTATION MARK), 0x0023 (NUMBER SIGN), 0x0024 (DOLLAR SIGN) and 208 more. [code: missing-codepoints]
🔥 FAIL: Check license file has good copyright string.
--- Rationale ---

An OFL.txt file's first line should be the font copyright e.g:
"Copyright 2019 The Montserrat Project Authors
(https://github.com/julietaula/montserrat)"


  • 🔥 FAIL First line in license file does not match expected format: "copyright 2012 google inc. all rights reserved."
🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

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

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

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


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

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


  • 🔥 FAIL License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software." Must be changed to "This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL" [code: wrong]
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
--- Rationale ---

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

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


  • 🔥 FAIL Font is missing the 'gasp' table. Try exporting the font with autohinting enabled.
    If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting'
    GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: METADATA.pb should contain at least "menu" and "latin" subsets.
🔥 FAIL: METADATA.pb subsets should be alphabetically ordered.
🔥 FAIL: Copyright notices match canonical pattern in METADATA.pb
--- Rationale ---

The expected pattern for the copyright string adheres to the following rules:
* It must say "Copyright" followed by a 4 digit year (optionally followed by a
hyphen and another 4 digit year)
* Then it must say "The <familyname> Project Authors"
* And within parentheses, a URL for a git repository must be provided
* The check is case insensitive and does not validate whether the familyname is
correct, even though we'd expect it is (and we may soon update the check to
validate that aspect as well!)

Here is an example of a valid copyright string:
"Copyright 2017 The Archivo Black Project Authors
(https://github.com/Omnibus-Type/ArchivoBlack)"


  • 🔥 FAIL METADATA.pb: Copyright notices should match a pattern similar to:
    "Copyright 2020 The Familyname Project Authors (git url)"
    But instead we have got:
    "copyright 2016 google inc. all rights reserved." [code: bad-notice-format]
🔥 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 2016 Google Inc. All Rights Reserved." [code: bad-notice-format]

🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
--- Rationale ---

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

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

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

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


  • 🔥 FAIL The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the gftools fix-nonhinting script. [code: lacks-smart-dropout]
🔥 FAIL: METADATA.pb: Designer is listed with the correct name on the Google Fonts catalog of designers?
🔥 FAIL: Checking correctness of monospaced metadata.
--- Rationale ---

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

Requirements for monospace fonts:

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

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

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

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

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

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


  • 🔥 FAIL On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch]
  • 🔥 FAIL On monospaced fonts, the value of OS/2.panose.bProportion must be set to 9 (proportion: monospaced), but got 0 instead. [code: mono-bad-panose-proportion]
  • WARN Font is monospaced but 258 glyphs (94.51%) have a different width. You should check the widths of: ['uni13A0', 'uni13A0.alt', 'uni13A1', 'uni13A1.alt', 'uni13A2', 'uni13A2.alt', 'uni13A3', 'uni13A3.alt', 'uni13A4', 'uni13A4.alt', 'uni13A5', 'uni13A5.alt', 'uni13A6', 'uni13A6.alt', 'uni13A7', 'uni13A7.alt', 'uni13A8', 'uni13A8.alt', 'uni13A9', 'uni13A9.alt', 'uni13AA', 'uni13AA.alt', 'uni13AB', 'uni13AB.alt', 'uni13AC', 'uni13AC.alt', 'uni13AD', 'uni13AD.alt', 'uni13AE', 'uni13AE.alt', 'uni13AF', 'uni13AF.alt', 'uni13B0', 'uni13B0.alt', 'uni13B1', 'uni13B1.alt', 'uni13B2', 'uni13B2.alt', 'uni13B3', 'uni13B3.alt', 'uni13B4', 'uni13B4.alt', 'uni13B5', 'uni13B5.alt', 'uni13B6', 'uni13B6.alt', 'uni13B7', 'uni13B7.alt', 'uni13B8', 'uni13B8.alt', 'uni13B9', 'uni13B9.alt', 'uni13BA', 'uni13BA.alt', 'uni13BB', 'uni13BB.alt', 'uni13BC', 'uni13BC.alt', 'uni13BD', 'uni13BD.alt', 'uni13BE', 'uni13BE.alt', 'uni13BF', 'uni13BF.alt', 'uni13C0', 'uni13C0.alt', 'uni13C1', 'uni13C1.alt', 'uni13C2', 'uni13C2.alt', 'uni13C3', 'uni13C3.alt', 'uni13C4', 'uni13C4.alt', 'uni13C5', 'uni13C5.alt', 'uni13C6', 'uni13C6.alt', 'uni13C7', 'uni13C7.alt', 'uni13C8', 'uni13C8.alt', 'uni13C9', 'uni13C9.alt', 'uni13CA', 'uni13CA.alt', 'uni13CB', 'uni13CB.alt', 'uni13CC', 'uni13CC.alt', 'uni13CD', 'uni13CD.alt', 'uni13CE', 'uni13CE.alt', 'uni13CF', 'uni13CF.alt', 'uni13D0', 'uni13D0.alt', 'uni13D1', 'uni13D1.alt', 'uni13D2', 'uni13D2.alt', 'uni13D3', 'uni13D3.alt', 'uni13D4', 'uni13D4.alt', 'uni13D5', 'uni13D5.alt', 'uni13D6', 'uni13D6.alt', 'uni13D7', 'uni13D7.alt', 'uni13D8', 'uni13D8.alt', 'uni13D9', 'uni13D9.alt', 'uni13DA', 'uni13DA.alt', 'uni13DB', 'uni13DB.alt', 'uni13DC', 'uni13DC.alt', 'uni13DD', 'uni13DD.alt', 'uni13DE', 'uni13DE.alt', 'uni13DF', 'uni13DF.alt', 'uni13E0', 'uni13E0.alt', 'uni13E1', 'uni13E1.alt', 'uni13E2', 'uni13E2.alt', 'uni13E3', 'uni13E3.alt', 'uni13E4', 'uni13E4.alt', 'uni13E5', 'uni13E5.alt', 'uni13E6', 'uni13E6.alt', 'uni13E7', 'uni13E7.alt', 'uni13E8', 'uni13E8.alt', 'uni13E9', 'uni13E9.alt', 'uni13EA', 'uni13EA.alt', 'uni13EB', 'uni13EB.alt', 'uni13EC', 'uni13EC.alt', 'uni13ED', 'uni13ED.alt', 'uni13EE', 'uni13EE.alt', 'uni13EF', 'uni13EF.alt', 'uni13F0', 'uni13F0.alt', 'uni13F1', 'uni13F1.alt', 'uni13F2', 'uni13F2.alt', 'uni13F3', 'uni13F3.alt', 'uni13F4', 'uni13F4.alt', 'uni13F5', 'uni13F5.alt', 'uni13F8', 'uni13F9', 'uni13FA', 'uni13FB', 'uni13FC', 'uni13FD', 'uniAB70', 'uniAB71', 'uniAB72', 'uniAB73', 'uniAB74', 'uniAB75', 'uniAB76', 'uniAB77', 'uniAB78', 'uniAB79', 'uniAB7A', 'uniAB7B', 'uniAB7C', 'uniAB7D', 'uniAB7E', 'uniAB7F', 'uniAB80', 'uniAB81', 'uniAB82', 'uniAB83', 'uniAB84', 'uniAB85', 'uniAB86', 'uniAB87', 'uniAB88', 'uniAB89', 'uniAB8A', 'uniAB8B', 'uniAB8C', 'uniAB8D', 'uniAB8E', 'uniAB8F', 'uniAB90', 'uniAB91', 'uniAB92', 'uniAB93', 'uniAB94', 'uniAB95', 'uniAB96', 'uniAB97', 'uniAB98', 'uniAB99', 'uniAB9A', 'uniAB9B', 'uniAB9C', 'uniAB9D', 'uniAB9E', 'uniAB9F', 'uniABA0', 'uniABA1', 'uniABA2', 'uniABA3', 'uniABA4', 'uniABA5', 'uniABA6', 'uniABA7', 'uniABA8', 'uniABA9', 'uniABAA', 'uniABAB', 'uniABAC', 'uniABAD', 'uniABAE', 'uniABAF', 'uniABB0', 'uniABB1', 'uniABB2', 'uniABB3', 'uniABB4', 'uniABB5', 'uniABB6', 'uniABB7', 'uniABB8', 'uniABB9', 'uniABBA', 'uniABBB', 'uniABBC', 'uniABBD', 'uniABBE', 'uniABBF'] [code: mono-outliers]
🔥 FAIL: Does the font have a DSIG table?
--- Rationale ---

Microsoft Office 2013 and below products expect fonts to have a digital
signature declared in a DSIG table in order to implement OpenType features. The
EOL date for Microsoft Office 2013 products is 4/11/2023. This issue does not
impact Microsoft Office 2016 and above products.

This checks verifies that this signature is available in the font.

A fake signature is enough to address this issue. If needed, a dummy table can
be added to the font with the `gftools fix-dsig` script available at
https://github.com/googlefonts/gftools

Reference: https://github.com/googlefonts/fontbakery/issues/1845


  • 🔥 FAIL This font lacks a digital signature (DSIG table). Some applications may require one (even if only a dummy placeholder) in order to work properly. You can add a DSIG table by running the gftools fix-dsig script. [code: lacks-signature]
WARN: DESCRIPTION.en_us.html should end in a linebreak.
--- Rationale ---

Some older text-handling tools sometimes misbehave if the last line of data in
a text file is not terminated with a newline character (also known as '\n').

We know that this is a very small detail, but for the sake of keeping all
DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts
collection, we chose to adopt the practice of placing this final linebreak char
on them.


  • WARN The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]
WARN: METADATA.pb: Fontfamily is listed on Google Fonts API?
WARN: A static fonts directory with at least two fonts must accompany variable fonts
--- Rationale ---

Variable font family directories kept in the google/fonts git repo may include
a static/ subdir containing static fonts.
These files are meant to be served for users that still lack support for
variable fonts in their web browsers.


  • WARN Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]
WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test heuristically looks for on-curve points which are close to, but do
not sit on, significant boundary coordinates. For example, a point which has a
Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the
baseline, the test also checks for points near the x-height (but only for lower
case Latin letters), cap-height, ascender and descender Y coordinates.

Not all such misaligned curve points are a mistake, and sometimes the design
may call for points in locations near the boundaries. As this test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni13A1: X=660.0,Y=-1.5 (should be at baseline 0?)
    • uni13A1.alt: X=609.5,Y=-1.5 (should be at baseline 0?)
    • uni13A7: X=289.0,Y=715.0 (should be at cap-height 714?)
    • uni13AE: X=297.0,Y=715.0 (should be at cap-height 714?)
    • uni13B2: X=543.0,Y=-1.5 (should be at baseline 0?)
    • uni13BA: X=856.0,Y=713.0 (should be at cap-height 714?)
    • uni13BA: X=940.0,Y=713.0 (should be at cap-height 714?)
    • uni13C0: X=502.0,Y=714.5 (should be at cap-height 714?)
    • uni13C9: X=1121.0,Y=713.0 (should be at cap-height 714?)
    • uni13CB: X=462.5,Y=713.0 (should be at cap-height 714?) and 11 more. [code: found-misalignments]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
1 13 5 45 8 123 0
1% 7% 3% 23% 4% 63% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@gf-bot
Copy link

gf-bot commented Apr 9, 2021

Fontbakery report

Fontbakery version: 0.7.34

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

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

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

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


  • WARN Could not find ftxvalidator.

[21] NotoSansMasaramGondi-Regular.ttf
🔥 FAIL: Does DESCRIPTION file contain broken links?
--- Rationale ---

The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font
family webpage on the Google Fonts website. For that reason, all hyperlinks in
it must be properly working.


  • 🔥 FAIL The following links are broken in the DESCRIPTION file:
    //www.google.com/fonts/earlyaccess [code: broken-links]
🔥 FAIL: Check `Google Fonts Latin Core` glyph coverage.
--- Rationale ---

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


  • 🔥 FAIL Missing required codepoints: 0x0023 (NUMBER SIGN), 0x0024 (DOLLAR SIGN), 0x0026 (AMPERSAND), 0x0030 (DIGIT ZERO) and 182 more. [code: missing-codepoints]
🔥 FAIL: Check license file has good copyright string.
--- Rationale ---

An OFL.txt file's first line should be the font copyright e.g:
"Copyright 2019 The Montserrat Project Authors
(https://github.com/julietaula/montserrat)"


  • 🔥 FAIL First line in license file does not match expected format: "copyright 2012 google inc. all rights reserved."
🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

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

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

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


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

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


  • 🔥 FAIL License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software." Must be changed to "This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL" [code: wrong]
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
--- Rationale ---

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

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


  • 🔥 FAIL Font is missing the 'gasp' table. Try exporting the font with autohinting enabled.
    If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting'
    GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: METADATA.pb should contain at least "menu" and "latin" subsets.
🔥 FAIL: METADATA.pb subsets should be alphabetically ordered.
🔥 FAIL: Copyright notices match canonical pattern in METADATA.pb
--- Rationale ---

The expected pattern for the copyright string adheres to the following rules:
* It must say "Copyright" followed by a 4 digit year (optionally followed by a
hyphen and another 4 digit year)
* Then it must say "The <familyname> Project Authors"
* And within parentheses, a URL for a git repository must be provided
* The check is case insensitive and does not validate whether the familyname is
correct, even though we'd expect it is (and we may soon update the check to
validate that aspect as well!)

Here is an example of a valid copyright string:
"Copyright 2017 The Archivo Black Project Authors
(https://github.com/Omnibus-Type/ArchivoBlack)"


  • 🔥 FAIL METADATA.pb: Copyright notices should match a pattern similar to:
    "Copyright 2020 The Familyname Project Authors (git url)"
    But instead we have got:
    "copyright 2019 google llc. all rights reserved." [code: bad-notice-format]
🔥 FAIL: Copyright notices match canonical pattern in fonts
  • com.google.fonts/check/font_copyright

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)"
    But instead we have got:
    "Copyright 2019 Google LLC. All Rights Reserved." [code: bad-notice-format]

🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
--- Rationale ---

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

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

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

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


  • 🔥 FAIL The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the gftools fix-nonhinting script. [code: lacks-smart-dropout]
🔥 FAIL: METADATA.pb: Designer is listed with the correct name on the Google Fonts catalog of designers?
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- Rationale ---

A font's winAscent and winDescent values should be greater than the head
table's yMax, abs(yMin) values. If they are less than these values, clipping
can occur on Windows platforms
(https://github.com/RedHatBrand/Overpass/issues/33).

If the font includes tall/deep writing systems such as Arabic or Devanagari,
the winAscent and winDescent can be greater than the yMax and abs(yMin) to
accommodate vowel marks.

When the win Metrics are significantly greater than the upm, the linespacing
can appear too loose. To counteract this, enabling the OS/2 fsSelection bit 7
(Use_Typo_Metrics), will force Windows to use the OS/2 typo values instead.
This means the font developer can control the linespacing with the typo values,
whilst avoiding clipping by setting the win values to values greater than the
yMax and abs(yMin).


  • 🔥 FAIL OS/2.usWinDescent value should be equal or greater than 213, but got 200 instead. [code: descent]
🔥 FAIL: Checking OS/2 Metrics match hhea Metrics.
--- Rationale ---

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

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

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


  • 🔥 FAIL OS/2 sTypoAscender (827) and hhea ascent (1000) must be equal. [code: ascender]
WARN: DESCRIPTION.en_us.html should end in a linebreak.
--- Rationale ---

Some older text-handling tools sometimes misbehave if the last line of data in
a text file is not terminated with a newline character (also known as '\n').

We know that this is a very small detail, but for the sake of keeping all
DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts
collection, we chose to adopt the practice of placing this final linebreak char
on them.


  • WARN The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]
WARN: METADATA.pb: Fontfamily is listed on Google Fonts API?
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 = 'Noto Sans Masaram Gondi' / SUBFAMILY_NAME = 'Regular'

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

WARN: Checking Vertical Metric Linegaps.
WARN: Check mark characters are in GDEF mark glyph class
--- Rationale ---

Mark characters should be in the GDEF mark glyph class.


  • WARN The following mark characters could be in the GDEF mark glyph class:
    U+11D31, U+11D32, U+11D33, U+11D34, U+11D35, U+11D36, U+11D3A, U+11D3C, U+11D3D, U+11D3F, U+11D40, U+11D41, U+11D43, U+11D44, U+11D45 and U+11D47 [code: mark-chars]
WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test heuristically looks for on-curve points which are close to, but do
not sit on, significant boundary coordinates. For example, a point which has a
Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the
baseline, the test also checks for points near the x-height (but only for lower
case Latin letters), cap-height, ascender and descender Y coordinates.

Not all such misaligned curve points are a mistake, and sometimes the design
may call for points in locations near the boundaries. As this test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Gha.MGondi: X=434.0,Y=2.0 (should be at baseline 0?)
    • Jha.MGondi: X=85.0,Y=-1.0 (should be at baseline 0?)
    • Jha.MGondi: X=669.0,Y=-1.0 (should be at baseline 0?)
    • Jha.MGondi: X=574.0,Y=-1.0 (should be at baseline 0?)
    • Jha.MGondi: X=182.0,Y=-1.0 (should be at baseline 0?)
    • Dha.MGondi: X=323.5,Y=1.5 (should be at baseline 0?)
    • GhaHalf.MGondi: X=434.0,Y=2.0 (should be at baseline 0?)
    • JhaHalf.MGondi: X=85.0,Y=-1.0 (should be at baseline 0?)
    • JhaHalf.MGondi: X=669.0,Y=-1.0 (should be at baseline 0?)
    • JhaHalf.MGondi: X=574.0,Y=-1.0 (should be at baseline 0?) and 17 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---

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

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


  • WARN The following glyphs have segments which seem very short:
    • Va.MGondi contains a short segment B<<523.0,136.0>-<516.0,136.0>-<508.0,136.5>> and Va.MGondi contains a short segment B<<508.0,136.5>-<500.0,137.0>-<492.0,138.0>> [code: found-short-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---

This test detects line segments which are nearly, but not quite, exactly
horizontal or vertical. Sometimes such lines are created by design, but often
they are indicative of a design error.

This test is disabled for italic styles, which often contain nearly-upright
lines.


  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
    • Five.alt.MGondi: L<<186.0,348.0>--<185.0,178.0>>
    • Five.alt.MGondi: L<<187.0,554.0>--<186.0,424.0>>
    • Ha.MGondi: L<<182.0,630.0>--<180.0,178.0>>
    • HaHalf.MGondi: L<<182.0,630.0>--<180.0,178.0>>
    • Jha.MGondi: L<<180.0,451.0>--<182.0,-1.0>>
    • JhaHalf.MGondi: L<<180.0,451.0>--<182.0,-1.0>>
    • Na.MGondi: L<<182.0,630.0>--<180.0,178.0>>
    • NaHalf.MGondi: L<<182.0,630.0>--<180.0,178.0>> and Six.MGondi: L<<187.0,630.0>--<185.0,178.0>> [code: found-semi-vertical]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 13 9 45 8 120 0
0% 7% 5% 23% 4% 62% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@gf-bot
Copy link

gf-bot commented Apr 9, 2021

Fontbakery report

Fontbakery version: 0.7.34

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

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

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

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


  • WARN Could not find ftxvalidator.

[17] NotoSansYi-Regular.ttf
🔥 FAIL: Does DESCRIPTION file contain broken links?
--- Rationale ---

The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font
family webpage on the Google Fonts website. For that reason, all hyperlinks in
it must be properly working.


  • 🔥 FAIL The following links are broken in the DESCRIPTION file:
    //www.google.com/fonts/earlyaccess [code: broken-links]
🔥 FAIL: Check `Google Fonts Latin Core` glyph coverage.
--- Rationale ---

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


  • 🔥 FAIL Missing required codepoints: 0x0021 (EXCLAMATION MARK), 0x0022 (QUOTATION MARK), 0x0023 (NUMBER SIGN), 0x0024 (DOLLAR SIGN) and 208 more. [code: missing-codepoints]
🔥 FAIL: Check license file has good copyright string.
--- Rationale ---

An OFL.txt file's first line should be the font copyright e.g:
"Copyright 2019 The Montserrat Project Authors
(https://github.com/julietaula/montserrat)"


  • 🔥 FAIL First line in license file does not match expected format: "copyright 2012 google inc. all rights reserved."
🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

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

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

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


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

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


  • 🔥 FAIL License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software." Must be changed to "This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL" [code: wrong]
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
--- Rationale ---

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

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


  • 🔥 FAIL Font is missing the 'gasp' table. Try exporting the font with autohinting enabled.
    If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting'
    GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: METADATA.pb should contain at least "menu" and "latin" subsets.
🔥 FAIL: Copyright notices match canonical pattern in METADATA.pb
--- Rationale ---

The expected pattern for the copyright string adheres to the following rules:
* It must say "Copyright" followed by a 4 digit year (optionally followed by a
hyphen and another 4 digit year)
* Then it must say "The <familyname> Project Authors"
* And within parentheses, a URL for a git repository must be provided
* The check is case insensitive and does not validate whether the familyname is
correct, even though we'd expect it is (and we may soon update the check to
validate that aspect as well!)

Here is an example of a valid copyright string:
"Copyright 2017 The Archivo Black Project Authors
(https://github.com/Omnibus-Type/ArchivoBlack)"


  • 🔥 FAIL METADATA.pb: Copyright notices should match a pattern similar to:
    "Copyright 2020 The Familyname Project Authors (git url)"
    But instead we have got:
    "copyright 2017 google inc. all rights reserved." [code: bad-notice-format]
🔥 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 2017 Google Inc. All Rights Reserved." [code: bad-notice-format]

🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
--- Rationale ---

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

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

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

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


  • 🔥 FAIL The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the gftools fix-nonhinting script. [code: lacks-smart-dropout]
🔥 FAIL: Check font follows the Google Fonts CJK vertical metric schema
--- Rationale ---

CJK fonts have different vertical metrics when compared to Latin fonts. We
follow the schema developed by dr Ken Lunde for Source Han Sans and the Noto
CJK fonts.

Our documentation includes further information:
https://github.com/googlefonts/gf-docs/tree/master/Spec#cjk-vertical-metrics


  • 🔥 FAIL OS/2.sTypoAscender is "1069" it should be 880.0 [code: bad-OS/2.sTypoAscender]
  • 🔥 FAIL OS/2.sTypoDescender is "-293" it should be -120.0 [code: bad-OS/2.sTypoDescender]
🔥 FAIL: METADATA.pb: Designer is listed with the correct name on the Google Fonts catalog of designers?
🔥 FAIL: Checking correctness of monospaced metadata.
--- Rationale ---

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

Requirements for monospace fonts:

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

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

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

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

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

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


  • 🔥 FAIL On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch]
  • 🔥 FAIL On monospaced fonts, the value of OS/2.panose.bProportion must be set to 9 (proportion: monospaced), but got 2 instead. [code: mono-bad-panose-proportion]
  • WARN Font is monospaced but 1208 glyphs (96.56%) have a different width. You should check the widths of: ['CR', 'space', 'uni00A0', 'uni3001', 'uni3002', 'uni3008', 'uni3009', 'uni300A', 'uni300B', 'uni300C', 'uni300D', 'uni300E', 'uni300F', 'uni3010', 'uni3011', 'uni3014', 'uni3015', 'uni3016', 'uni3017', 'uni3018', 'uni3019', 'uni301A', 'uni301B', 'uni30FB', 'uniA000', 'uniA001', 'uniA002', 'uniA003', 'uniA004', 'uniA005', 'uniA006', 'uniA007', 'uniA008', 'uniA009', 'uniA00A', 'uniA00B', 'uniA00C', 'uniA00D', 'uniA00E', 'uniA00F', 'uniA010', 'uniA011', 'uniA012', 'uniA013', 'uniA014', 'uniA015', 'uniA016', 'uniA017', 'uniA018', 'uniA019', 'uniA01A', 'uniA01B', 'uniA01C', 'uniA01D', 'uniA01E', 'uniA01F', 'uniA020', 'uniA021', 'uniA022', 'uniA023', 'uniA024', 'uniA025', 'uniA026', 'uniA027', 'uniA028', 'uniA029', 'uniA02A', 'uniA02B', 'uniA02C', 'uniA02D', 'uniA02E', 'uniA02F', 'uniA030', 'uniA031', 'uniA032', 'uniA033', 'uniA034', 'uniA035', 'uniA036', 'uniA037', 'uniA038', 'uniA039', 'uniA03A', 'uniA03B', 'uniA03C', 'uniA03D', 'uniA03E', 'uniA03F', 'uniA040', 'uniA041', 'uniA042', 'uniA043', 'uniA044', 'uniA045', 'uniA046', 'uniA047', 'uniA048', 'uniA049', 'uniA04A', 'uniA04B', 'uniA04C', 'uniA04D', 'uniA04E', 'uniA04F', 'uniA050', 'uniA051', 'uniA052', 'uniA053', 'uniA054', 'uniA055', 'uniA056', 'uniA057', 'uniA058', 'uniA05A', 'uniA05B', 'uniA05C', 'uniA05D', 'uniA05E', 'uniA05F', 'uniA060', 'uniA061', 'uniA062', 'uniA063', 'uniA064', 'uniA065', 'uniA066', 'uniA067', 'uniA068', 'uniA069', 'uniA06A', 'uniA06B', 'uniA06C', 'uniA06D', 'uniA06E', 'uniA06F', 'uniA070', 'uniA071', 'uniA072', 'uniA073', 'uniA074', 'uniA075', 'uniA076', 'uniA077', 'uniA078', 'uniA079', 'uniA07A', 'uniA07B', 'uniA07C', 'uniA07D', 'uniA07E', 'uniA07F', 'uniA080', 'uniA081', 'uniA082', 'uniA083', 'uniA084', 'uniA085', 'uniA086', 'uniA087', 'uniA088', 'uniA089', 'uniA08A', 'uniA08B', 'uniA08C', 'uniA08D', 'uniA08E', 'uniA08F', 'uniA090', 'uniA091', 'uniA092', 'uniA093', 'uniA095', 'uniA096', 'uniA097', 'uniA098', 'uniA099', 'uniA09A', 'uniA09B', 'uniA09C', 'uniA09D', 'uniA09E', 'uniA09F', 'uniA0A0', 'uniA0A1', 'uniA0A2', 'uniA0A3', 'uniA0A4', 'uniA0A5', 'uniA0A7', 'uniA0A8', 'uniA0A9', 'uniA0AA', 'uniA0AB', 'uniA0AC', 'uniA0AD', 'uniA0AF', 'uniA0B0', 'uniA0B1', 'uniA0B4', 'uniA0B5', 'uniA0B6', 'uniA0B7', 'uniA0B8', 'uniA0B9', 'uniA0BA', 'uniA0BB', 'uniA0BC', 'uniA0BD', 'uniA0BE', 'uniA0BF', 'uniA0C0', 'uniA0C1', 'uniA0C2', 'uniA0C3', 'uniA0C4', 'uniA0C5', 'uniA0C6', 'uniA0C7', 'uniA0C8', 'uniA0C9', 'uniA0CA', 'uniA0CB', 'uniA0CC', 'uniA0CD', 'uniA0CE', 'uniA0CF', 'uniA0D0', 'uniA0D1', 'uniA0D2', 'uniA0D3', 'uniA0D4', 'uniA0D5', 'uniA0D6', 'uniA0D7', 'uniA0D8', 'uniA0D9', 'uniA0DA', 'uniA0DB', 'uniA0DC', 'uniA0DD', 'uniA0DE', 'uniA0DF', 'uniA0E0', 'uniA0E1', 'uniA0E2', 'uniA0E3', 'uniA0E4', 'uniA0E5', 'uniA0E6', 'uniA0E7', 'uniA0E8', 'uniA0E9', 'uniA0ED', 'uniA0EE', 'uniA0EF', 'uniA0F0', 'uniA0F1', 'uniA0F2', 'uniA0F3', 'uniA0F4', 'uniA0F5', 'uniA0F6', 'uniA0F7', 'uniA0F8', 'uniA0F9', 'uniA0FA', 'uniA0FB', 'uniA0FC', 'uniA0FD', 'uniA0FE', 'uniA0FF', 'uniA100', 'uniA101', 'uniA102', 'uniA103', 'uniA104', 'uniA105', 'uniA106', 'uniA107', 'uniA108', 'uniA109', 'uniA10A', 'uniA10B', 'uniA10C', 'uniA10D', 'uniA10E', 'uniA10F', 'uniA110', 'uniA111', 'uniA112', 'uniA113', 'uniA114', 'uniA115', 'uniA116', 'uniA117', 'uniA118', 'uniA119', 'uniA11A', 'uniA11B', 'uniA11C', 'uniA11D', 'uniA11E', 'uniA11F', 'uniA120', 'uniA121', 'uniA122', 'uniA123', 'uniA124', 'uniA125', 'uniA126', 'uniA127', 'uniA128', 'uniA129', 'uniA12A', 'uniA12B', 'uniA12C', 'uniA12D', 'uniA12E', 'uniA12F', 'uniA130', 'uniA133', 'uniA134', 'uniA135', 'uniA136', 'uniA137', 'uniA138', 'uniA139', 'uniA13A', 'uniA13B', 'uniA13C', 'uniA13D', 'uniA13E', 'uniA13F', 'uniA140', 'uniA141', 'uniA142', 'uniA143', 'uniA144', 'uniA145', 'uniA146', 'uniA147', 'uniA148', 'uniA149', 'uniA14A', 'uniA14B', 'uniA14C', 'uniA14D', 'uniA14E', 'uniA14F', 'uniA150', 'uniA151', 'uniA152', 'uniA153', 'uniA154', 'uniA155', 'uniA156', 'uniA157', 'uniA158', 'uniA159', 'uniA15A', 'uniA15B', 'uniA15C', 'uniA15D', 'uniA15E', 'uniA15F', 'uniA160', 'uniA161', 'uniA162', 'uniA163', 'uniA164', 'uniA165', 'uniA166', 'uniA167', 'uniA168', 'uniA169', 'uniA16A', 'uniA16B', 'uniA16C', 'uniA16D', 'uniA16E', 'uniA16F', 'uniA170', 'uniA171', 'uniA172', 'uniA173', 'uniA174', 'uniA175', 'uniA176', 'uniA177', 'uniA178', 'uniA179', 'uniA17A', 'uniA17B', 'uniA17C', 'uniA17E', 'uniA17F', 'uniA180', 'uniA181', 'uniA182', 'uniA183', 'uniA184', 'uniA185', 'uniA186', 'uniA187', 'uniA188', 'uniA189', 'uniA18A', 'uniA18B', 'uniA18C', 'uniA18D', 'uniA18E', 'uniA18F', 'uniA190', 'uniA191', 'uniA192', 'uniA193', 'uniA194', 'uniA195', 'uniA196', 'uniA197', 'uniA198', 'uniA199', 'uniA19A', 'uniA19B', 'uniA19C', 'uniA19D', 'uniA19E', 'uniA19F', 'uniA1A0', 'uniA1A1', 'uniA1A2', 'uniA1A3', 'uniA1A4', 'uniA1A5', 'uniA1A6', 'uniA1A7', 'uniA1A8', 'uniA1A9', 'uniA1AA', 'uniA1AB', 'uniA1AC', 'uniA1AD', 'uniA1AE', 'uniA1AF', 'uniA1B0', 'uniA1B1', 'uniA1B2', 'uniA1B3', 'uniA1B4', 'uniA1B5', 'uniA1B6', 'uniA1B7', 'uniA1B8', 'uniA1B9', 'uniA1BB', 'uniA1BC', 'uniA1BD', 'uniA1BE', 'uniA1BF', 'uniA1C0', 'uniA1C1', 'uniA1C2', 'uniA1C3', 'uniA1C4', 'uniA1C5', 'uniA1C6', 'uniA1C7', 'uniA1C8', 'uniA1C9', 'uniA1CA', 'uniA1CB', 'uniA1CC', 'uniA1CD', 'uniA1CF', 'uniA1D0', 'uniA1D1', 'uniA1D2', 'uniA1D3', 'uniA1D4', 'uniA1D5', 'uniA1D6', 'uniA1D7', 'uniA1D8', 'uniA1D9', 'uniA1DA', 'uniA1DB', 'uniA1DC', 'uniA1DD', 'uniA1DE', 'uniA1DF', 'uniA1E0', 'uniA1E1', 'uniA1E2', 'uniA1E3', 'uniA1E4', 'uniA1E6', 'uniA1E7', 'uniA1E8', 'uniA1EA', 'uniA1EB', 'uniA1EC', 'uniA1ED', 'uniA1EE', 'uniA1EF', 'uniA1F0', 'uniA1F1', 'uniA1F2', 'uniA1F3', 'uniA1F4', 'uniA1F6', 'uniA1F7', 'uniA1F8', 'uniA1F9', 'uniA1FA', 'uniA1FB', 'uniA1FC', 'uniA1FD', 'uniA1FE', 'uniA1FF', 'uniA200', 'uniA201', 'uniA202', 'uniA203', 'uniA204', 'uniA205', 'uniA206', 'uniA207', 'uniA208', 'uniA209', 'uniA20A', 'uniA20B', 'uniA20C', 'uniA20D', 'uniA20E', 'uniA20F', 'uniA210', 'uniA211', 'uniA212', 'uniA213', 'uniA215', 'uniA216', 'uniA217', 'uniA218', 'uniA219', 'uniA21A', 'uniA21B', 'uniA21C', 'uniA21D', 'uniA21E', 'uniA21F', 'uniA220', 'uniA221', 'uniA222', 'uniA223', 'uniA224', 'uniA225', 'uniA226', 'uniA227', 'uniA228', 'uniA229', 'uniA22A', 'uniA22B', 'uniA22C', 'uniA22D', 'uniA22E', 'uniA22F', 'uniA230', 'uniA231', 'uniA232', 'uniA233', 'uniA234', 'uniA235', 'uniA236', 'uniA237', 'uniA238', 'uniA239', 'uniA23A', 'uniA23B', 'uniA23C', 'uniA23D', 'uniA23E', 'uniA23F', 'uniA240', 'uniA241', 'uniA242', 'uniA243', 'uniA244', 'uniA245', 'uniA246', 'uniA247', 'uniA248', 'uniA249', 'uniA24A', 'uniA24B', 'uniA24C', 'uniA24D', 'uniA24E', 'uniA24F', 'uniA250', 'uniA251', 'uniA252', 'uniA253', 'uniA254', 'uniA255', 'uniA256', 'uniA257', 'uniA258', 'uniA259', 'uniA25A', 'uniA25B', 'uniA25C', 'uniA25D', 'uniA25E', 'uniA25F', 'uniA260', 'uniA261', 'uniA262', 'uniA263', 'uniA265', 'uniA266', 'uniA267', 'uniA268', 'uniA269', 'uniA26A', 'uniA26B', 'uniA26C', 'uniA26D', 'uniA26E', 'uniA26F', 'uniA270', 'uniA271', 'uniA272', 'uniA273', 'uniA274', 'uniA275', 'uniA276', 'uniA277', 'uniA278', 'uniA279', 'uniA27C', 'uniA27D', 'uniA27E', 'uniA27F', 'uniA280', 'uniA281', 'uniA282', 'uniA283', 'uniA284', 'uniA285', 'uniA286', 'uniA287', 'uniA288', 'uniA289', 'uniA28A', 'uniA28B', 'uniA28C', 'uniA28D', 'uniA28E', 'uniA28F', 'uniA290', 'uniA291', 'uniA292', 'uniA293', 'uniA294', 'uniA295', 'uniA296', 'uniA297', 'uniA298', 'uniA299', 'uniA29A', 'uniA29B', 'uniA29C', 'uniA29D', 'uniA29E', 'uniA29F', 'uniA2A0', 'uniA2A1', 'uniA2A2', 'uniA2A3', 'uniA2A4', 'uniA2A5', 'uniA2A6', 'uniA2A7', 'uniA2A8', 'uniA2A9', 'uniA2AA', 'uniA2AB', 'uniA2AC', 'uniA2AD', 'uniA2AE', 'uniA2AF', 'uniA2B0', 'uniA2B1', 'uniA2B2', 'uniA2B3', 'uniA2B4', 'uniA2B5', 'uniA2B9', 'uniA2BA', 'uniA2BB', 'uniA2BC', 'uniA2BD', 'uniA2BE', 'uniA2BF', 'uniA2C0', 'uniA2C3', 'uniA2C4', 'uniA2C5', 'uniA2C6', 'uniA2C7', 'uniA2C8', 'uniA2C9', 'uniA2CA', 'uniA2CB', 'uniA2CC', 'uniA2CD', 'uniA2CE', 'uniA2CF', 'uniA2D0', 'uniA2D1', 'uniA2D2', 'uniA2D3', 'uniA2D4', 'uniA2D5', 'uniA2D6', 'uniA2D7', 'uniA2D8', 'uniA2D9', 'uniA2DA', 'uniA2DB', 'uniA2DC', 'uniA2DD', 'uniA2DE', 'uniA2DF', 'uniA2E0', 'uniA2E1', 'uniA2E2', 'uniA2E3', 'uniA2E4', 'uniA2E5', 'uniA2E6', 'uniA2E7', 'uniA2E8', 'uniA2E9', 'uniA2EA', 'uniA2EB', 'uniA2EC', 'uniA2ED', 'uniA2EE', 'uniA2EF', 'uniA2F0', 'uniA2F1', 'uniA2F2', 'uniA2F3', 'uniA2F4', 'uniA2F5', 'uniA2F6', 'uniA2F7', 'uniA2F8', 'uniA2F9', 'uniA2FA', 'uniA2FB', 'uniA2FC', 'uniA2FD', 'uniA2FE', 'uniA2FF', 'uniA300', 'uniA301', 'uniA302', 'uniA303', 'uniA304', 'uniA305', 'uniA307', 'uniA308', 'uniA309', 'uniA30A', 'uniA30B', 'uniA30C', 'uniA30D', 'uniA30E', 'uniA30F', 'uniA310', 'uniA311', 'uniA312', 'uniA313', 'uniA314', 'uniA315', 'uniA316', 'uniA317', 'uniA318', 'uniA319', 'uniA31A', 'uniA31B', 'uniA31C', 'uniA31D', 'uniA31E', 'uniA31F', 'uniA320', 'uniA321', 'uniA322', 'uniA323', 'uniA324', 'uniA325', 'uniA326', 'uniA327', 'uniA328', 'uniA329', 'uniA32A', 'uniA32B', 'uniA32C', 'uniA32D', 'uniA32E', 'uniA32F', 'uniA330', 'uniA331', 'uniA332', 'uniA333', 'uniA334', 'uniA335', 'uniA338', 'uniA339', 'uniA33A', 'uniA33C', 'uniA33D', 'uniA33E', 'uniA33F', 'uniA340', 'uniA341', 'uniA342', 'uniA343', 'uniA344', 'uniA345', 'uniA346', 'uniA347', 'uniA348', 'uniA349', 'uniA34A', 'uniA34B', 'uniA34C', 'uniA34D', 'uniA34E', 'uniA34F', 'uniA350', 'uniA351', 'uniA352', 'uniA353', 'uniA354', 'uniA355', 'uniA356', 'uniA357', 'uniA358', 'uniA359', 'uniA35A', 'uniA35B', 'uniA35C', 'uniA35D', 'uniA35E', 'uniA35F', 'uniA360', 'uniA361', 'uniA362', 'uniA363', 'uniA364', 'uniA365', 'uniA366', 'uniA367', 'uniA368', 'uniA369', 'uniA36A', 'uniA36B', 'uniA36C', 'uniA36D', 'uniA36E', 'uniA36F', 'uniA370', 'uniA371', 'uniA372', 'uniA373', 'uniA374', 'uniA375', 'uniA376', 'uniA377', 'uniA378', 'uniA379', 'uniA37A', 'uniA37B', 'uniA37C', 'uniA37D', 'uniA37E', 'uniA37F', 'uniA380', 'uniA381', 'uniA382', 'uniA383', 'uniA384', 'uniA385', 'uniA386', 'uniA387', 'uniA388', 'uniA389', 'uniA38A', 'uniA38B', 'uniA38C', 'uniA38D', 'uniA38E', 'uniA38F', 'uniA390', 'uniA391', 'uniA392', 'uniA393', 'uniA395', 'uniA396', 'uniA397', 'uniA398', 'uniA399', 'uniA39A', 'uniA39B', 'uniA39C', 'uniA39D', 'uniA39E', 'uniA39F', 'uniA3A0', 'uniA3A1', 'uniA3A2', 'uniA3A3', 'uniA3A4', 'uniA3A5', 'uniA3A6', 'uniA3A7', 'uniA3A8', 'uniA3A9', 'uniA3AA', 'uniA3AB', 'uniA3AC', 'uniA3AD', 'uniA3AE', 'uniA3AF', 'uniA3B0', 'uniA3B1', 'uniA3B2', 'uniA3B3', 'uniA3B4', 'uniA3B5', 'uniA3B6', 'uniA3B7', 'uniA3B8', 'uniA3B9', 'uniA3BA', 'uniA3BB', 'uniA3BC', 'uniA3BD', 'uniA3BE', 'uniA3BF', 'uniA3C0', 'uniA3C1', 'uniA3C2', 'uniA3C3', 'uniA3C4', 'uniA3C5', 'uniA3C7', 'uniA3C8', 'uniA3C9', 'uniA3CA', 'uniA3CB', 'uniA3CC', 'uniA3CD', 'uniA3CE', 'uniA3CF', 'uniA3D0', 'uniA3D1', 'uniA3D2', 'uniA3D3', 'uniA3D4', 'uniA3D5', 'uniA3D6', 'uniA3D7', 'uniA3D8', 'uniA3D9', 'uniA3DA', 'uniA3DB', 'uniA3DC', 'uniA3DD', 'uniA3DE', 'uniA3DF', 'uniA3E0', 'uniA3E1', 'uniA3E2', 'uniA3E3', 'uniA3E4', 'uniA3E5', 'uniA3E6', 'uniA3E7', 'uniA3E8', 'uniA3E9', 'uniA3EA', 'uniA3EB', 'uniA3EC', 'uniA3ED', 'uniA3EE', 'uniA3EF', 'uniA3F1', 'uniA3F2', 'uniA3F3', 'uniA3F4', 'uniA3F5', 'uniA3F6', 'uniA3F7', 'uniA3F8', 'uniA3F9', 'uniA3FA', 'uniA3FB', 'uniA3FC', 'uniA3FD', 'uniA3FE', 'uniA400', 'uniA401', 'uniA402', 'uniA403', 'uniA404', 'uniA405', 'uniA406', 'uniA407', 'uniA408', 'uniA409', 'uniA40A', 'uniA40C', 'uniA40F', 'uniA412', 'uniA413', 'uniA414', 'uniA415', 'uniA416', 'uniA417', 'uniA418', 'uniA419', 'uniA41A', 'uniA41B', 'uniA41C', 'uniA41D', 'uniA41E', 'uniA41F', 'uniA420', 'uniA421', 'uniA422', 'uniA423', 'uniA424', 'uniA425', 'uniA426', 'uniA427', 'uniA428', 'uniA429', 'uniA42A', 'uniA42B', 'uniA42C', 'uniA42D', 'uniA42E', 'uniA42F', 'uniA430', 'uniA431', 'uniA432', 'uniA433', 'uniA434', 'uniA435', 'uniA436', 'uniA437', 'uniA438', 'uniA439', 'uniA43A', 'uniA43B', 'uniA43C', 'uniA43D', 'uniA43E', 'uniA43F', 'uniA440', 'uniA441', 'uniA442', 'uniA443', 'uniA444', 'uniA445', 'uniA446', 'uniA447', 'uniA448', 'uniA449', 'uniA44A', 'uniA44B', 'uniA44C', 'uniA44D', 'uniA44E', 'uniA44F', 'uniA450', 'uniA451', 'uniA452', 'uniA453', 'uniA454', 'uniA455', 'uniA456', 'uniA457', 'uniA458', 'uniA45A', 'uniA45B', 'uniA45C', 'uniA45D', 'uniA45E', 'uniA45F', 'uniA460', 'uniA461', 'uniA462', 'uniA463', 'uniA464', 'uniA465', 'uniA466', 'uniA467', 'uniA468', 'uniA469', 'uniA46A', 'uniA46B', 'uniA46C', 'uniA46D', 'uniA46E', 'uniA46F', 'uniA470', 'uniA471', 'uniA472', 'uniA473', 'uniA474', 'uniA475', 'uniA476', 'uniA477', 'uniA478', 'uniA479', 'uniA47A', 'uniA47B', 'uniA47C', 'uniA47D', 'uniA47E', 'uniA47F', 'uniA480', 'uniA481', 'uniA482', 'uniA483', 'uniA484', 'uniA485', 'uniA486', 'uniA487', 'uniA488', 'uniA489', 'uniA48A', 'uniA48B', 'uniA48C', 'uniA490', 'uniA491', 'uniA492', 'uniA493', 'uniA494', 'uniA495', 'uniA496', 'uniA497', 'uniA498', 'uniA499', 'uniA49A', 'uniA49B', 'uniA49C', 'uniA49D', 'uniA49E', 'uniA49F', 'uniA4A0', 'uniA4A1', 'uniA4A2', 'uniA4A3', 'uniA4A4', 'uniA4A5', 'uniA4A6', 'uniA4A7', 'uniA4A9', 'uniA4AA', 'uniA4AB', 'uniA4AC', 'uniA4AD', 'uniA4AE', 'uniA4AF', 'uniA4B0', 'uniA4B1', 'uniA4B2', 'uniA4B3', 'uniA4B4', 'uniA4B5', 'uniA4B6', 'uniA4B7', 'uniA4B8', 'uniA4B9', 'uniA4BA', 'uniA4BB', 'uniA4BC', 'uniA4BD', 'uniA4BE', 'uniA4BF', 'uniA4C0', 'uniA4C1', 'uniA4C2', 'uniA4C3', 'uniA4C4', 'uniA4C5', 'uniA4C6', 'uniFF61', 'uniFF62', 'uniFF63', 'uniFF64', 'uniFF65'] [code: mono-outliers]
WARN: DESCRIPTION.en_us.html should end in a linebreak.
--- Rationale ---

Some older text-handling tools sometimes misbehave if the last line of data in
a text file is not terminated with a newline character (also known as '\n').

We know that this is a very small detail, but for the sake of keeping all
DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts
collection, we chose to adopt the practice of placing this final linebreak char
on them.


  • WARN The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]
WARN: METADATA.pb: Fontfamily is listed on Google Fonts API?
WARN: Font contains '.notdef' as its first glyph?
--- Rationale ---

The OpenType specification v1.8.2 recommends that the first glyph is the
'.notdef' glyph without a codepoint assigned and with a drawing.

https://docs.microsoft.com/en-us/typography/opentype/spec
/recom#glyph-0-the-notdef-glyph

Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR' and
'.null' glyphs. This might have been relevant for MacOS 9 applications.


  • WARN Glyph '.notdef' should contain a drawing, but it is empty. [code: empty]
WARN: Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value
WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test heuristically looks for on-curve points which are close to, but do
not sit on, significant boundary coordinates. For example, a point which has a
Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the
baseline, the test also checks for points near the x-height (but only for lower
case Latin letters), cap-height, ascender and descender Y coordinates.

Not all such misaligned curve points are a mistake, and sometimes the design
may call for points in locations near the boundaries. As this test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni3014: X=293.0,Y=2.0 (should be at baseline 0?)
    • uni3015: X=293.0,Y=2.0 (should be at baseline 0?)
    • uniA059: X=219.5,Y=712.0 (should be at cap-height 714?)
    • uniA06C: X=156.0,Y=713.0 (should be at cap-height 714?)
    • uniA06C: X=577.0,Y=713.0 (should be at cap-height 714?)
    • uniA07D: X=268.0,Y=0.5 (should be at baseline 0?)
    • uniA07D: X=208.5,Y=0.5 (should be at baseline 0?)
    • uniA0CD: X=310.0,Y=0.5 (should be at baseline 0?)
    • uniA0CD: X=240.0,Y=0.5 (should be at baseline 0?)
    • uniA0F1: X=283.0,Y=713.0 (should be at cap-height 714?) and 69 more. [code: found-misalignments]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 12 6 49 8 120 0
0% 6% 3% 25% 4% 62% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@rsheeter rsheeter merged commit 2b2aab2 into main Apr 9, 2021
@rsheeter rsheeter deleted the noto_subsets branch April 9, 2021 16:18
@gf-bot
Copy link

gf-bot commented Apr 9, 2021

Fontbakery report

Fontbakery version: 0.7.34

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

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

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

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


  • WARN Could not find ftxvalidator.

[21] NotoSansAdlam[wght].ttf
💔 ERROR: Validate STAT particle names and values match the fallback names in GFAxisRegistry.
--- Rationale ---

Check that particle names and values on STAT table match the fallback names in
each axis entry at the Google Fonts Axis Registry, available at
https://github.com/google/fonts/tree/master/axisregistry


  • 💔 ERROR Failed with AttributeError: 'NoneType' object has no attribute 'AxisValue'
🔥 FAIL: Does DESCRIPTION file contain broken links?
--- Rationale ---

The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font
family webpage on the Google Fonts website. For that reason, all hyperlinks in
it must be properly working.


  • 🔥 FAIL The following links are broken in the DESCRIPTION file:
    //www.google.com/fonts/earlyaccess [code: broken-links]
🔥 FAIL: Check `Google Fonts Latin Core` glyph coverage.
--- Rationale ---

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


  • 🔥 FAIL Missing required codepoints: 0x0030 (DIGIT ZERO), 0x0031 (DIGIT ONE), 0x0032 (DIGIT TWO), 0x0033 (DIGIT THREE) and 163 more. [code: missing-codepoints]
🔥 FAIL: Check license file has good copyright string.
--- Rationale ---

An OFL.txt file's first line should be the font copyright e.g:
"Copyright 2019 The Montserrat Project Authors
(https://github.com/julietaula/montserrat)"


  • 🔥 FAIL First line in license file does not match expected format: "copyright 2012 google inc. all rights reserved."
🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

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

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

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


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

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


  • 🔥 FAIL License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software." Must be changed to "This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL" [code: wrong]
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
--- Rationale ---

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

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


  • 🔥 FAIL Font is missing the 'gasp' table. Try exporting the font with autohinting enabled.
    If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting'
    GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: METADATA.pb should contain at least "menu" and "latin" subsets.
🔥 FAIL: METADATA.pb subsets should be alphabetically ordered.
🔥 FAIL: Copyright notices match canonical pattern in METADATA.pb
--- Rationale ---

The expected pattern for the copyright string adheres to the following rules:
* It must say "Copyright" followed by a 4 digit year (optionally followed by a
hyphen and another 4 digit year)
* Then it must say "The <familyname> Project Authors"
* And within parentheses, a URL for a git repository must be provided
* The check is case insensitive and does not validate whether the familyname is
correct, even though we'd expect it is (and we may soon update the check to
validate that aspect as well!)

Here is an example of a valid copyright string:
"Copyright 2017 The Archivo Black Project Authors
(https://github.com/Omnibus-Type/ArchivoBlack)"


  • 🔥 FAIL METADATA.pb: Copyright notices should match a pattern similar to:
    "Copyright 2020 The Familyname Project Authors (git url)"
    But instead we have got:
    "copyright 2017-2019 google llc. all rights reserved." [code: bad-notice-format]
🔥 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 2017-2019 Google LLC. All Rights Reserved." [code: bad-notice-format]

🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
--- Rationale ---

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

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

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

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


  • 🔥 FAIL The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the gftools fix-nonhinting script. [code: lacks-smart-dropout]
🔥 FAIL: Name table entries should not contain line-breaks.
--- Rationale ---

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

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


  • 🔥 FAIL Name entry DESCRIPTION on platform WINDOWS contains a line-break. [code: line-break]
🔥 FAIL: METADATA.pb: Designer is listed with the correct name on the Google Fonts catalog of designers?
🔥 FAIL: Ensure variable fonts include an avar table.
--- Rationale ---

All high quality variable fonts include an avar table to correctly define axes
progression rates.

For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,
because a 10% progression from 0% may be too much to define the 200, while 90%
may be too little to define the 900.


  • 🔥 FAIL This variable font does not have an avar table. [code: missing-avar]
🔥 FAIL: Name table records must not have trailing spaces.
🔥 FAIL: Are there unwanted tables?
--- Rationale ---

Some font editors store source data in their own SFNT tables, and these can
sometimes sneak into final release files, which should only have OpenType spec
tables.


They can be removed with the gftools fix-unwanted-tables script.

🔥 FAIL: Does the font have a DSIG table?
--- Rationale ---

Microsoft Office 2013 and below products expect fonts to have a digital
signature declared in a DSIG table in order to implement OpenType features. The
EOL date for Microsoft Office 2013 products is 4/11/2023. This issue does not
impact Microsoft Office 2016 and above products.

This checks verifies that this signature is available in the font.

A fake signature is enough to address this issue. If needed, a dummy table can
be added to the font with the `gftools fix-dsig` script available at
https://github.com/googlefonts/gftools

Reference: https://github.com/googlefonts/fontbakery/issues/1845


  • 🔥 FAIL This font lacks a digital signature (DSIG table). Some applications may require one (even if only a dummy placeholder) in order to work properly. You can add a DSIG table by running the gftools fix-dsig script. [code: lacks-signature]
WARN: DESCRIPTION.en_us.html should end in a linebreak.
--- Rationale ---

Some older text-handling tools sometimes misbehave if the last line of data in
a text file is not terminated with a newline character (also known as '\n').

We know that this is a very small detail, but for the sake of keeping all
DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts
collection, we chose to adopt the practice of placing this final linebreak char
on them.


  • WARN The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]
WARN: METADATA.pb: Fontfamily is listed on Google Fonts API?
WARN: A static fonts directory with at least two fonts must accompany variable fonts
--- Rationale ---

Variable font family directories kept in the google/fonts git repo may include
a static/ subdir containing static fonts.
These files are meant to be served for users that still lack support for
variable fonts in their web browsers.


  • WARN Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]
WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test heuristically looks for on-curve points which are close to, but do
not sit on, significant boundary coordinates. For example, a point which has a
Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the
baseline, the test also checks for points near the x-height (but only for lower
case Latin letters), cap-height, ascender and descender Y coordinates.

Not all such misaligned curve points are a mistake, and sometimes the design
may call for points in locations near the boundaries. As this test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • u1E907: X=291.0,Y=1.0 (should be at baseline 0?)
    • u1E907.fina: X=291.0,Y=1.0 (should be at baseline 0?)
    • u1E907.init: X=291.0,Y=1.0 (should be at baseline 0?)
    • u1E907.medi: X=291.0,Y=1.0 (should be at baseline 0?)
    • u1E90D: X=431.0,Y=-1.0 (should be at baseline 0?)
    • u1E90D.fina: X=432.0,Y=-1.0 (should be at baseline 0?)
    • u1E90D.init: X=431.0,Y=-1.0 (should be at baseline 0?)
    • u1E90D.medi: X=432.0,Y=-1.0 (should be at baseline 0?)
    • u1E90B.fina: X=529.5,Y=0.5 (should be at baseline 0?)
    • u1E90B.medi: X=529.5,Y=0.5 (should be at baseline 0?) and 63 more. [code: found-misalignments]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
1 16 5 45 8 120 0
1% 8% 3% 23% 4% 62% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@gf-bot
Copy link

gf-bot commented Apr 9, 2021

Fontbakery report

Fontbakery version: 0.7.34

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

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

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

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


  • WARN Could not find ftxvalidator.

[22] NotoSansAdlamUnjoined[wght].ttf
💔 ERROR: Validate STAT particle names and values match the fallback names in GFAxisRegistry.
--- Rationale ---

Check that particle names and values on STAT table match the fallback names in
each axis entry at the Google Fonts Axis Registry, available at
https://github.com/google/fonts/tree/master/axisregistry


  • 💔 ERROR Failed with AttributeError: 'NoneType' object has no attribute 'AxisValue'
🔥 FAIL: Does DESCRIPTION file contain broken links?
--- Rationale ---

The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font
family webpage on the Google Fonts website. For that reason, all hyperlinks in
it must be properly working.


  • 🔥 FAIL The following links are broken in the DESCRIPTION file:
    //www.google.com/fonts/earlyaccess [code: broken-links]
🔥 FAIL: Check `Google Fonts Latin Core` glyph coverage.
--- Rationale ---

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


  • 🔥 FAIL Missing required codepoints: 0x0030 (DIGIT ZERO), 0x0031 (DIGIT ONE), 0x0032 (DIGIT TWO), 0x0033 (DIGIT THREE) and 163 more. [code: missing-codepoints]
🔥 FAIL: Check license file has good copyright string.
--- Rationale ---

An OFL.txt file's first line should be the font copyright e.g:
"Copyright 2019 The Montserrat Project Authors
(https://github.com/julietaula/montserrat)"


  • 🔥 FAIL First line in license file does not match expected format: "copyright 2012 google inc. all rights reserved."
🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

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

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

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


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

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


  • 🔥 FAIL License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software." Must be changed to "This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL" [code: wrong]
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
--- Rationale ---

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

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


  • 🔥 FAIL Font is missing the 'gasp' table. Try exporting the font with autohinting enabled.
    If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting'
    GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: METADATA.pb should contain at least "menu" and "latin" subsets.
🔥 FAIL: METADATA.pb subsets should be alphabetically ordered.
🔥 FAIL: Copyright notices match canonical pattern in METADATA.pb
--- Rationale ---

The expected pattern for the copyright string adheres to the following rules:
* It must say "Copyright" followed by a 4 digit year (optionally followed by a
hyphen and another 4 digit year)
* Then it must say "The <familyname> Project Authors"
* And within parentheses, a URL for a git repository must be provided
* The check is case insensitive and does not validate whether the familyname is
correct, even though we'd expect it is (and we may soon update the check to
validate that aspect as well!)

Here is an example of a valid copyright string:
"Copyright 2017 The Archivo Black Project Authors
(https://github.com/Omnibus-Type/ArchivoBlack)"


  • 🔥 FAIL METADATA.pb: Copyright notices should match a pattern similar to:
    "Copyright 2020 The Familyname Project Authors (git url)"
    But instead we have got:
    "copyright 2017-2019 google llc. all rights reserved." [code: bad-notice-format]
🔥 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 2017-2019 Google LLC. All Rights Reserved." [code: bad-notice-format]

🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
--- Rationale ---

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

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

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

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


  • 🔥 FAIL The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the gftools fix-nonhinting script. [code: lacks-smart-dropout]
🔥 FAIL: Name table entries should not contain line-breaks.
--- Rationale ---

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

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


  • 🔥 FAIL Name entry DESCRIPTION on platform WINDOWS contains a line-break. [code: line-break]
🔥 FAIL: METADATA.pb: Designer is listed with the correct name on the Google Fonts catalog of designers?
🔥 FAIL: Ensure variable fonts include an avar table.
--- Rationale ---

All high quality variable fonts include an avar table to correctly define axes
progression rates.

For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,
because a 10% progression from 0% may be too much to define the 200, while 90%
may be too little to define the 900.


  • 🔥 FAIL This variable font does not have an avar table. [code: missing-avar]
🔥 FAIL: Name table records must not have trailing spaces.
🔥 FAIL: Are there unwanted tables?
--- Rationale ---

Some font editors store source data in their own SFNT tables, and these can
sometimes sneak into final release files, which should only have OpenType spec
tables.


They can be removed with the gftools fix-unwanted-tables script.

🔥 FAIL: Does the font have a DSIG table?
--- Rationale ---

Microsoft Office 2013 and below products expect fonts to have a digital
signature declared in a DSIG table in order to implement OpenType features. The
EOL date for Microsoft Office 2013 products is 4/11/2023. This issue does not
impact Microsoft Office 2016 and above products.

This checks verifies that this signature is available in the font.

A fake signature is enough to address this issue. If needed, a dummy table can
be added to the font with the `gftools fix-dsig` script available at
https://github.com/googlefonts/gftools

Reference: https://github.com/googlefonts/fontbakery/issues/1845


  • 🔥 FAIL This font lacks a digital signature (DSIG table). Some applications may require one (even if only a dummy placeholder) in order to work properly. You can add a DSIG table by running the gftools fix-dsig script. [code: lacks-signature]
WARN: DESCRIPTION.en_us.html should end in a linebreak.
--- Rationale ---

Some older text-handling tools sometimes misbehave if the last line of data in
a text file is not terminated with a newline character (also known as '\n').

We know that this is a very small detail, but for the sake of keeping all
DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts
collection, we chose to adopt the practice of placing this final linebreak char
on them.


  • WARN The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]
WARN: METADATA.pb: Fontfamily is listed on Google Fonts API?
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 = 'Noto Sans Adlam Unjoined' / 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: A static fonts directory with at least two fonts must accompany variable fonts
--- Rationale ---

Variable font family directories kept in the google/fonts git repo may include
a static/ subdir containing static fonts.
These files are meant to be served for users that still lack support for
variable fonts in their web browsers.


  • WARN Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]
WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test heuristically looks for on-curve points which are close to, but do
not sit on, significant boundary coordinates. For example, a point which has a
Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the
baseline, the test also checks for points near the x-height (but only for lower
case Latin letters), cap-height, ascender and descender Y coordinates.

Not all such misaligned curve points are a mistake, and sometimes the design
may call for points in locations near the boundaries. As this test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • u1E907: X=281.0,Y=1.0 (should be at baseline 0?)
    • u1E920: X=437.0,Y=712.5 (should be at cap-height 714?)
    • u1E913: X=699.5,Y=712.0 (should be at cap-height 714?)
    • u1E91F: X=349.0,Y=713.0 (should be at cap-height 714?)
    • braceleft: X=150.0,Y=1.0 (should be at baseline 0?)
    • colon: X=177.5,Y=2.0 (should be at baseline 0?)
    • colon: X=90.0,Y=2.0 (should be at baseline 0?)
    • ellipsis: X=177.5,Y=2.0 (should be at baseline 0?)
    • ellipsis: X=90.0,Y=2.0 (should be at baseline 0?)
    • ellipsis: X=439.5,Y=2.0 (should be at baseline 0?) and 20 more. [code: found-misalignments]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
1 16 6 45 8 119 0
1% 8% 3% 23% 4% 61% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@gf-bot
Copy link

gf-bot commented Apr 9, 2021

Fontbakery report

Fontbakery version: 0.7.34

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

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

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

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


  • WARN Could not find ftxvalidator.

[18] NotoSansCherokee[wght].ttf
💔 ERROR: Validate STAT particle names and values match the fallback names in GFAxisRegistry.
--- Rationale ---

Check that particle names and values on STAT table match the fallback names in
each axis entry at the Google Fonts Axis Registry, available at
https://github.com/google/fonts/tree/master/axisregistry


  • 💔 ERROR Failed with AttributeError: 'NoneType' object has no attribute 'AxisValue'
🔥 FAIL: Does DESCRIPTION file contain broken links?
--- Rationale ---

The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font
family webpage on the Google Fonts website. For that reason, all hyperlinks in
it must be properly working.


  • 🔥 FAIL The following links are broken in the DESCRIPTION file:
    //www.google.com/fonts/earlyaccess [code: broken-links]
🔥 FAIL: Check `Google Fonts Latin Core` glyph coverage.
--- Rationale ---

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


  • 🔥 FAIL Missing required codepoints: 0x0021 (EXCLAMATION MARK), 0x0022 (QUOTATION MARK), 0x0023 (NUMBER SIGN), 0x0024 (DOLLAR SIGN) and 208 more. [code: missing-codepoints]
🔥 FAIL: Check license file has good copyright string.
--- Rationale ---

An OFL.txt file's first line should be the font copyright e.g:
"Copyright 2019 The Montserrat Project Authors
(https://github.com/julietaula/montserrat)"


  • 🔥 FAIL First line in license file does not match expected format: "copyright 2012 google inc. all rights reserved."
🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

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

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

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


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

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


  • 🔥 FAIL License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software." Must be changed to "This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL" [code: wrong]
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
--- Rationale ---

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

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


  • 🔥 FAIL Font is missing the 'gasp' table. Try exporting the font with autohinting enabled.
    If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting'
    GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: METADATA.pb should contain at least "menu" and "latin" subsets.
🔥 FAIL: METADATA.pb subsets should be alphabetically ordered.
🔥 FAIL: Copyright notices match canonical pattern in METADATA.pb
--- Rationale ---

The expected pattern for the copyright string adheres to the following rules:
* It must say "Copyright" followed by a 4 digit year (optionally followed by a
hyphen and another 4 digit year)
* Then it must say "The <familyname> Project Authors"
* And within parentheses, a URL for a git repository must be provided
* The check is case insensitive and does not validate whether the familyname is
correct, even though we'd expect it is (and we may soon update the check to
validate that aspect as well!)

Here is an example of a valid copyright string:
"Copyright 2017 The Archivo Black Project Authors
(https://github.com/Omnibus-Type/ArchivoBlack)"


  • 🔥 FAIL METADATA.pb: Copyright notices should match a pattern similar to:
    "Copyright 2020 The Familyname Project Authors (git url)"
    But instead we have got:
    "copyright 2016 google inc. all rights reserved." [code: bad-notice-format]
🔥 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 2016 Google Inc. All Rights Reserved." [code: bad-notice-format]

🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
--- Rationale ---

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

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

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

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


  • 🔥 FAIL The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the gftools fix-nonhinting script. [code: lacks-smart-dropout]
🔥 FAIL: METADATA.pb: Designer is listed with the correct name on the Google Fonts catalog of designers?
🔥 FAIL: Checking correctness of monospaced metadata.
--- Rationale ---

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

Requirements for monospace fonts:

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

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

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

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

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

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


  • 🔥 FAIL On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch]
  • 🔥 FAIL On monospaced fonts, the value of OS/2.panose.bProportion must be set to 9 (proportion: monospaced), but got 0 instead. [code: mono-bad-panose-proportion]
  • WARN Font is monospaced but 258 glyphs (94.51%) have a different width. You should check the widths of: ['uni13A0', 'uni13A0.alt', 'uni13A1', 'uni13A1.alt', 'uni13A2', 'uni13A2.alt', 'uni13A3', 'uni13A3.alt', 'uni13A4', 'uni13A4.alt', 'uni13A5', 'uni13A5.alt', 'uni13A6', 'uni13A6.alt', 'uni13A7', 'uni13A7.alt', 'uni13A8', 'uni13A8.alt', 'uni13A9', 'uni13A9.alt', 'uni13AA', 'uni13AA.alt', 'uni13AB', 'uni13AB.alt', 'uni13AC', 'uni13AC.alt', 'uni13AD', 'uni13AD.alt', 'uni13AE', 'uni13AE.alt', 'uni13AF', 'uni13AF.alt', 'uni13B0', 'uni13B0.alt', 'uni13B1', 'uni13B1.alt', 'uni13B2', 'uni13B2.alt', 'uni13B3', 'uni13B3.alt', 'uni13B4', 'uni13B4.alt', 'uni13B5', 'uni13B5.alt', 'uni13B6', 'uni13B6.alt', 'uni13B7', 'uni13B7.alt', 'uni13B8', 'uni13B8.alt', 'uni13B9', 'uni13B9.alt', 'uni13BA', 'uni13BA.alt', 'uni13BB', 'uni13BB.alt', 'uni13BC', 'uni13BC.alt', 'uni13BD', 'uni13BD.alt', 'uni13BE', 'uni13BE.alt', 'uni13BF', 'uni13BF.alt', 'uni13C0', 'uni13C0.alt', 'uni13C1', 'uni13C1.alt', 'uni13C2', 'uni13C2.alt', 'uni13C3', 'uni13C3.alt', 'uni13C4', 'uni13C4.alt', 'uni13C5', 'uni13C5.alt', 'uni13C6', 'uni13C6.alt', 'uni13C7', 'uni13C7.alt', 'uni13C8', 'uni13C8.alt', 'uni13C9', 'uni13C9.alt', 'uni13CA', 'uni13CA.alt', 'uni13CB', 'uni13CB.alt', 'uni13CC', 'uni13CC.alt', 'uni13CD', 'uni13CD.alt', 'uni13CE', 'uni13CE.alt', 'uni13CF', 'uni13CF.alt', 'uni13D0', 'uni13D0.alt', 'uni13D1', 'uni13D1.alt', 'uni13D2', 'uni13D2.alt', 'uni13D3', 'uni13D3.alt', 'uni13D4', 'uni13D4.alt', 'uni13D5', 'uni13D5.alt', 'uni13D6', 'uni13D6.alt', 'uni13D7', 'uni13D7.alt', 'uni13D8', 'uni13D8.alt', 'uni13D9', 'uni13D9.alt', 'uni13DA', 'uni13DA.alt', 'uni13DB', 'uni13DB.alt', 'uni13DC', 'uni13DC.alt', 'uni13DD', 'uni13DD.alt', 'uni13DE', 'uni13DE.alt', 'uni13DF', 'uni13DF.alt', 'uni13E0', 'uni13E0.alt', 'uni13E1', 'uni13E1.alt', 'uni13E2', 'uni13E2.alt', 'uni13E3', 'uni13E3.alt', 'uni13E4', 'uni13E4.alt', 'uni13E5', 'uni13E5.alt', 'uni13E6', 'uni13E6.alt', 'uni13E7', 'uni13E7.alt', 'uni13E8', 'uni13E8.alt', 'uni13E9', 'uni13E9.alt', 'uni13EA', 'uni13EA.alt', 'uni13EB', 'uni13EB.alt', 'uni13EC', 'uni13EC.alt', 'uni13ED', 'uni13ED.alt', 'uni13EE', 'uni13EE.alt', 'uni13EF', 'uni13EF.alt', 'uni13F0', 'uni13F0.alt', 'uni13F1', 'uni13F1.alt', 'uni13F2', 'uni13F2.alt', 'uni13F3', 'uni13F3.alt', 'uni13F4', 'uni13F4.alt', 'uni13F5', 'uni13F5.alt', 'uni13F8', 'uni13F9', 'uni13FA', 'uni13FB', 'uni13FC', 'uni13FD', 'uniAB70', 'uniAB71', 'uniAB72', 'uniAB73', 'uniAB74', 'uniAB75', 'uniAB76', 'uniAB77', 'uniAB78', 'uniAB79', 'uniAB7A', 'uniAB7B', 'uniAB7C', 'uniAB7D', 'uniAB7E', 'uniAB7F', 'uniAB80', 'uniAB81', 'uniAB82', 'uniAB83', 'uniAB84', 'uniAB85', 'uniAB86', 'uniAB87', 'uniAB88', 'uniAB89', 'uniAB8A', 'uniAB8B', 'uniAB8C', 'uniAB8D', 'uniAB8E', 'uniAB8F', 'uniAB90', 'uniAB91', 'uniAB92', 'uniAB93', 'uniAB94', 'uniAB95', 'uniAB96', 'uniAB97', 'uniAB98', 'uniAB99', 'uniAB9A', 'uniAB9B', 'uniAB9C', 'uniAB9D', 'uniAB9E', 'uniAB9F', 'uniABA0', 'uniABA1', 'uniABA2', 'uniABA3', 'uniABA4', 'uniABA5', 'uniABA6', 'uniABA7', 'uniABA8', 'uniABA9', 'uniABAA', 'uniABAB', 'uniABAC', 'uniABAD', 'uniABAE', 'uniABAF', 'uniABB0', 'uniABB1', 'uniABB2', 'uniABB3', 'uniABB4', 'uniABB5', 'uniABB6', 'uniABB7', 'uniABB8', 'uniABB9', 'uniABBA', 'uniABBB', 'uniABBC', 'uniABBD', 'uniABBE', 'uniABBF'] [code: mono-outliers]
🔥 FAIL: Does the font have a DSIG table?
--- Rationale ---

Microsoft Office 2013 and below products expect fonts to have a digital
signature declared in a DSIG table in order to implement OpenType features. The
EOL date for Microsoft Office 2013 products is 4/11/2023. This issue does not
impact Microsoft Office 2016 and above products.

This checks verifies that this signature is available in the font.

A fake signature is enough to address this issue. If needed, a dummy table can
be added to the font with the `gftools fix-dsig` script available at
https://github.com/googlefonts/gftools

Reference: https://github.com/googlefonts/fontbakery/issues/1845


  • 🔥 FAIL This font lacks a digital signature (DSIG table). Some applications may require one (even if only a dummy placeholder) in order to work properly. You can add a DSIG table by running the gftools fix-dsig script. [code: lacks-signature]
WARN: DESCRIPTION.en_us.html should end in a linebreak.
--- Rationale ---

Some older text-handling tools sometimes misbehave if the last line of data in
a text file is not terminated with a newline character (also known as '\n').

We know that this is a very small detail, but for the sake of keeping all
DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts
collection, we chose to adopt the practice of placing this final linebreak char
on them.


  • WARN The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]
WARN: METADATA.pb: Fontfamily is listed on Google Fonts API?
WARN: A static fonts directory with at least two fonts must accompany variable fonts
--- Rationale ---

Variable font family directories kept in the google/fonts git repo may include
a static/ subdir containing static fonts.
These files are meant to be served for users that still lack support for
variable fonts in their web browsers.


  • WARN Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]
WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test heuristically looks for on-curve points which are close to, but do
not sit on, significant boundary coordinates. For example, a point which has a
Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the
baseline, the test also checks for points near the x-height (but only for lower
case Latin letters), cap-height, ascender and descender Y coordinates.

Not all such misaligned curve points are a mistake, and sometimes the design
may call for points in locations near the boundaries. As this test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni13A1: X=660.0,Y=-1.5 (should be at baseline 0?)
    • uni13A1.alt: X=609.5,Y=-1.5 (should be at baseline 0?)
    • uni13A7: X=289.0,Y=715.0 (should be at cap-height 714?)
    • uni13AE: X=297.0,Y=715.0 (should be at cap-height 714?)
    • uni13B2: X=543.0,Y=-1.5 (should be at baseline 0?)
    • uni13BA: X=856.0,Y=713.0 (should be at cap-height 714?)
    • uni13BA: X=940.0,Y=713.0 (should be at cap-height 714?)
    • uni13C0: X=502.0,Y=714.5 (should be at cap-height 714?)
    • uni13C9: X=1121.0,Y=713.0 (should be at cap-height 714?)
    • uni13CB: X=462.5,Y=713.0 (should be at cap-height 714?) and 11 more. [code: found-misalignments]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
1 13 5 45 8 123 0
1% 7% 3% 23% 4% 63% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@gf-bot
Copy link

gf-bot commented Apr 9, 2021

Fontbakery report

Fontbakery version: 0.7.34

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

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

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

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


  • WARN Could not find ftxvalidator.

[21] NotoSansMasaramGondi-Regular.ttf
🔥 FAIL: Does DESCRIPTION file contain broken links?
--- Rationale ---

The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font
family webpage on the Google Fonts website. For that reason, all hyperlinks in
it must be properly working.


  • 🔥 FAIL The following links are broken in the DESCRIPTION file:
    //www.google.com/fonts/earlyaccess [code: broken-links]
🔥 FAIL: Check `Google Fonts Latin Core` glyph coverage.
--- Rationale ---

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


  • 🔥 FAIL Missing required codepoints: 0x0023 (NUMBER SIGN), 0x0024 (DOLLAR SIGN), 0x0026 (AMPERSAND), 0x0030 (DIGIT ZERO) and 182 more. [code: missing-codepoints]
🔥 FAIL: Check license file has good copyright string.
--- Rationale ---

An OFL.txt file's first line should be the font copyright e.g:
"Copyright 2019 The Montserrat Project Authors
(https://github.com/julietaula/montserrat)"


  • 🔥 FAIL First line in license file does not match expected format: "copyright 2012 google inc. all rights reserved."
🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

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

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

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


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

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


  • 🔥 FAIL License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software." Must be changed to "This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL" [code: wrong]
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
--- Rationale ---

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

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


  • 🔥 FAIL Font is missing the 'gasp' table. Try exporting the font with autohinting enabled.
    If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting'
    GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: METADATA.pb should contain at least "menu" and "latin" subsets.
🔥 FAIL: METADATA.pb subsets should be alphabetically ordered.
🔥 FAIL: Copyright notices match canonical pattern in METADATA.pb
--- Rationale ---

The expected pattern for the copyright string adheres to the following rules:
* It must say "Copyright" followed by a 4 digit year (optionally followed by a
hyphen and another 4 digit year)
* Then it must say "The <familyname> Project Authors"
* And within parentheses, a URL for a git repository must be provided
* The check is case insensitive and does not validate whether the familyname is
correct, even though we'd expect it is (and we may soon update the check to
validate that aspect as well!)

Here is an example of a valid copyright string:
"Copyright 2017 The Archivo Black Project Authors
(https://github.com/Omnibus-Type/ArchivoBlack)"


  • 🔥 FAIL METADATA.pb: Copyright notices should match a pattern similar to:
    "Copyright 2020 The Familyname Project Authors (git url)"
    But instead we have got:
    "copyright 2019 google llc. all rights reserved." [code: bad-notice-format]
🔥 FAIL: Copyright notices match canonical pattern in fonts
  • com.google.fonts/check/font_copyright

  • 🔥 FAIL Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)"
    But instead we have got:
    "Copyright 2019 Google LLC. All Rights Reserved." [code: bad-notice-format]

🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
--- Rationale ---

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

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

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

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


  • 🔥 FAIL The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the gftools fix-nonhinting script. [code: lacks-smart-dropout]
🔥 FAIL: METADATA.pb: Designer is listed with the correct name on the Google Fonts catalog of designers?
🔥 FAIL: Checking OS/2 usWinAscent & usWinDescent.
--- Rationale ---

A font's winAscent and winDescent values should be greater than the head
table's yMax, abs(yMin) values. If they are less than these values, clipping
can occur on Windows platforms
(https://github.com/RedHatBrand/Overpass/issues/33).

If the font includes tall/deep writing systems such as Arabic or Devanagari,
the winAscent and winDescent can be greater than the yMax and abs(yMin) to
accommodate vowel marks.

When the win Metrics are significantly greater than the upm, the linespacing
can appear too loose. To counteract this, enabling the OS/2 fsSelection bit 7
(Use_Typo_Metrics), will force Windows to use the OS/2 typo values instead.
This means the font developer can control the linespacing with the typo values,
whilst avoiding clipping by setting the win values to values greater than the
yMax and abs(yMin).


  • 🔥 FAIL OS/2.usWinDescent value should be equal or greater than 213, but got 200 instead. [code: descent]
🔥 FAIL: Checking OS/2 Metrics match hhea Metrics.
--- Rationale ---

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

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

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


  • 🔥 FAIL OS/2 sTypoAscender (827) and hhea ascent (1000) must be equal. [code: ascender]
WARN: DESCRIPTION.en_us.html should end in a linebreak.
--- Rationale ---

Some older text-handling tools sometimes misbehave if the last line of data in
a text file is not terminated with a newline character (also known as '\n').

We know that this is a very small detail, but for the sake of keeping all
DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts
collection, we chose to adopt the practice of placing this final linebreak char
on them.


  • WARN The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]
WARN: METADATA.pb: Fontfamily is listed on Google Fonts API?
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 = 'Noto Sans Masaram Gondi' / SUBFAMILY_NAME = 'Regular'

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

WARN: Checking Vertical Metric Linegaps.
WARN: Check mark characters are in GDEF mark glyph class
--- Rationale ---

Mark characters should be in the GDEF mark glyph class.


  • WARN The following mark characters could be in the GDEF mark glyph class:
    U+11D31, U+11D32, U+11D33, U+11D34, U+11D35, U+11D36, U+11D3A, U+11D3C, U+11D3D, U+11D3F, U+11D40, U+11D41, U+11D43, U+11D44, U+11D45 and U+11D47 [code: mark-chars]
WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test heuristically looks for on-curve points which are close to, but do
not sit on, significant boundary coordinates. For example, a point which has a
Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the
baseline, the test also checks for points near the x-height (but only for lower
case Latin letters), cap-height, ascender and descender Y coordinates.

Not all such misaligned curve points are a mistake, and sometimes the design
may call for points in locations near the boundaries. As this test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • Gha.MGondi: X=434.0,Y=2.0 (should be at baseline 0?)
    • Jha.MGondi: X=85.0,Y=-1.0 (should be at baseline 0?)
    • Jha.MGondi: X=669.0,Y=-1.0 (should be at baseline 0?)
    • Jha.MGondi: X=574.0,Y=-1.0 (should be at baseline 0?)
    • Jha.MGondi: X=182.0,Y=-1.0 (should be at baseline 0?)
    • Dha.MGondi: X=323.5,Y=1.5 (should be at baseline 0?)
    • GhaHalf.MGondi: X=434.0,Y=2.0 (should be at baseline 0?)
    • JhaHalf.MGondi: X=85.0,Y=-1.0 (should be at baseline 0?)
    • JhaHalf.MGondi: X=669.0,Y=-1.0 (should be at baseline 0?)
    • JhaHalf.MGondi: X=574.0,Y=-1.0 (should be at baseline 0?) and 17 more. [code: found-misalignments]
WARN: Are any segments inordinately short?
--- Rationale ---

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

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


  • WARN The following glyphs have segments which seem very short:
    • Va.MGondi contains a short segment B<<523.0,136.0>-<516.0,136.0>-<508.0,136.5>> and Va.MGondi contains a short segment B<<508.0,136.5>-<500.0,137.0>-<492.0,138.0>> [code: found-short-segments]
WARN: Do outlines contain any semi-vertical or semi-horizontal lines?
--- Rationale ---

This test detects line segments which are nearly, but not quite, exactly
horizontal or vertical. Sometimes such lines are created by design, but often
they are indicative of a design error.

This test is disabled for italic styles, which often contain nearly-upright
lines.


  • WARN The following glyphs have semi-vertical/semi-horizontal lines:
    • Five.alt.MGondi: L<<186.0,348.0>--<185.0,178.0>>
    • Five.alt.MGondi: L<<187.0,554.0>--<186.0,424.0>>
    • Ha.MGondi: L<<182.0,630.0>--<180.0,178.0>>
    • HaHalf.MGondi: L<<182.0,630.0>--<180.0,178.0>>
    • Jha.MGondi: L<<180.0,451.0>--<182.0,-1.0>>
    • JhaHalf.MGondi: L<<180.0,451.0>--<182.0,-1.0>>
    • Na.MGondi: L<<182.0,630.0>--<180.0,178.0>>
    • NaHalf.MGondi: L<<182.0,630.0>--<180.0,178.0>> and Six.MGondi: L<<187.0,630.0>--<185.0,178.0>> [code: found-semi-vertical]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 13 9 45 8 120 0
0% 7% 5% 23% 4% 62% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@gf-bot
Copy link

gf-bot commented Apr 9, 2021

Fontbakery report

Fontbakery version: 0.7.34

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

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

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

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


  • WARN Could not find ftxvalidator.

[17] NotoSansYi-Regular.ttf
🔥 FAIL: Does DESCRIPTION file contain broken links?
--- Rationale ---

The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font
family webpage on the Google Fonts website. For that reason, all hyperlinks in
it must be properly working.


  • 🔥 FAIL The following links are broken in the DESCRIPTION file:
    //www.google.com/fonts/earlyaccess [code: broken-links]
🔥 FAIL: Check `Google Fonts Latin Core` glyph coverage.
--- Rationale ---

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


  • 🔥 FAIL Missing required codepoints: 0x0021 (EXCLAMATION MARK), 0x0022 (QUOTATION MARK), 0x0023 (NUMBER SIGN), 0x0024 (DOLLAR SIGN) and 208 more. [code: missing-codepoints]
🔥 FAIL: Check license file has good copyright string.
--- Rationale ---

An OFL.txt file's first line should be the font copyright e.g:
"Copyright 2019 The Montserrat Project Authors
(https://github.com/julietaula/montserrat)"


  • 🔥 FAIL First line in license file does not match expected format: "copyright 2012 google inc. all rights reserved."
🔥 FAIL: Check copyright namerecords match license file.
--- Rationale ---

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

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

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


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

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


  • 🔥 FAIL License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software." Must be changed to "This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL" [code: wrong]
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
--- Rationale ---

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

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


  • 🔥 FAIL Font is missing the 'gasp' table. Try exporting the font with autohinting enabled.
    If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting'
    GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: METADATA.pb should contain at least "menu" and "latin" subsets.
🔥 FAIL: Copyright notices match canonical pattern in METADATA.pb
--- Rationale ---

The expected pattern for the copyright string adheres to the following rules:
* It must say "Copyright" followed by a 4 digit year (optionally followed by a
hyphen and another 4 digit year)
* Then it must say "The <familyname> Project Authors"
* And within parentheses, a URL for a git repository must be provided
* The check is case insensitive and does not validate whether the familyname is
correct, even though we'd expect it is (and we may soon update the check to
validate that aspect as well!)

Here is an example of a valid copyright string:
"Copyright 2017 The Archivo Black Project Authors
(https://github.com/Omnibus-Type/ArchivoBlack)"


  • 🔥 FAIL METADATA.pb: Copyright notices should match a pattern similar to:
    "Copyright 2020 The Familyname Project Authors (git url)"
    But instead we have got:
    "copyright 2017 google inc. all rights reserved." [code: bad-notice-format]
🔥 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 2017 Google Inc. All Rights Reserved." [code: bad-notice-format]

🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
--- Rationale ---

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

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

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

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


  • 🔥 FAIL The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the gftools fix-nonhinting script. [code: lacks-smart-dropout]
🔥 FAIL: Check font follows the Google Fonts CJK vertical metric schema
--- Rationale ---

CJK fonts have different vertical metrics when compared to Latin fonts. We
follow the schema developed by dr Ken Lunde for Source Han Sans and the Noto
CJK fonts.

Our documentation includes further information:
https://github.com/googlefonts/gf-docs/tree/master/Spec#cjk-vertical-metrics


  • 🔥 FAIL OS/2.sTypoAscender is "1069" it should be 880.0 [code: bad-OS/2.sTypoAscender]
  • 🔥 FAIL OS/2.sTypoDescender is "-293" it should be -120.0 [code: bad-OS/2.sTypoDescender]
🔥 FAIL: METADATA.pb: Designer is listed with the correct name on the Google Fonts catalog of designers?
🔥 FAIL: Checking correctness of monospaced metadata.
--- Rationale ---

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

Requirements for monospace fonts:

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

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

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

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

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

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


  • 🔥 FAIL On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch]
  • 🔥 FAIL On monospaced fonts, the value of OS/2.panose.bProportion must be set to 9 (proportion: monospaced), but got 2 instead. [code: mono-bad-panose-proportion]
  • WARN Font is monospaced but 1208 glyphs (96.56%) have a different width. You should check the widths of: ['CR', 'space', 'uni00A0', 'uni3001', 'uni3002', 'uni3008', 'uni3009', 'uni300A', 'uni300B', 'uni300C', 'uni300D', 'uni300E', 'uni300F', 'uni3010', 'uni3011', 'uni3014', 'uni3015', 'uni3016', 'uni3017', 'uni3018', 'uni3019', 'uni301A', 'uni301B', 'uni30FB', 'uniA000', 'uniA001', 'uniA002', 'uniA003', 'uniA004', 'uniA005', 'uniA006', 'uniA007', 'uniA008', 'uniA009', 'uniA00A', 'uniA00B', 'uniA00C', 'uniA00D', 'uniA00E', 'uniA00F', 'uniA010', 'uniA011', 'uniA012', 'uniA013', 'uniA014', 'uniA015', 'uniA016', 'uniA017', 'uniA018', 'uniA019', 'uniA01A', 'uniA01B', 'uniA01C', 'uniA01D', 'uniA01E', 'uniA01F', 'uniA020', 'uniA021', 'uniA022', 'uniA023', 'uniA024', 'uniA025', 'uniA026', 'uniA027', 'uniA028', 'uniA029', 'uniA02A', 'uniA02B', 'uniA02C', 'uniA02D', 'uniA02E', 'uniA02F', 'uniA030', 'uniA031', 'uniA032', 'uniA033', 'uniA034', 'uniA035', 'uniA036', 'uniA037', 'uniA038', 'uniA039', 'uniA03A', 'uniA03B', 'uniA03C', 'uniA03D', 'uniA03E', 'uniA03F', 'uniA040', 'uniA041', 'uniA042', 'uniA043', 'uniA044', 'uniA045', 'uniA046', 'uniA047', 'uniA048', 'uniA049', 'uniA04A', 'uniA04B', 'uniA04C', 'uniA04D', 'uniA04E', 'uniA04F', 'uniA050', 'uniA051', 'uniA052', 'uniA053', 'uniA054', 'uniA055', 'uniA056', 'uniA057', 'uniA058', 'uniA05A', 'uniA05B', 'uniA05C', 'uniA05D', 'uniA05E', 'uniA05F', 'uniA060', 'uniA061', 'uniA062', 'uniA063', 'uniA064', 'uniA065', 'uniA066', 'uniA067', 'uniA068', 'uniA069', 'uniA06A', 'uniA06B', 'uniA06C', 'uniA06D', 'uniA06E', 'uniA06F', 'uniA070', 'uniA071', 'uniA072', 'uniA073', 'uniA074', 'uniA075', 'uniA076', 'uniA077', 'uniA078', 'uniA079', 'uniA07A', 'uniA07B', 'uniA07C', 'uniA07D', 'uniA07E', 'uniA07F', 'uniA080', 'uniA081', 'uniA082', 'uniA083', 'uniA084', 'uniA085', 'uniA086', 'uniA087', 'uniA088', 'uniA089', 'uniA08A', 'uniA08B', 'uniA08C', 'uniA08D', 'uniA08E', 'uniA08F', 'uniA090', 'uniA091', 'uniA092', 'uniA093', 'uniA095', 'uniA096', 'uniA097', 'uniA098', 'uniA099', 'uniA09A', 'uniA09B', 'uniA09C', 'uniA09D', 'uniA09E', 'uniA09F', 'uniA0A0', 'uniA0A1', 'uniA0A2', 'uniA0A3', 'uniA0A4', 'uniA0A5', 'uniA0A7', 'uniA0A8', 'uniA0A9', 'uniA0AA', 'uniA0AB', 'uniA0AC', 'uniA0AD', 'uniA0AF', 'uniA0B0', 'uniA0B1', 'uniA0B4', 'uniA0B5', 'uniA0B6', 'uniA0B7', 'uniA0B8', 'uniA0B9', 'uniA0BA', 'uniA0BB', 'uniA0BC', 'uniA0BD', 'uniA0BE', 'uniA0BF', 'uniA0C0', 'uniA0C1', 'uniA0C2', 'uniA0C3', 'uniA0C4', 'uniA0C5', 'uniA0C6', 'uniA0C7', 'uniA0C8', 'uniA0C9', 'uniA0CA', 'uniA0CB', 'uniA0CC', 'uniA0CD', 'uniA0CE', 'uniA0CF', 'uniA0D0', 'uniA0D1', 'uniA0D2', 'uniA0D3', 'uniA0D4', 'uniA0D5', 'uniA0D6', 'uniA0D7', 'uniA0D8', 'uniA0D9', 'uniA0DA', 'uniA0DB', 'uniA0DC', 'uniA0DD', 'uniA0DE', 'uniA0DF', 'uniA0E0', 'uniA0E1', 'uniA0E2', 'uniA0E3', 'uniA0E4', 'uniA0E5', 'uniA0E6', 'uniA0E7', 'uniA0E8', 'uniA0E9', 'uniA0ED', 'uniA0EE', 'uniA0EF', 'uniA0F0', 'uniA0F1', 'uniA0F2', 'uniA0F3', 'uniA0F4', 'uniA0F5', 'uniA0F6', 'uniA0F7', 'uniA0F8', 'uniA0F9', 'uniA0FA', 'uniA0FB', 'uniA0FC', 'uniA0FD', 'uniA0FE', 'uniA0FF', 'uniA100', 'uniA101', 'uniA102', 'uniA103', 'uniA104', 'uniA105', 'uniA106', 'uniA107', 'uniA108', 'uniA109', 'uniA10A', 'uniA10B', 'uniA10C', 'uniA10D', 'uniA10E', 'uniA10F', 'uniA110', 'uniA111', 'uniA112', 'uniA113', 'uniA114', 'uniA115', 'uniA116', 'uniA117', 'uniA118', 'uniA119', 'uniA11A', 'uniA11B', 'uniA11C', 'uniA11D', 'uniA11E', 'uniA11F', 'uniA120', 'uniA121', 'uniA122', 'uniA123', 'uniA124', 'uniA125', 'uniA126', 'uniA127', 'uniA128', 'uniA129', 'uniA12A', 'uniA12B', 'uniA12C', 'uniA12D', 'uniA12E', 'uniA12F', 'uniA130', 'uniA133', 'uniA134', 'uniA135', 'uniA136', 'uniA137', 'uniA138', 'uniA139', 'uniA13A', 'uniA13B', 'uniA13C', 'uniA13D', 'uniA13E', 'uniA13F', 'uniA140', 'uniA141', 'uniA142', 'uniA143', 'uniA144', 'uniA145', 'uniA146', 'uniA147', 'uniA148', 'uniA149', 'uniA14A', 'uniA14B', 'uniA14C', 'uniA14D', 'uniA14E', 'uniA14F', 'uniA150', 'uniA151', 'uniA152', 'uniA153', 'uniA154', 'uniA155', 'uniA156', 'uniA157', 'uniA158', 'uniA159', 'uniA15A', 'uniA15B', 'uniA15C', 'uniA15D', 'uniA15E', 'uniA15F', 'uniA160', 'uniA161', 'uniA162', 'uniA163', 'uniA164', 'uniA165', 'uniA166', 'uniA167', 'uniA168', 'uniA169', 'uniA16A', 'uniA16B', 'uniA16C', 'uniA16D', 'uniA16E', 'uniA16F', 'uniA170', 'uniA171', 'uniA172', 'uniA173', 'uniA174', 'uniA175', 'uniA176', 'uniA177', 'uniA178', 'uniA179', 'uniA17A', 'uniA17B', 'uniA17C', 'uniA17E', 'uniA17F', 'uniA180', 'uniA181', 'uniA182', 'uniA183', 'uniA184', 'uniA185', 'uniA186', 'uniA187', 'uniA188', 'uniA189', 'uniA18A', 'uniA18B', 'uniA18C', 'uniA18D', 'uniA18E', 'uniA18F', 'uniA190', 'uniA191', 'uniA192', 'uniA193', 'uniA194', 'uniA195', 'uniA196', 'uniA197', 'uniA198', 'uniA199', 'uniA19A', 'uniA19B', 'uniA19C', 'uniA19D', 'uniA19E', 'uniA19F', 'uniA1A0', 'uniA1A1', 'uniA1A2', 'uniA1A3', 'uniA1A4', 'uniA1A5', 'uniA1A6', 'uniA1A7', 'uniA1A8', 'uniA1A9', 'uniA1AA', 'uniA1AB', 'uniA1AC', 'uniA1AD', 'uniA1AE', 'uniA1AF', 'uniA1B0', 'uniA1B1', 'uniA1B2', 'uniA1B3', 'uniA1B4', 'uniA1B5', 'uniA1B6', 'uniA1B7', 'uniA1B8', 'uniA1B9', 'uniA1BB', 'uniA1BC', 'uniA1BD', 'uniA1BE', 'uniA1BF', 'uniA1C0', 'uniA1C1', 'uniA1C2', 'uniA1C3', 'uniA1C4', 'uniA1C5', 'uniA1C6', 'uniA1C7', 'uniA1C8', 'uniA1C9', 'uniA1CA', 'uniA1CB', 'uniA1CC', 'uniA1CD', 'uniA1CF', 'uniA1D0', 'uniA1D1', 'uniA1D2', 'uniA1D3', 'uniA1D4', 'uniA1D5', 'uniA1D6', 'uniA1D7', 'uniA1D8', 'uniA1D9', 'uniA1DA', 'uniA1DB', 'uniA1DC', 'uniA1DD', 'uniA1DE', 'uniA1DF', 'uniA1E0', 'uniA1E1', 'uniA1E2', 'uniA1E3', 'uniA1E4', 'uniA1E6', 'uniA1E7', 'uniA1E8', 'uniA1EA', 'uniA1EB', 'uniA1EC', 'uniA1ED', 'uniA1EE', 'uniA1EF', 'uniA1F0', 'uniA1F1', 'uniA1F2', 'uniA1F3', 'uniA1F4', 'uniA1F6', 'uniA1F7', 'uniA1F8', 'uniA1F9', 'uniA1FA', 'uniA1FB', 'uniA1FC', 'uniA1FD', 'uniA1FE', 'uniA1FF', 'uniA200', 'uniA201', 'uniA202', 'uniA203', 'uniA204', 'uniA205', 'uniA206', 'uniA207', 'uniA208', 'uniA209', 'uniA20A', 'uniA20B', 'uniA20C', 'uniA20D', 'uniA20E', 'uniA20F', 'uniA210', 'uniA211', 'uniA212', 'uniA213', 'uniA215', 'uniA216', 'uniA217', 'uniA218', 'uniA219', 'uniA21A', 'uniA21B', 'uniA21C', 'uniA21D', 'uniA21E', 'uniA21F', 'uniA220', 'uniA221', 'uniA222', 'uniA223', 'uniA224', 'uniA225', 'uniA226', 'uniA227', 'uniA228', 'uniA229', 'uniA22A', 'uniA22B', 'uniA22C', 'uniA22D', 'uniA22E', 'uniA22F', 'uniA230', 'uniA231', 'uniA232', 'uniA233', 'uniA234', 'uniA235', 'uniA236', 'uniA237', 'uniA238', 'uniA239', 'uniA23A', 'uniA23B', 'uniA23C', 'uniA23D', 'uniA23E', 'uniA23F', 'uniA240', 'uniA241', 'uniA242', 'uniA243', 'uniA244', 'uniA245', 'uniA246', 'uniA247', 'uniA248', 'uniA249', 'uniA24A', 'uniA24B', 'uniA24C', 'uniA24D', 'uniA24E', 'uniA24F', 'uniA250', 'uniA251', 'uniA252', 'uniA253', 'uniA254', 'uniA255', 'uniA256', 'uniA257', 'uniA258', 'uniA259', 'uniA25A', 'uniA25B', 'uniA25C', 'uniA25D', 'uniA25E', 'uniA25F', 'uniA260', 'uniA261', 'uniA262', 'uniA263', 'uniA265', 'uniA266', 'uniA267', 'uniA268', 'uniA269', 'uniA26A', 'uniA26B', 'uniA26C', 'uniA26D', 'uniA26E', 'uniA26F', 'uniA270', 'uniA271', 'uniA272', 'uniA273', 'uniA274', 'uniA275', 'uniA276', 'uniA277', 'uniA278', 'uniA279', 'uniA27C', 'uniA27D', 'uniA27E', 'uniA27F', 'uniA280', 'uniA281', 'uniA282', 'uniA283', 'uniA284', 'uniA285', 'uniA286', 'uniA287', 'uniA288', 'uniA289', 'uniA28A', 'uniA28B', 'uniA28C', 'uniA28D', 'uniA28E', 'uniA28F', 'uniA290', 'uniA291', 'uniA292', 'uniA293', 'uniA294', 'uniA295', 'uniA296', 'uniA297', 'uniA298', 'uniA299', 'uniA29A', 'uniA29B', 'uniA29C', 'uniA29D', 'uniA29E', 'uniA29F', 'uniA2A0', 'uniA2A1', 'uniA2A2', 'uniA2A3', 'uniA2A4', 'uniA2A5', 'uniA2A6', 'uniA2A7', 'uniA2A8', 'uniA2A9', 'uniA2AA', 'uniA2AB', 'uniA2AC', 'uniA2AD', 'uniA2AE', 'uniA2AF', 'uniA2B0', 'uniA2B1', 'uniA2B2', 'uniA2B3', 'uniA2B4', 'uniA2B5', 'uniA2B9', 'uniA2BA', 'uniA2BB', 'uniA2BC', 'uniA2BD', 'uniA2BE', 'uniA2BF', 'uniA2C0', 'uniA2C3', 'uniA2C4', 'uniA2C5', 'uniA2C6', 'uniA2C7', 'uniA2C8', 'uniA2C9', 'uniA2CA', 'uniA2CB', 'uniA2CC', 'uniA2CD', 'uniA2CE', 'uniA2CF', 'uniA2D0', 'uniA2D1', 'uniA2D2', 'uniA2D3', 'uniA2D4', 'uniA2D5', 'uniA2D6', 'uniA2D7', 'uniA2D8', 'uniA2D9', 'uniA2DA', 'uniA2DB', 'uniA2DC', 'uniA2DD', 'uniA2DE', 'uniA2DF', 'uniA2E0', 'uniA2E1', 'uniA2E2', 'uniA2E3', 'uniA2E4', 'uniA2E5', 'uniA2E6', 'uniA2E7', 'uniA2E8', 'uniA2E9', 'uniA2EA', 'uniA2EB', 'uniA2EC', 'uniA2ED', 'uniA2EE', 'uniA2EF', 'uniA2F0', 'uniA2F1', 'uniA2F2', 'uniA2F3', 'uniA2F4', 'uniA2F5', 'uniA2F6', 'uniA2F7', 'uniA2F8', 'uniA2F9', 'uniA2FA', 'uniA2FB', 'uniA2FC', 'uniA2FD', 'uniA2FE', 'uniA2FF', 'uniA300', 'uniA301', 'uniA302', 'uniA303', 'uniA304', 'uniA305', 'uniA307', 'uniA308', 'uniA309', 'uniA30A', 'uniA30B', 'uniA30C', 'uniA30D', 'uniA30E', 'uniA30F', 'uniA310', 'uniA311', 'uniA312', 'uniA313', 'uniA314', 'uniA315', 'uniA316', 'uniA317', 'uniA318', 'uniA319', 'uniA31A', 'uniA31B', 'uniA31C', 'uniA31D', 'uniA31E', 'uniA31F', 'uniA320', 'uniA321', 'uniA322', 'uniA323', 'uniA324', 'uniA325', 'uniA326', 'uniA327', 'uniA328', 'uniA329', 'uniA32A', 'uniA32B', 'uniA32C', 'uniA32D', 'uniA32E', 'uniA32F', 'uniA330', 'uniA331', 'uniA332', 'uniA333', 'uniA334', 'uniA335', 'uniA338', 'uniA339', 'uniA33A', 'uniA33C', 'uniA33D', 'uniA33E', 'uniA33F', 'uniA340', 'uniA341', 'uniA342', 'uniA343', 'uniA344', 'uniA345', 'uniA346', 'uniA347', 'uniA348', 'uniA349', 'uniA34A', 'uniA34B', 'uniA34C', 'uniA34D', 'uniA34E', 'uniA34F', 'uniA350', 'uniA351', 'uniA352', 'uniA353', 'uniA354', 'uniA355', 'uniA356', 'uniA357', 'uniA358', 'uniA359', 'uniA35A', 'uniA35B', 'uniA35C', 'uniA35D', 'uniA35E', 'uniA35F', 'uniA360', 'uniA361', 'uniA362', 'uniA363', 'uniA364', 'uniA365', 'uniA366', 'uniA367', 'uniA368', 'uniA369', 'uniA36A', 'uniA36B', 'uniA36C', 'uniA36D', 'uniA36E', 'uniA36F', 'uniA370', 'uniA371', 'uniA372', 'uniA373', 'uniA374', 'uniA375', 'uniA376', 'uniA377', 'uniA378', 'uniA379', 'uniA37A', 'uniA37B', 'uniA37C', 'uniA37D', 'uniA37E', 'uniA37F', 'uniA380', 'uniA381', 'uniA382', 'uniA383', 'uniA384', 'uniA385', 'uniA386', 'uniA387', 'uniA388', 'uniA389', 'uniA38A', 'uniA38B', 'uniA38C', 'uniA38D', 'uniA38E', 'uniA38F', 'uniA390', 'uniA391', 'uniA392', 'uniA393', 'uniA395', 'uniA396', 'uniA397', 'uniA398', 'uniA399', 'uniA39A', 'uniA39B', 'uniA39C', 'uniA39D', 'uniA39E', 'uniA39F', 'uniA3A0', 'uniA3A1', 'uniA3A2', 'uniA3A3', 'uniA3A4', 'uniA3A5', 'uniA3A6', 'uniA3A7', 'uniA3A8', 'uniA3A9', 'uniA3AA', 'uniA3AB', 'uniA3AC', 'uniA3AD', 'uniA3AE', 'uniA3AF', 'uniA3B0', 'uniA3B1', 'uniA3B2', 'uniA3B3', 'uniA3B4', 'uniA3B5', 'uniA3B6', 'uniA3B7', 'uniA3B8', 'uniA3B9', 'uniA3BA', 'uniA3BB', 'uniA3BC', 'uniA3BD', 'uniA3BE', 'uniA3BF', 'uniA3C0', 'uniA3C1', 'uniA3C2', 'uniA3C3', 'uniA3C4', 'uniA3C5', 'uniA3C7', 'uniA3C8', 'uniA3C9', 'uniA3CA', 'uniA3CB', 'uniA3CC', 'uniA3CD', 'uniA3CE', 'uniA3CF', 'uniA3D0', 'uniA3D1', 'uniA3D2', 'uniA3D3', 'uniA3D4', 'uniA3D5', 'uniA3D6', 'uniA3D7', 'uniA3D8', 'uniA3D9', 'uniA3DA', 'uniA3DB', 'uniA3DC', 'uniA3DD', 'uniA3DE', 'uniA3DF', 'uniA3E0', 'uniA3E1', 'uniA3E2', 'uniA3E3', 'uniA3E4', 'uniA3E5', 'uniA3E6', 'uniA3E7', 'uniA3E8', 'uniA3E9', 'uniA3EA', 'uniA3EB', 'uniA3EC', 'uniA3ED', 'uniA3EE', 'uniA3EF', 'uniA3F1', 'uniA3F2', 'uniA3F3', 'uniA3F4', 'uniA3F5', 'uniA3F6', 'uniA3F7', 'uniA3F8', 'uniA3F9', 'uniA3FA', 'uniA3FB', 'uniA3FC', 'uniA3FD', 'uniA3FE', 'uniA400', 'uniA401', 'uniA402', 'uniA403', 'uniA404', 'uniA405', 'uniA406', 'uniA407', 'uniA408', 'uniA409', 'uniA40A', 'uniA40C', 'uniA40F', 'uniA412', 'uniA413', 'uniA414', 'uniA415', 'uniA416', 'uniA417', 'uniA418', 'uniA419', 'uniA41A', 'uniA41B', 'uniA41C', 'uniA41D', 'uniA41E', 'uniA41F', 'uniA420', 'uniA421', 'uniA422', 'uniA423', 'uniA424', 'uniA425', 'uniA426', 'uniA427', 'uniA428', 'uniA429', 'uniA42A', 'uniA42B', 'uniA42C', 'uniA42D', 'uniA42E', 'uniA42F', 'uniA430', 'uniA431', 'uniA432', 'uniA433', 'uniA434', 'uniA435', 'uniA436', 'uniA437', 'uniA438', 'uniA439', 'uniA43A', 'uniA43B', 'uniA43C', 'uniA43D', 'uniA43E', 'uniA43F', 'uniA440', 'uniA441', 'uniA442', 'uniA443', 'uniA444', 'uniA445', 'uniA446', 'uniA447', 'uniA448', 'uniA449', 'uniA44A', 'uniA44B', 'uniA44C', 'uniA44D', 'uniA44E', 'uniA44F', 'uniA450', 'uniA451', 'uniA452', 'uniA453', 'uniA454', 'uniA455', 'uniA456', 'uniA457', 'uniA458', 'uniA45A', 'uniA45B', 'uniA45C', 'uniA45D', 'uniA45E', 'uniA45F', 'uniA460', 'uniA461', 'uniA462', 'uniA463', 'uniA464', 'uniA465', 'uniA466', 'uniA467', 'uniA468', 'uniA469', 'uniA46A', 'uniA46B', 'uniA46C', 'uniA46D', 'uniA46E', 'uniA46F', 'uniA470', 'uniA471', 'uniA472', 'uniA473', 'uniA474', 'uniA475', 'uniA476', 'uniA477', 'uniA478', 'uniA479', 'uniA47A', 'uniA47B', 'uniA47C', 'uniA47D', 'uniA47E', 'uniA47F', 'uniA480', 'uniA481', 'uniA482', 'uniA483', 'uniA484', 'uniA485', 'uniA486', 'uniA487', 'uniA488', 'uniA489', 'uniA48A', 'uniA48B', 'uniA48C', 'uniA490', 'uniA491', 'uniA492', 'uniA493', 'uniA494', 'uniA495', 'uniA496', 'uniA497', 'uniA498', 'uniA499', 'uniA49A', 'uniA49B', 'uniA49C', 'uniA49D', 'uniA49E', 'uniA49F', 'uniA4A0', 'uniA4A1', 'uniA4A2', 'uniA4A3', 'uniA4A4', 'uniA4A5', 'uniA4A6', 'uniA4A7', 'uniA4A9', 'uniA4AA', 'uniA4AB', 'uniA4AC', 'uniA4AD', 'uniA4AE', 'uniA4AF', 'uniA4B0', 'uniA4B1', 'uniA4B2', 'uniA4B3', 'uniA4B4', 'uniA4B5', 'uniA4B6', 'uniA4B7', 'uniA4B8', 'uniA4B9', 'uniA4BA', 'uniA4BB', 'uniA4BC', 'uniA4BD', 'uniA4BE', 'uniA4BF', 'uniA4C0', 'uniA4C1', 'uniA4C2', 'uniA4C3', 'uniA4C4', 'uniA4C5', 'uniA4C6', 'uniFF61', 'uniFF62', 'uniFF63', 'uniFF64', 'uniFF65'] [code: mono-outliers]
WARN: DESCRIPTION.en_us.html should end in a linebreak.
--- Rationale ---

Some older text-handling tools sometimes misbehave if the last line of data in
a text file is not terminated with a newline character (also known as '\n').

We know that this is a very small detail, but for the sake of keeping all
DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts
collection, we chose to adopt the practice of placing this final linebreak char
on them.


  • WARN The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]
WARN: METADATA.pb: Fontfamily is listed on Google Fonts API?
WARN: Font contains '.notdef' as its first glyph?
--- Rationale ---

The OpenType specification v1.8.2 recommends that the first glyph is the
'.notdef' glyph without a codepoint assigned and with a drawing.

https://docs.microsoft.com/en-us/typography/opentype/spec
/recom#glyph-0-the-notdef-glyph

Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR' and
'.null' glyphs. This might have been relevant for MacOS 9 applications.


  • WARN Glyph '.notdef' should contain a drawing, but it is empty. [code: empty]
WARN: Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value
WARN: Are there any misaligned on-curve points?
--- Rationale ---

This test heuristically looks for on-curve points which are close to, but do
not sit on, significant boundary coordinates. For example, a point which has a
Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the
baseline, the test also checks for points near the x-height (but only for lower
case Latin letters), cap-height, ascender and descender Y coordinates.

Not all such misaligned curve points are a mistake, and sometimes the design
may call for points in locations near the boundaries. As this test is liable to
generate significant numbers of false positives, the test will pass if there
are more than 100 reported misalignments.


  • WARN The following glyphs have on-curve points which have potentially incorrect y coordinates:
    • uni3014: X=293.0,Y=2.0 (should be at baseline 0?)
    • uni3015: X=293.0,Y=2.0 (should be at baseline 0?)
    • uniA059: X=219.5,Y=712.0 (should be at cap-height 714?)
    • uniA06C: X=156.0,Y=713.0 (should be at cap-height 714?)
    • uniA06C: X=577.0,Y=713.0 (should be at cap-height 714?)
    • uniA07D: X=268.0,Y=0.5 (should be at baseline 0?)
    • uniA07D: X=208.5,Y=0.5 (should be at baseline 0?)
    • uniA0CD: X=310.0,Y=0.5 (should be at baseline 0?)
    • uniA0CD: X=240.0,Y=0.5 (should be at baseline 0?)
    • uniA0F1: X=283.0,Y=713.0 (should be at cap-height 714?) and 69 more. [code: found-misalignments]

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 12 6 49 8 120 0
0% 6% 3% 25% 4% 62% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

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

Successfully merging this pull request may close these issues.

None yet

2 participants